Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruik aangepaste gegevenskanalen om aangepaste gegevens te verzenden via een tot stand gebrachte externe verbinding.
Belangrijk
Aangepaste gegevenskanalen vereisen een aangepaste externe app en een aangepaste speler-app, omdat hiermee communicatie tussen de twee aangepaste apps mogelijk is.
Tip
Een eenvoudig voorbeeld van ping-pong is te vinden in de voorbeelden van externe en spelers in de GitHub-opslagplaats Holographic Remoting samples. Verwijder de opmerking #define ENABLE_CUSTOM_DATA_CHANNEL_SAMPLE in de bestanden SampleRemoteApp.h/SamplePlayerMain.h om de voorbeeldcode in te schakelen.
Een aangepast gegevenskanaal maken
Als u een aangepast gegevenskanaal wilt maken, zijn de volgende velden vereist:
std::recursive_mutex m_customDataChannelLock;
winrt::Microsoft::Holographic::AppRemoting::IDataChannel m_customDataChannel = nullptr;
winrt::Microsoft::Holographic::AppRemoting::IDataChannel::OnDataReceived_revoker m_customChannelDataReceivedEventRevoker;
winrt::Microsoft::Holographic::AppRemoting::IDataChannel::OnClosed_revoker m_customChannelClosedEventRevoker;
Nadat een verbinding tot stand is gebracht, kunt u nieuwe gegevenskanalen maken vanaf de externe zijde, de spelerzijde of beide. Zowel de RemoteContext als de PlayerContext bieden een CreateDataChannel() methode voor het maken van gegevenskanalen. De eerste parameter is de kanaal-id, die wordt gebruikt om het gegevenskanaal in latere bewerkingen te identificeren. De tweede parameter is de prioriteit waarmee wordt opgegeven met welke prioriteitsgegevens van dit kanaal naar de andere kant worden overgedragen. Aan de externe zijde variëren geldige kanaal-id's van 0 tot en met 63. Aan de zijde van de speler zijn geldige kanaal-id's van 64 tot en met 127. Geldige prioriteiten zijn Low, Mediumof High.
Het maken van een gegevenskanaal aan de externe zijde starten:
// Valid channel ids for channels created on the remote side are 0 up to and including 63
m_remoteContext.CreateDataChannel(0, DataChannelPriority::Low);
Het maken van een gegevenskanaal aan de zijde van de speler starten:
// Valid channel ids for channels created on the player side are 64 up to and including 127
m_playerContext.CreateDataChannel(64, DataChannelPriority::Low);
Opmerking
Als u een nieuw aangepast gegevenskanaal wilt maken, hoeft slechts één zijde (extern of speler) de CreateDataChannel methode aan te roepen.
Aangepaste gegevenskanaal-gebeurtenissen verwerken
Om een aangepast gegevenskanaal tot stand te brengen, moet de OnDataChannelCreated gebeurtenis worden verwerkt (zowel aan de speler als aan de externe zijde). Het wordt geactiveerd wanneer een gebruikersgegevenskanaal aan een van beide zijden wordt gemaakt en biedt een IDataChannel -object dat kan worden gebruikt om gegevens via dit kanaal te verzenden en te ontvangen.
Een listener registreren voor de OnDataChannelCreated gebeurtenis:
m_onDataChannelCreatedEventRevoker = m_remoteContext.OnDataChannelCreated(winrt::auto_revoke,
[this](const IDataChannel& dataChannel, uint8_t channelId)
{
std::lock_guard lock(m_customDataChannelLock);
m_customDataChannel = dataChannel;
// Register to OnDataReceived and OnClosed event of the data channel here, see below...
});
Als u een melding wilt ontvangen wanneer gegevens worden ontvangen, registreert u zich bij de OnDataReceived gebeurtenis op het IDataChannel object dat door de OnDataChannelCreated handler is verstrekt. Registreer u bij de OnClosed gebeurtenis om een melding te ontvangen wanneer het gegevenskanaal wordt gesloten.
m_customChannelDataReceivedEventRevoker = m_customDataChannel.OnDataReceived(winrt::auto_revoke,
[this]()
{
// React on data received via the custom data channel here.
});
m_customChannelClosedEventRevoker = m_customDataChannel.OnClosed(winrt::auto_revoke,
[this]()
{
// React on data channel closed here.
std::lock_guard lock(m_customDataChannelLock);
if (m_customDataChannel)
{
m_customDataChannel = nullptr;
}
});
Gegevens verzenden
Gebruik de IDataChannel::SendData() methode om gegevens te verzenden via een aangepast gegevenskanaal. De eerste parameter is een winrt::array_view<const uint8_t> voor de gegevens die moeten worden verzonden. De tweede parameter geeft aan waar de gegevens opnieuw moeten worden verzonden, totdat de andere zijde de ontvangst bevestigt.
Belangrijk
In slechte netwerkomstandigheden kan hetzelfde gegevenspakket meer dan één keer binnenkomen. De ontvangende code moet deze situatie kunnen verwerken.
uint8_t data[] = {1};
m_customDataChannel.SendData(data, true);
Een aangepast gegevenskanaal sluiten
Gebruik de IDataChannel::Close() methode om een aangepast gegevenskanaal te sluiten. Beide zijden worden op de hoogte gesteld van de OnClosed gebeurtenis zodra het aangepaste gegevenskanaal is gesloten.
m_customDataChannel.Close();
Zie ook
- Overzicht van holografische remoting
- Een externe holographic remoting-app schrijven met behulp van Windows Mixed Reality-API's
- Een holographic remoting remote app schrijven met behulp van OpenXR API's
- Een aangepaste Holographic Remoting-speler-app schrijven
- Problemen met holografische remoting oplossen en beperkingen
- Licentievoorwaarden voor Holographic Remoting-software
- Privacyverklaring van Microsoft