Exemplo n.º 1
0
        /// <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
        }
Exemplo n.º 2
0
        /// <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());
                }
            }
        }