Я пытаюсь использовать простой пример кода 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?