Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте пользовательские каналы данных для отправки пользовательских данных через установленное подключение удаленного взаимодействия.
Важно!
Для пользовательских каналов данных требуется пользовательское удаленное приложение и пользовательское приложение проигрывателя, так как оно обеспечивает обмен данными между двумя пользовательскими приложениями.
Совет
Простой пример для пинг-понгов можно найти в примерах удаленного и проигрывателя в репозитории примеров голографического удаленного взаимодействия GitHub. Раскомментируйте #define ENABLE_CUSTOM_DATA_CHANNEL_SAMPLE файлы SampleRemoteApp.h / SamplePlayerMain.h, чтобы включить пример кода.
Создание пользовательского канала данных
Для создания пользовательского канала данных требуются следующие поля:
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;
После успешной установки подключения можно создать новые каналы данных с удаленной стороны, со стороны игрока или с обеих сторон. RemoteContext и PlayerContext предоставляют CreateDataChannel() метод для создания каналов данных. Первый параметр — это идентификатор канала, который используется для идентификации канала данных в последующих операциях. Второй параметр — это приоритет, указывающий, с каким приоритетом данные этого канала передаются на другую сторону. На удаленной стороне допустимые идентификаторы каналов варьируются от 0 до 63. На стороне игрока допустимые идентификаторы каналов — от 64 до 127 включительно. Допустимые приоритеты: Low, Mediumили High.
Чтобы начать создание канала данных на удаленной стороне, выполните следующие действия.
// Valid channel ids for channels created on the remote side are 0 up to and including 63
m_remoteContext.CreateDataChannel(0, DataChannelPriority::Low);
Чтобы начать создание канала данных на стороне игрока , выполните следующие действия.
// Valid channel ids for channels created on the player side are 64 up to and including 127
m_playerContext.CreateDataChannel(64, DataChannelPriority::Low);
Примечание
Чтобы создать пользовательский канал данных, только одна сторона (удаленная или проигрыватель) должна вызвать CreateDataChannel метод .
Обработка событий пользовательского канала данных
Чтобы создать пользовательский канал данных, необходимо обработать событие (как на проигрывателе, OnDataChannelCreated так и на удаленной стороне). Он активируется при создании пользовательского канала данных с обеих сторон и предоставляет IDataChannel объект , который можно использовать для отправки и получения данных по этому каналу.
Чтобы зарегистрировать прослушиватель в событии, выполните следующие 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...
});
Чтобы получать уведомления о получении данных, зарегистрируйтесь в событии OnDataReceived объекта IDataChannel , предоставленного обработчиком OnDataChannelCreated . Зарегистрируйтесь в событии OnClosed , чтобы получать уведомления о закрытии канала данных.
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;
}
});
Отправка данных
Для отправки данных по пользовательскому каналу IDataChannel::SendData() данных используйте метод . Первый параметр — это winrt::array_view<const uint8_t> для данных, которые должны быть отправлены. Второй параметр указывает, куда следует повторно отправить данные, пока другая сторона не подтвердит получение.
Важно!
В случае плохих сетевых условий один и тот же пакет данных может поступать несколько раз. Получая код должен иметь возможность обрабатывать эту ситуацию.
uint8_t data[] = {1};
m_customDataChannel.SendData(data, true);
Закрытие пользовательского канала данных
Чтобы закрыть пользовательский канал данных, используйте IDataChannel::Close() метод . Обе стороны получат уведомление о событии OnClosed после закрытия пользовательского канала данных.
m_customDataChannel.Close();
См. также:
- Обзор удаленного голографического взаимодействия
- Написание удаленного приложения голографического удаленного взаимодействия с помощью API Windows Mixed Reality
- Написание удаленного приложения голографического удаленного взаимодействия с помощью API OpenXR
- Создание пользовательского проигрывателя для голографического удаленного взаимодействия
- Устранение неполадок и ограничения голографического удаленного взаимодействия
- Условия лицензии на использование ПО для голографического удаленного взаимодействия
- Заявление о конфиденциальности Майкрософт