Canaux de données personnalisés avec communication à distance holographique et API Windows Mixed Reality
Utilisez des canaux de données personnalisés pour envoyer des données personnalisées via une connexion de communication à distance établie.
Important
Les canaux de données personnalisés nécessitent une application distante personnalisée et une application de lecteur personnalisé, car ils permettent la communication entre les deux applications personnalisées.
Conseil
Un exemple de ping-pong simple peut être trouvé dans les exemples distant et lecteur à l’intérieur du référentiel github des exemples holographiques de communication à distance. Supprimez les marques de #define ENABLE_CUSTOM_DATA_CHANNEL_SAMPLE
commentaire dans les fichiers SampleRemoteApp.h / SamplePlayerMain.h pour activer l’exemple de code.
Créer un canal de données personnalisé
Pour créer un canal de données personnalisé, les champs suivants sont requis :
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;
Une fois la connexion établie, vous pouvez créer de nouveaux canaux de données à partir du côté distant, du côté lecteur ou des deux. RemoteContext et PlayerContext fournissent une CreateDataChannel()
méthode pour créer des canaux de données. Le premier paramètre est l’ID de canal, qui est utilisé pour identifier le canal de données dans les opérations ultérieures. Le deuxième paramètre est la priorité qui spécifie avec quelles données de priorité de ce canal sont transférées vers l’autre côté. Du côté distant, les ID de canal valides vont de 0 à 63 inclus. Côté joueur, les ID de canal valides sont compris entre 64 et 127 inclus. Les priorités valides sont Low
, Medium
ou High
.
Pour démarrer la création d’un canal de données du côté distant :
// Valid channel ids for channels created on the remote side are 0 up to and including 63
m_remoteContext.CreateDataChannel(0, DataChannelPriority::Low);
Pour démarrer la création d’un canal de données côté lecteur :
// Valid channel ids for channels created on the player side are 64 up to and including 127
m_playerContext.CreateDataChannel(64, DataChannelPriority::Low);
Notes
Pour créer un canal de données personnalisé, un seul côté (distant ou lecteur) doit appeler la CreateDataChannel
méthode.
Gestion des événements de canal de données personnalisés
Pour établir un canal de données personnalisé, l’événement OnDataChannelCreated
doit être géré (à la fois sur le lecteur et du côté distant). Il se déclenche lorsqu’un canal de données utilisateur a été créé de part et d’autre et fournit un IDataChannel
objet, qui peut être utilisé pour envoyer et recevoir des données sur ce canal.
Pour inscrire un écouteur sur l’événement 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...
});
Pour recevoir une notification lors de la réception de données, inscrivez-vous à l’événement OnDataReceived
sur l’objet IDataChannel
fourni par le OnDataChannelCreated
gestionnaire. Inscrivez-vous à l’événement OnClosed
pour être averti lorsque le canal de données a été fermé.
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;
}
});
Envoi de données
Pour envoyer des données via un canal de données personnalisé, utilisez la IDataChannel::SendData()
méthode . Le premier paramètre correspond winrt::array_view<const uint8_t>
aux données qui doivent être envoyées. Le deuxième paramètre spécifie l’emplacement où les données doivent être renvoyées, jusqu’à ce que l’autre côté reconnaisse la réception.
Important
En cas de mauvaises conditions réseau, le même paquet de données peut arriver plusieurs fois. Le code de réception doit être en mesure de gérer cette situation.
uint8_t data[] = {1};
m_customDataChannel.SendData(data, true);
Fermeture d’un canal de données personnalisé
Pour fermer un canal de données personnalisé, utilisez la IDataChannel::Close()
méthode . Les deux parties seront averties par l’événement OnClosed
une fois le canal de données personnalisé fermé.
m_customDataChannel.Close();
Voir aussi
- Vue d’ensemble de la communication à distance holographique
- Écriture d’une application distante holographique à distance à l’aide de Windows Mixed Reality API
- Écriture d’une application distante holographique à distance à l’aide d’API OpenXR
- Écriture d’une application de lecteur de communication à distance holographique personnalisée
- Résolution des problèmes et limitations de la communication à distance holographique
- Termes du contrat de licence de la communication à distance holographique
- Déclaration de confidentialité Microsoft