Megosztás a következőn keresztül:


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, Mediumvagy 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 IDataChannelOnDataChannelCreated 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: