Canali dati personalizzati con Holographic Remoting e l'API Windows Mixed Reality
Usare canali dati personalizzati per inviare dati personalizzati tramite una connessione remota stabilita.
Importante
I canali dati personalizzati richiedono un'app remota personalizzata e un'app lettore personalizzata, in quanto consente la comunicazione tra le due app personalizzate.
Consiglio
Un semplice esempio ping-pong è disponibile negli esempi remoti e dei giocatori all'interno del repository github degli esempi di comunicazione remota holografica. Rimuovere il commento #define ENABLE_CUSTOM_DATA_CHANNEL_SAMPLE
all'interno dei file SampleRemoteApp.h /SamplePlayerMain.h per abilitare il codice di esempio.
Creare un canale dati personalizzato
Per creare un canale dati personalizzato, sono necessari i campi seguenti:
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;
Dopo aver stabilito una connessione, è possibile creare nuovi canali dati dal lato remoto, dal lato lettore o da entrambi. Sia RemoteContext che PlayerContext forniscono un CreateDataChannel()
metodo per la creazione di canali dati. Il primo parametro è l'ID canale, usato per identificare il canale dati nelle operazioni successive. Il secondo parametro è la priorità che specifica con quale dati di priorità di questo canale viene trasferito sull'altro lato. Sul lato remoto, gli ID canale validi sono compresi tra 0 e 63 inclusi. Sul lato giocatore, gli ID canale validi sono compresi tra 64 e 127 inclusi. Le priorità valide sono Low
, Medium
o High
.
Per avviare la creazione di un canale dati sul lato remoto :
// Valid channel ids for channels created on the remote side are 0 up to and including 63
m_remoteContext.CreateDataChannel(0, DataChannelPriority::Low);
Per avviare la creazione di un canale dati sul lato giocatore :
// Valid channel ids for channels created on the player side are 64 up to and including 127
m_playerContext.CreateDataChannel(64, DataChannelPriority::Low);
Nota
Per creare un nuovo canale dati personalizzato, solo un lato (remoto o lettore) deve chiamare il CreateDataChannel
metodo .
Gestione degli eventi del canale dati personalizzato
Per stabilire un canale dati personalizzato, l'evento OnDataChannelCreated
deve essere gestito (sia sul lettore che sul lato remoto). Si attiva quando un canale dati utente è stato creato da entrambi i lati e fornisce un IDataChannel
oggetto che può essere usato per inviare e ricevere dati su questo canale.
Per registrare un listener nell'evento OnDataChannelCreated
:
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...
});
Per ricevere una notifica quando vengono ricevuti i dati, eseguire la registrazione all'evento OnDataReceived
sull'oggetto IDataChannel
fornito dal OnDataChannelCreated
gestore. Eseguire la registrazione all'evento OnClosed
per ricevere una notifica quando il canale dati è stato chiuso.
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;
}
});
Invio di dati
Per inviare dati su un canale dati personalizzato, usare il IDataChannel::SendData()
metodo . Il primo parametro è un winrt::array_view<const uint8_t>
oggetto per i dati che devono essere inviati. Il secondo parametro specifica dove inviare nuovamente i dati, finché l'altro lato non riconosce la ricezione.
Importante
In caso di condizioni di rete non ottimali, lo stesso pacchetto di dati potrebbe arrivare più di una volta. Il codice ricevente deve essere in grado di gestire questa situazione.
uint8_t data[] = {1};
m_customDataChannel.SendData(data, true);
Chiusura di un canale dati personalizzato
Per chiudere un canale dati personalizzato, usare il IDataChannel::Close()
metodo . Entrambi i lati riceveranno una notifica dall'evento OnClosed
dopo la chiusura del canale dati personalizzato.
m_customDataChannel.Close();
Vedere anche
- Panoramica della comunicazione remota olografica
- Scrittura di un'app remota holographic Remoting usando le API Windows Mixed Reality
- Scrittura di un'app remota holographic Remoting usando le API OpenXR
- Scrittura di un'app del lettore holographic Remoting personalizzata
- Risoluzione dei problemi e limitazioni della comunicazione remota olografica
- Condizioni di licenza del software holographic Remoting
- Informativa sulla privacy di Microsoft