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.
Suggerimento
Un semplice esempio di ping-pong è disponibile negli esempi di giocatori e remoti all'interno del repository GitHub degli esempi di Holographic Remoting. 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 di dati. Il primo parametro è l'ID canale, che viene usato per identificare il canale dati nelle operazioni successive. Il secondo parametro è la priorità che specifica con i dati di priorità di questo canale trasferiti all'altro lato. Sul lato remoto, gli ID di canale validi sono compresi tra 0 e 63. Sul lato lettore, gli ID canale validi sono compresi tra 64 e 127. 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 lettore :
// 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, è necessario chiamare il CreateDataChannel
metodo un solo lato (remoto o lettore).
Gestione di eventi del canale dati personalizzati
Per stabilire un canale dati personalizzato, l'evento OnDataChannelCreated
deve essere gestito (sia sul lettore che sul lato remoto). Viene attivato 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, registrarsi all'evento sull'oggetto OnDataReceived
IDataChannel
fornito dal OnDataChannelCreated
gestore. Registrarsi 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 ai dati che devono essere inviati. Il secondo parametro specifica dove inviare di nuovo i dati, fino a quando l'altro lato non conferma la ricezione.
Importante
In caso di condizioni di rete non ottimali, lo stesso pacchetto di dati potrebbe arrivare più volte. 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 verranno informati dall'evento OnClosed
dopo la chiusura del canale dati personalizzato.
m_customDataChannel.Close();
Vedere anche
- Panoramica di Holographic Remoting
- Scrittura di un'app remota Holographic Remoting usando le API Windows Mixed Reality
- Scrittura di un'app remota Holographic Remoting con le API OpenXR
- Scrivere un'app lettore Holographic Remoting personalizzata
- Risoluzione dei problemi e limitazioni di Holographic Remoting
- Condizioni di licenza software per Holographic Remoting
- Informativa sulla privacy di Microsoft