Canales de datos personalizados con comunicación remota holográfica y la API de Windows Mixed Reality
Use canales de datos personalizados para enviar datos personalizados a través de una conexión remota establecida.
Importante
Los canales de datos personalizados requieren una aplicación remota personalizada y una aplicación de reproductor personalizada, ya que permite la comunicación entre las dos aplicaciones personalizadas.
Sugerencia
Puede encontrar un ejemplo sencillo de ping-pong en los ejemplos remotos y de reproductor dentro del repositorio de github de ejemplos de Holographic Remoting. Quite la marca de comentario #define ENABLE_CUSTOM_DATA_CHANNEL_SAMPLE
dentro de los archivos SampleRemoteApp.h / SamplePlayerMain.h para habilitar el código de ejemplo.
Creación de un canal de datos personalizado
Para crear un canal de datos personalizado, se requieren los siguientes campos:
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;
Una vez establecida correctamente una conexión, puede crear nuevos canales de datos desde el lado remoto, el lado del jugador o ambos. Tanto RemoteContext como PlayerContext proporcionan un CreateDataChannel()
método para crear canales de datos. El primer parámetro es el identificador de canal, que se usa para identificar el canal de datos en operaciones posteriores. El segundo parámetro es la prioridad que especifica con qué datos de prioridad de este canal se transfieren al otro lado. En el lado remoto, los identificadores de canal válidos oscilan entre 0 y 63. En el lado del jugador, los identificadores de canal válidos son de 64 hasta y incluyen 127. Las prioridades válidas son Low
, Medium
o High
.
Para iniciar la creación de un canal de datos en el lado remoto :
// Valid channel ids for channels created on the remote side are 0 up to and including 63
m_remoteContext.CreateDataChannel(0, DataChannelPriority::Low);
Para iniciar la creación de un canal de datos en el lado del reproductor :
// Valid channel ids for channels created on the player side are 64 up to and including 127
m_playerContext.CreateDataChannel(64, DataChannelPriority::Low);
Nota
Para crear un nuevo canal de datos personalizado, solo un lado (ya sea remoto o jugador) debe llamar al CreateDataChannel
método .
Control de eventos de canal de datos personalizados
Para establecer un canal de datos personalizado, el OnDataChannelCreated
evento debe controlarse (tanto en el jugador como en el lado remoto). Se desencadena cuando un canal de datos de usuario se ha creado por cualquier lado y proporciona un IDataChannel
objeto , que se puede usar para enviar y recibir datos a través de este canal.
Para registrar un agente de escucha en el OnDataChannelCreated
evento:
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...
});
Para recibir notificaciones cuando se reciben datos, regístrese en el OnDataReceived
evento en el IDataChannel
objeto proporcionado por el OnDataChannelCreated
controlador. Regístrese en el OnClosed
evento para recibir una notificación cuando se haya cerrado el canal de datos.
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;
}
});
Envío de datos
Para enviar datos a través de un canal de datos personalizado, use el IDataChannel::SendData()
método . El primer parámetro es un winrt::array_view<const uint8_t>
objeto para los datos que se deben enviar. El segundo parámetro especifica dónde se deben reenviar los datos, hasta que el otro lado confirme la recepción.
Importante
En caso de condiciones de red incorrectas, el mismo paquete de datos podría llegar más de una vez. El código receptor debe ser capaz de controlar esta situación.
uint8_t data[] = {1};
m_customDataChannel.SendData(data, true);
Cerrar un canal de datos personalizado
Para cerrar un canal de datos personalizado, use el IDataChannel::Close()
método . Ambos lados serán notificados por el OnClosed
evento una vez cerrado el canal de datos personalizado.
m_customDataChannel.Close();
Consulte también
- Introducción al control remoto de holografías
- Escritura de una aplicación remota de comunicación remota holográfica mediante Windows Mixed Reality API
- Escritura de una aplicación remota de comunicación remota holográfica mediante las API de OpenXR
- Escritura de una aplicación de reproductor de control remoto de holografías personalizada
- Solución de problemas y limitaciones de comunicación remota holográfica
- Términos de licencia del software de control remoto de holografías
- Declaración de privacidad de Microsoft