Custom Data Channels with Holographic Remoting and the Windows Mixed Reality API
Egyéni adatcsatornák használatával egyéni adatokat küldhet egy létrehozott újrakapcsolódási kapcsolaton keresztül.
Fontos
Az egyéni adatcsatornákhoz egyéni távoli alkalmazásra és egyéni lejátszóalkalmazásra van szükség, mivel lehetővé teszi a két egyéni alkalmazás közötti kommunikációt.
Tipp
Egy egyszerű pingpong-példa található a távoli és játékos mintákban a Holographic Remoting samples GitHub-adattárban. #define ENABLE_CUSTOM_DATA_CHANNEL_SAMPLE
A mintakód engedélyezéséhez lépjen ki a SampleRemoteApp.h/ SamplePlayerMain.h fájlokból.
Egyéni adatcsatorna létrehozása
Egyéni adatcsatorna létrehozásához a következő mezők szükségesek:
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;
A kapcsolat sikeres létrehozása után létrehozhat új adatcsatornákat a távoli oldalról, a lejátszó oldaláról vagy mindkettőből. A RemoteContext és a PlayerContext is biztosít egy CreateDataChannel()
módszert az adatcsatornák létrehozásához. Az első paraméter a csatorna azonosítója, amely az adatcsatorna azonosítására szolgál a későbbi műveletekben. A második paraméter az a prioritás, amellyel a csatorna prioritási adatai átkerülnek a másik oldalra. A távoli oldalon az érvényes csatornaazonosítók 0-tól 63-ig terjednek. A játékos oldalán érvényes csatornaazonosítók 64-től egészen 127-ig érvényesek. Az érvényes prioritások a következők: Low
, Medium
vagy High
.
Adatcsatorna létrehozásának indítása a távoli oldalon:
// Valid channel ids for channels created on the remote side are 0 up to and including 63
m_remoteContext.CreateDataChannel(0, DataChannelPriority::Low);
Adatcsatorna létrehozása a lejátszó oldalán:
// Valid channel ids for channels created on the player side are 64 up to and including 127
m_playerContext.CreateDataChannel(64, DataChannelPriority::Low);
Megjegyzés
Új egyéni adatcsatorna létrehozásához csak az egyik oldalnak (távoli vagy lejátszónak) kell meghívnia a metódust CreateDataChannel
.
Egyéni adatcsatorna-események kezelése
Egyéni adatcsatorna létrehozásához az OnDataChannelCreated
eseményt kezelni kell (mind a lejátszón, mind a távoli oldalon). Akkor aktiválódik, ha egy felhasználói adatcsatorna mindkét oldalon létrejött, és egy IDataChannel
objektumot biztosít, amellyel adatokat küldhet és fogadhat ezen a csatornán keresztül.
Figyelő regisztrálása az OnDataChannelCreated
eseményen:
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...
});
Ha értesítést szeretne kapni az adatok fogadásáról, regisztráljon az OnDataReceived
eseményre a IDataChannel
OnDataChannelCreated
kezelő által biztosított objektumon. Regisztráljon az OnClosed
eseményre, hogy értesítést kapjon az adatcsatorna bezárásáról.
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;
}
});
Adatok küldése
Ha egyéni adatcsatornán keresztül szeretne adatokat küldeni, használja a metódust IDataChannel::SendData()
. Az első paraméter a winrt::array_view<const uint8_t>
küldendő adatokra vonatkozó. A második paraméter megadja, hogy hol kell újraküldni az adatokat, amíg a másik oldal nem nyugtázza a fogadást.
Fontos
Rossz hálózati feltételek esetén előfordulhat, hogy ugyanaz az adatcsomag többször is megérkezik. A fogadó kódnak képesnek kell lennie kezelni ezt a helyzetet.
uint8_t data[] = {1};
m_customDataChannel.SendData(data, true);
Egyéni adatcsatorna bezárása
Egyéni adatcsatorna bezárásához használja a metódust IDataChannel::Close()
. Az esemény mindkét oldalt értesíti OnClosed
, miután az egyéni adatcsatorna bezárult.
m_customDataChannel.Close();
Lásd még:
- Holografikus újraírás áttekintése
- Holographic Remoting távoli alkalmazás írása Windows Mixed Reality API-k használatával
- Holographic Remoting távoli alkalmazás írása OpenXR API-k használatával
- Egyéni Holographic Remoting lejátszóalkalmazás írása
- Holografikus újraírás hibaelhárítása és korlátozásai
- Holographic Remoting szoftverlicenc-feltételek
- A Microsoft adatvédelmi nyilatkozata