Özel holographic Remoting veri kanalları

Holographic Remoting 'e yeni başladıysanız genel bakımızı okumakisteyebilirsiniz.

Not

bu kılavuz, Windows Mixed Realityçalıştıran HoloLens 2 ve Windows bilgisayarlarda Holographic Remoting 'e özgüdür.

Özel veri kanallarını kullanarak, belirlenen bir uzaktan bağlantı bağlantısı üzerinden özel veri gönderebilirsiniz.

Önemli

Özel veri kanalları, iki özel uygulama arasında iletişime izin verdiğinden özel bir uzak uygulama ve özel bir oynatıcı uygulaması gerektirir.

İpucu

Basit bir ping-pong örneği, holographic Remoting Samples GitHub deposununiçindeki uzak ve oynatıcı örneklerinde bulunabilir. #define ENABLE_CUSTOM_DATA_CHANNEL_SAMPLEÖrnek kodu etkinleştirmek Için SampleRemoteApp. h/SamplePlayerMain. h dosyalarının içinde Açıklama kaldırın.

Özel veri kanalı oluşturma

Özel bir veri kanalı oluşturmak için aşağıdaki alanlar gereklidir:

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;

Bağlantı başarıyla kurulduktan sonra, uzak taraftan, oynatıcı tarafından veya her ikisinden yeni veri kanalları oluşturabilirsiniz. Hem RemoteContext hem de PlayerContext, CreateDataChannel() veri kanalları oluşturmak için bir yöntem sağlar. İlk parametre, sonraki işlemlerde veri kanalını tanımlamak için kullanılan kanal KIMLIĞIDIR. İkinci parametre, bu kanalın hangi öncelik verilerinin diğer tarafa aktarılacağını belirten önceliktir. Uzak tarafta, geçerli kanal kimlikleri 0 ' dan ve 63 dahil olmak üzere değişir. Player tarafında, geçerli kanal kimlikleri 64 ' e kadar ve 127 dahil olmak üzere geçerlidir. Geçerli öncelikler Low , Medium , veya High .

Uzak tarafta bir veri kanalının oluşturulmasını başlatmak için:

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

Player tarafında bir veri kanalının oluşturulmasını başlatmak için:

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

Not

Yeni bir özel veri kanalı oluşturmak için, yalnızca bir tarafın (uzak veya oynatıcı) yöntemi çağırması gerekir CreateDataChannel .

Özel veri kanalı olaylarını işleme

Özel bir veri kanalı oluşturmak için, OnDataChannelCreated olayın işlenmesi gerekir (hem Player hem de uzak tarafta). Her iki taraf tarafından bir kullanıcı veri kanalı oluşturulduğunda tetiklenir ve IDataChannel Bu kanal üzerinden veri göndermek ve almak için kullanılabilecek bir nesne sağlar.

Olaya bir dinleyici kaydetmek için 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...
    });

Veriler alındığında bildirim almak için, OnDataReceivedIDataChannel işleyicinin verdiği nesnedeki olaya kaydolun OnDataChannelCreated . OnClosedVeri kanalı kapatıldığında bildirim almak için olaya kaydolun.

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

Veriler gönderiliyor

Özel bir veri kanalı üzerinden veri göndermek için IDataChannel::SendData() yöntemini kullanın. İlk parametre, winrt::array_view<const uint8_t> gönderilmesi gereken verilere yönelik bir ' dır. İkinci parametre, diğer taraftan alımı kabul edene kadar verilerin yeniden gönderilmesi gereken yeri belirtir.

Önemli

Hatalı ağ koşulları durumunda aynı veri paketi birden fazla kez gelebilir. Alan kodu bu durumu işleyebilmelidir.

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

Özel bir veri kanalını kapatma

Özel bir veri kanalını kapatmak için IDataChannel::Close() yöntemini kullanın. OnClosedÖzel veri kanalı kapatıldıktan sonra olay tarafından her iki tarafa de bildirim gönderilir.

m_customDataChannel.Close();

Ayrıca Bkz.