Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Utilisez des canaux de données personnalisés pour envoyer des données personnalisées via une connexion à distance établie.
Importante
Les canaux de données personnalisés nécessitent une application distante personnalisée et une application de lecteur personnalisée, car elles permettent la communication entre les deux applications personnalisées.
Conseil
Vous trouverez un exemple de ping-pong simple dans les exemples distants et joueurs dans le référentiel github d’exemples de communication à distance Holographic. 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é joueur 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. Les priorités valides sont Low, Mediumou 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 commencer la création d’un canal de données côté joueur :
// Valid channel ids for channels created on the player side are 64 up to and including 127
m_playerContext.CreateDataChannel(64, DataChannelPriority::Low);
Remarque
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 est 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 des données, inscrivez-vous à l’événement OnDataReceived sur l’objet IDataChannel fourni par le OnDataChannelCreated gestionnaire. Inscrivez-vous à l’événement OnClosed pour recevoir une notification lorsque le canal de données est 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 est un winrt::array_view<const uint8_t> vers les données qui doivent être envoyées. Le deuxième paramètre spécifie où les données doivent être redirigées jusqu’à ce que l’autre côté reconnaisse la réception.
Importante
Dans des conditions réseau incorrectes, 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 côtés sont avertis 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 d’API Windows Mixed Reality
- É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 du logiciel Holographic Remoting
- Déclaration de confidentialité Microsoft