/// <summary> /// クライアント起動 /// </summary> /// <param name="url"></param> /// <param name="type"></param> public WebSocketClientManager(string url, DataType type) { dataType = type; #if UNITY_UWP task = Task.Run(async() => { ws = new MessageWebSocket(); ws.Control.MessageType = (dataType == DataType.Byte) ? SocketMessageType.Binary : SocketMessageType.Utf8; ws.MessageReceived += MessageReceived; ws.Closed += (sender, e) => { if (OnWebSocketClose != null) { OnWebSocketClose.Invoke(); } }; try { await ws.ConnectAsync(new Uri(url)); } catch (Exception e) { if (OnWebSocketError != null) { OnWebSocketError.Invoke(e.ToString()); } } }); #elif UNITY_EDITOR || UNITY_STANDALONE ws = new WebSocket(url); ws.OnMessage += OnMessage; ws.OnOpen += (sender, e) => { if (OnWebSocketOpen != null) { OnWebSocketOpen.Invoke(); } }; ws.OnError += (sender, e) => { if (OnWebSocketError != null) { OnWebSocketError.Invoke(e.Message); } }; ws.OnClose += (sender, e) => { if (OnWebSocketClose != null) { OnWebSocketClose.Invoke(); } }; ws.ConnectAsync(); #endif }
/// <summary> /// 受信データイベント /// </summary> /// <param name="sender"></param> /// <param name="e"></param> #if UNITY_UWP private void MessageReceived(MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args) { try { using (DataReader datareader = args.GetDataReader()) { byte[] data = null; string text = null; if (args.MessageType == SocketMessageType.Binary) { data = new byte[datareader.UnconsumedBufferLength]; datareader.ReadBytes(data); text = Encoding.UTF8.GetString(data); } else { datareader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8; text = datareader.ReadString(datareader.UnconsumedBufferLength); data = Encoding.UTF8.GetBytes(text); } if (ReceiveByteMessage != null) { ReceiveByteMessage(data); } if (ReceiveTextMessage != null) { ReceiveTextMessage(text); } } } catch (Exception e) { if (OnWebSocketError != null) { OnWebSocketError.Invoke(e.ToString()); } } }