Holographic Remoting ve Windows Mixed Reality API ile Özel Veri Kanalları
Yerleşik uzaktan iletişim bağlantısı üzerinden özel veri göndermek için özel veri kanallarını kullanın.
Ö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
Holographic Remoting örnekleri github deposunun içindeki uzak ve oyuncu örneklerinde basit bir ping-pong örneği bulunabilir. #define ENABLE_CUSTOM_DATA_CHANNEL_SAMPLE
Örnek kodu etkinleştirmek için SampleRemoteApp.h / SamplePlayerMain.h dosyalarının açıklamasını kaldırın.
Özel veri kanalı oluşturma
Özel 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, oyuncu tarafından veya her ikisinden de yeni veri kanalları oluşturabilirsiniz. Hem RemoteContext hem de PlayerContext, veri kanalları oluşturmak için bir CreateDataChannel()
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ıldığını belirten önceliktir. Uzak tarafta geçerli kanal kimlikleri 0 ile 63 arasında değişir. Oyuncu tarafında geçerli kanal kimlikleri 64'ten 127'ye kadar ve 127'ye kadardır. Geçerli öncelikler , Medium
veya High
'dırLow
.
Uzak tarafta bir veri kanalı oluşturmaya başlamak 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);
Oyuncu tarafında bir veri kanalı oluşturmaya başlamak 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öntemini çağırması CreateDataChannel
gerekir.
Özel veri kanalı olaylarını işleme
Özel bir veri kanalı OnDataChannelCreated
oluşturmak için olayın işlenmesi gerekir (hem oyuncuda hem de uzak tarafta). İki taraf tarafından bir kullanıcı veri kanalı oluşturulduğunda tetikler ve bu kanal üzerinden veri göndermek ve almak için kullanılabilecek bir IDataChannel
nesne sağlar.
Olaya dinleyici OnDataChannelCreated
kaydetmek için:
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 OnDataReceived
işleyici tarafından sağlanan nesnede IDataChannel
olaya kaydolun OnDataChannelCreated
. OnClosed
Veri kanalı kapatıldığında bildirim almak için etkinliğe 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;
}
});
Veri gönderme
Özel bir veri kanalı üzerinden veri göndermek için yöntemini kullanın IDataChannel::SendData()
. İlk parametre, gönderilmesi gereken verilerin bir winrt::array_view<const uint8_t>
parametresidir. İkinci parametre, diğer taraf alımı kabul edene kadar verilerin nereye yeniden gönderileceği belirtir.
Önemli
Hatalı ağ koşulları söz konusu olduğunda, aynı veri paketi birden çok kez gelebilir. Alıcı kodun bu durumu işleyebilmesi gerekir.
uint8_t data[] = {1};
m_customDataChannel.SendData(data, true);
Özel veri kanalını kapatma
Özel bir veri kanalını IDataChannel::Close()
kapatmak için yöntemini kullanın. Özel veri kanalı kapatıldıktan sonra olay her iki tarafa da bildirilir OnClosed
.
m_customDataChannel.Close();
Ayrıca Bkz.
- Holografik Uzaktan İletişime Genel Bakış
- Windows Mixed Reality API'lerini kullanarak holografik uzaktan iletişim uygulaması yazma
- OpenXR API'lerini kullanarak holografik uzaktan uzaktan iletişim uygulaması yazma
- Özel holografik uzaktan iletişim oynatıcı uygulaması yazma
- Holografik Uzaktan İletişim sorunlarını giderme ve sınırlamalar
- Holographic Remoting yazılımı lisans koşulları
- Microsoft Gizlilik Bildirimi