Используйте Windows.Networking.Sockets.MessageWebSocket на HoloLens с Unity для связи с Socket.io - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь использовать простой пример кода MessageWebSocket в простом проекте HolityLens Unity3D, чтобы построить его на HoloLens (UWP).

Мой код равен 1: 1, так же, какна странице Microsoft, за исключением того, что я обертываю почти все с #if !UNITY_EDITOR ... #endif

Что я хочу: Простой WebSocket Client, работающий на HoloLens, взаимодействующий с socket.io!

Код:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
#if !UNITY_EDITOR
using System.Threading.Tasks;
using Windows;
#endif

public class WebSocket : MonoBehaviour {
#if !UNITY_EDITOR
    private Windows.Networking.Sockets.MessageWebSocket messageWebSocket;
#endif

    // Use this for initialization
    void Start () {
        Debug.Log("WELCOME 2 THE UNITY");

#if !UNITY_EDITOR
        Debug.Log("WELCOME 2 THE HOLOOOO");
        startSocket();
#endif
    }

    // Update is called once per frame
    void Update () {

    }
#if !UNITY_EDITOR

    void startSocket()
    {

        this.messageWebSocket = new Windows.Networking.Sockets.MessageWebSocket();

        // In this example, we send/receive a string, so we need to set the MessageType to Utf8.
        this.messageWebSocket.Control.MessageType = Windows.Networking.Sockets.SocketMessageType.Utf8;

        this.messageWebSocket.MessageReceived += WebSocket_MessageReceived;
        this.messageWebSocket.Closed += WebSocket_Closed;

        try
        {
            Task connectTask = this.messageWebSocket.ConnectAsync(new Uri("wss://echo.websocket.org")).AsTask();
            connectTask.ContinueWith(_ => this.SendMessageUsingMessageWebSocketAsync("Hello, World!"));
        }
        catch (Exception ex)
        {
            Windows.Web.WebErrorStatus webErrorStatus = Windows.Networking.Sockets.WebSocketError.GetStatus(ex.GetBaseException().HResult);
            // Add additional code here to handle exceptions.
            Debug.Log(ex.Message);
        }
    }

    private async Task SendMessageUsingMessageWebSocketAsync(string message)
    {
        using (var dataWriter = new Windows.Storage.Streams.DataWriter(this.messageWebSocket.OutputStream))
        {
            dataWriter.WriteString(message);
            await dataWriter.StoreAsync();
            dataWriter.DetachStream();
        }
        Debug.Log("Sending message using MessageWebSocket: " + message);
    }

    private void WebSocket_MessageReceived(Windows.Networking.Sockets.MessageWebSocket sender, Windows.Networking.Sockets.MessageWebSocketMessageReceivedEventArgs args)
    {
        try
        {
            using (Windows.Storage.Streams.DataReader dataReader = args.GetDataReader())
            {
                dataReader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
                string message = dataReader.ReadString(dataReader.UnconsumedBufferLength);
                Debug.Log("Message received from MessageWebSocket: " + message);
                this.messageWebSocket.Dispose();
            }
        }
        catch (Exception ex)
        {
            Windows.Web.WebErrorStatus webErrorStatus = Windows.Networking.Sockets.WebSocketError.GetStatus(ex.GetBaseException().HResult);
            // Add additional code here to handle exceptions.
        }
    }

    private void WebSocket_Closed(Windows.Networking.Sockets.IWebSocket sender, Windows.Networking.Sockets.WebSocketClosedEventArgs args)
    {
        Debug.Log("WebSocket_Closed; Code: " + args.Code + ", Reason: \"" + args.Reason + "\"");
        // Add additional code here to handle the WebSocket being closed.
    }
#endif

}

Когда я использую wss: //echo.websocket.org, тогда он работает, но когда я изменяю его на локально работающий сервер Socket.io, он не 'Не отправлять сообщения или получать его.У меня нет ошибок.

Я пытался с ws: // localhost: 1337 или http://localhost:1337 - не повезло.А с socket.io вы отправляете сообщение с событием (например: io.emit ('event', 'message');), но в этом случае это только dataWriter.WriteString (message);

-Да, HoloLens и мой сервер Socket.io работают в одной сети.Вместо локального хоста также используется IP-адрес компьютера, на котором работает socket.io

Как использовать Windows.Networking.Sockets.MessageWebSocket для связи с socket.io?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...