Egyéni holografikus adatáttolási csatornák

Ha még csak most szeretné elhozni a Holographic Remotingot, olvassa el az áttekintést.

Megjegyzés

Ez az útmutató a 2. HoloLens holografikus Windows és a-t futtató Windows Mixed Reality.

Egyéni adatcsatornák használatával egyéni adatokat küldhet egy már létrehozott kapcsolaton keresztül.

Fontos

Az egyéni adatcsatornákhoz egyéni távoli alkalmazás és egyéni lejátszóalkalmazás szükséges, mivel lehetővé teszi a két egyéni alkalmazás közötti kommunikációt.

Tipp

A távoli és lejátszómintákban a Holographic Remotingminta github-adattárában talál egy egyszerű ping-hub példát. A #define ENABLE_CUSTOM_DATA_CHANNEL_SAMPLE mintakód engedélyezéséhez a SampleRemoteApp.h / SamplePlayerMain.h fájlokon belül ne tegye a következőt: .

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étrejötte után új adatcsatornákat hozhat létre a távoli oldalról, a lejátszó oldalról vagy mindkettőről. A RemoteContext és a PlayerContext is biztosít egy metódust az CreateDataChannel() adatcsatornák létrehozásához. Az első paraméter a csatorna azonosítója, amely a későbbi műveletek során az adatcsatorna azonosítására használatos. A második paraméter a prioritás, amely meghatározza, hogy a csatorna mely prioritási adatai továbbíthatók a másik oldalra. A távoli oldalon az érvényes csatorna-érték 0 és 63 között lehet. A lejátszó oldalán az érvényes csatorna-érték 64 és 127 között lehet. Az érvényes prioritások a Low , a vagy a MediumHigh .

Adatcsatorna létrehozásának elkezdenie 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ásának elkezdenie 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 egy oldalnak (távoli vagy lejátszó) kell hívnia a CreateDataChannel metódust.

Egyéni adatcsatorna-események kezelése

Egyéni adatcsatorna létrehozásához az eseményt kezelni kell (a lejátszón és a OnDataChannelCreated távoli oldalon is). Akkor aktiválódik, ha egy felhasználói adatcsatornát a két oldal hozott létre, és egy objektumot biztosít, amellyel adatokat küldhet és fogadhat ezen a IDataChannel csatornán keresztül.

Listener 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...
    });

Az adatok becslőjére való értesítéshez regisztráljon az eseményre a kezelő OnDataReceivedIDataChannel által megadott OnDataChannelCreated objektumon. Regisztráljon az OnClosed eseményre, hogy értesítést kap, ha az adatcsatorna le lett zárva.

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 küld adatokat, használja a IDataChannel::SendData() metódust. Az első paraméter egy a winrt::array_view<const uint8_t> küldendre. A második paraméter határozza meg az adatok újraküldésének helyét, amíg a másik oldal nem nyugtázza a fogadást.

Fontos

Rossz hálózati körülmények esetén előfordulhat, hogy ugyanaz az adatcsomag egynél több alkalommal is é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 egyéni adatcsatorna a metódussal IDataChannel::Close() zárható be. Az esemény mindkét oldalt értesíti az egyéni adatcsatorna OnClosed lezárása után.

m_customDataChannel.Close();

Lásd még: