Vlastní holografické datové kanály pro vzdálenou komunikaci

Pokud se o vzdálenou komunikaci nepoužíváte, možná budete chtít přečíst náš přehled.

Poznámka

tyto doprovodné materiály jsou specifické pro holografickou vzdálenou komunikaci na HoloLens 2 a Windows počítačích se systémem Windows Mixed Reality.

Pomocí vlastních datových kanálů můžete odesílat vlastní data prostřednictvím navázáného připojení vzdálené komunikace.

Důležité

Vlastní datové kanály vyžadují vlastní vzdálenou aplikaci a vlastní aplikaci přehrávače, protože umožňují komunikaci mezi těmito dvěma vlastními aplikacemi.

Tip

Jednoduchý příklad příkazového testu pro testování a pong najdete v ukázkách vzdálených a aktérů v části holografické úložiště GitHub Samples. Zrušením komentáře #define ENABLE_CUSTOM_DATA_CHANNEL_SAMPLE uvnitř souborů SampleRemoteApp. h/SamplePlayerMain. h povolte vzorový kód.

Vytvoření vlastního datového kanálu

Pokud chcete vytvořit vlastní datový kanál, vyžadují se následující pole:

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;

Po úspěšném vytvoření připojení můžete vytvořit nové datové kanály buď ze vzdálené strany, ze strany přehrávače, nebo z obou. RemoteContext i PlayerContext poskytují CreateDataChannel() metodu pro vytváření datových kanálů. Prvním parametrem je ID kanálu, které se používá k identifikaci datového kanálu v pozdějších operacích. Druhým parametrem je priorita, která určuje, se kterými daty priority tohoto kanálu se přenáší na druhou stranu. Na vzdálené straně je platný rozsah ID kanálů od 0 do do včetně 63. Na straně přehrávače jsou platná ID kanálů od 64 do a včetně 127. Platné priority jsou Low , Medium nebo High .

Chcete-li zahájit vytváření datového kanálu na vzdálené straně:

// Valid channel ids for channels created on the remote side are 0 up to and including 63
m_remoteContext.CreateDataChannel(0, DataChannelPriority::Low);

Chcete-li začít vytvářet datový kanál na straně přehrávače :

// Valid channel ids for channels created on the player side are 64 up to and including 127
m_playerContext.CreateDataChannel(64, DataChannelPriority::Low);

Poznámka

Chcete-li vytvořit nový vlastní datový kanál, je nutné volat metodu pouze na jednu stranu (buď vzdáleného, nebo v přehrávači) CreateDataChannel .

Manipulace s vlastními událostmi datového kanálu

Aby bylo možné vytvořit vlastní datový kanál, OnDataChannelCreated musí být událost zpracována (v přehrávači i na vzdálené straně). Aktivuje se, když se na základě strany vytvoří datový kanál uživatele, a poskytuje IDataChannel objekt, který se dá použít k posílání a přijímání dat přes tento kanál.

Registrace naslouchacího procesu pro OnDataChannelCreated událost:

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

Chcete-li dostávat oznámení o přijetí dat, zaregistrujte se na OnDataReceived událost IDataChannel objektu poskytnutého OnDataChannelCreated obslužnou rutinou. Zaregistrujte se do OnClosed události, abyste se dostali oznámení, když se datový kanál zavřel.

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

Odesílání dat

Chcete-li odesílat data prostřednictvím vlastního datového kanálu, použijte IDataChannel::SendData() metodu. První parametr je winrt::array_view<const uint8_t> na data, která by se měla odeslat. Druhý parametr určuje, kde by měla být data znovu odeslána, dokud druhá strana nepotvrdí příjem.

Důležité

V případě chybných stavů sítě se může stejný datový paket dorazit více než jednou. Přijímající kód musí být schopný zpracovat tuto situaci.

uint8_t data[] = {1};
m_customDataChannel.SendData(data, true);

Uzavření vlastního datového kanálu

Chcete-li zavřít vlastní datový kanál, použijte IDataChannel::Close() metodu. Po zavření vlastního datového kanálu budou na obou stranách upozorněny OnClosed .

m_customDataChannel.Close();

Viz také