Anpassade datakanaler med holografisk fjärrkommunikation och Windows Mixed Reality-API:et
Använd anpassade datakanaler för att skicka anpassade data via en upprättad fjärrkommunikationsanslutning.
Viktigt
Anpassade datakanaler kräver en anpassad fjärrapp och en anpassad spelarapp, eftersom den möjliggör kommunikation mellan de två anpassade apparna.
Tips
Ett enkelt pingisexempel finns i fjärr- och spelarexemplen i github-lagringsplatsen Holographic Remoting-exempel. Ta bort kommentarer #define ENABLE_CUSTOM_DATA_CHANNEL_SAMPLE
i SampleRemoteApp.h/SamplePlayerMain.h-filerna för att aktivera exempelkoden.
Skapa en anpassad datakanal
För att skapa en anpassad datakanal krävs följande fält:
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;
När en anslutning har upprättats kan du skapa nya datakanaler från antingen fjärrsidan, spelarsidan eller båda. Både RemoteContext och PlayerContext tillhandahåller en CreateDataChannel()
metod för att skapa datakanaler. Den första parametern är kanal-ID:t som används för att identifiera datakanalen i senare åtgärder. Den andra parametern är den prioritet som anger med vilken prioritetsdata för den här kanalen överförs till den andra sidan. På fjärrsidan sträcker sig giltiga kanal-ID:t från 0 upp till och med 63. På spelarsidan är giltiga kanal-ID:t från 64 upp till och med 127. Giltiga prioriteringar är Low
, Medium
eller High
.
Så här startar du skapandet av en datakanal på fjärrsidan :
// Valid channel ids for channels created on the remote side are 0 up to and including 63
m_remoteContext.CreateDataChannel(0, DataChannelPriority::Low);
Så här startar du skapandet av en datakanal på spelarsidan :
// Valid channel ids for channels created on the player side are 64 up to and including 127
m_playerContext.CreateDataChannel(64, DataChannelPriority::Low);
Anteckning
För att skapa en ny anpassad datakanal behöver bara en sida (antingen fjärr- eller spelare) anropa CreateDataChannel
metoden.
Hantera anpassade datakanalhändelser
För att upprätta en anpassad datakanal OnDataChannelCreated
måste händelsen hanteras (både på spelaren och på fjärrsidan). Den utlöses när en användardatakanal har skapats av båda sidor och tillhandahåller ett IDataChannel
objekt som kan användas för att skicka och ta emot data över den här kanalen.
Så här registrerar du en lyssnare för OnDataChannelCreated
händelsen:
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...
});
Om du vill få ett meddelande när data tas emot registrerar du OnDataReceived
händelsen för objektet IDataChannel
som tillhandahålls av OnDataChannelCreated
hanteraren. Registrera dig för OnClosed
händelsen för att få ett meddelande när datakanalen har stängts.
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;
}
});
Skicka data
Om du vill skicka data över en anpassad datakanal använder du IDataChannel::SendData()
metoden . Den första parametern är en winrt::array_view<const uint8_t>
till de data som ska skickas. Den andra parametern anger var data ska skickas igen tills den andra sidan bekräftar mottagningen.
Viktigt
Vid dåliga nätverksförhållanden kan samma datapaket komma mer än en gång. Den mottagande koden måste kunna hantera den här situationen.
uint8_t data[] = {1};
m_customDataChannel.SendData(data, true);
Stänga en anpassad datakanal
Om du vill stänga en anpassad datakanal använder du IDataChannel::Close()
metoden . Båda sidor meddelas av OnClosed
händelsen när den anpassade datakanalen har stängts.
m_customDataChannel.Close();
Se även
- Översikt över holografisk fjärrkommunikation
- Skriva en Fjärrapp för Holographic Remoting med hjälp av Windows Mixed Reality API:er
- Skriva en Holographic Remoting-fjärrapp med OpenXR-API:er
- Skriva en anpassad Holographic Remoting Player-app
- Felsökning och begränsningar för holografisk fjärrkommunikation
- Licensvillkor för Holographic Remoting Software
- Microsofts sekretesspolicy