示例#1
0
 public async void Close()
 {
     using (var releaser = await _WebSocketLock.LockAsync())
     {
         MessageWebSocket.Close(0x8, "");
         WatchingHeartbaetTimer?.Dispose();
     }
 }
示例#2
0
 public ApplicationContext(CommModule commInstance, MessageWebSocket webSocket, ControlChannelTrigger channel, string id)
 {
     WebSocketHandle = webSocket;
     Channel         = channel;
     ChannelId       = id;
     CommInstance    = commInstance;
     RecievedMessage = new ConcurrentQueue <string>();
 }
示例#3
0
        void ws_MessageReceived(MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args)
        {
            var log = LogManager.GetLogger(Global.CallerName());

            try
            {
                // Instead of using args.GetDataReader, using args.GetDataStream. and create DataReader ourself.
                // Because if there's no length to read then using GetDataReader would cause exception
                var dataReader = new DataReader(args.GetDataStream());

                if (args.MessageType == SocketMessageType.Utf8)
                {
                    using (dataReader)
                    {
                        // if there's no length to read then do nothing. preventing exception
                        if (dataReader.UnconsumedBufferLength == 0)
                        {
                            return;
                        }

                        // The encoding and byte order need to match the settings of the writer
                        // we previously used.
                        dataReader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
                        dataReader.ByteOrder       = Windows.Storage.Streams.ByteOrder.LittleEndian;

                        var data = dataReader.ReadString(dataReader.UnconsumedBufferLength);
                        log.Info("ws_MessageReceived e.Message= " + data);
                        this.OnData(data);
                    }
                }
                else if (args.MessageType == SocketMessageType.Binary)
                {
                    using (dataReader)
                    {
                        // if there's no length to read then do nothing. preventing exception
                        if (dataReader.UnconsumedBufferLength == 0)
                        {
                            return;
                        }

                        dataReader.ByteOrder = Windows.Storage.Streams.ByteOrder.LittleEndian;
                        byte[] bytes = new byte[dataReader.UnconsumedBufferLength];
                        dataReader.ReadBytes(bytes);

                        log.Info("ws_MessageReceived e.Message= " + bytes);
                        this.OnData(bytes);
                    }
                }
                else
                {
                    throw new InvalidDataException("MessageWebSocketMessageReceivedEventArgs wrong MessageType ");
                }
            }
            catch (Exception e)
            {
                this.OnError("ws_MessageReceived", e);
            }
        }
示例#4
0
 public WebSocket(string url, Action <string> responseParser)
 {
     ws = new MessageWebSocket();
     ws.Control.MessageType = SocketMessageType.Utf8;
     ws.MessageReceived    += OnMessageReceived;
     uri = new Uri(url);
     this.responseParser = responseParser;
     Task.Run(() => Connect());
 }
示例#5
0
 private void Dispose()
 {
     dataWriter.Dispose();
     dataWriter = null;
     socket.Dispose();
     socket     = null;
     isAttached = false;
     isOpened   = false;
 }
示例#6
0
        private void Websocket_Closed(IWebSocket sender, WebSocketClosedEventArgs args)
        {
            writer.DetachStream();
            writer.Dispose();
            writer    = null;
            websocket = null;

            OnClose();
        }
示例#7
0
        void InitializeSocket()
        {
            socket = new MessageWebSocket();

            socket.Control.MessageType = SocketMessageType.Utf8;

            socket.MessageReceived += Socket_MessageReceived;
            socket.Closed          += Socket_Closed;
        }
    public void Disconnect()
    {
#if WINDOWS_UWP
        websocket.Close(1000, "Disconnect function is called.");
#else
        websocket.Close();
        websocket = null;
#endif
    }
 void Websocket_MessageReceived(MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args)
 {
     if (OnMessaged != null)
     {
         var reader = args.GetDataReader();
         reader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
         OnMessaged(sender, new WebSocketEventArgs(reader.ReadString(reader.UnconsumedBufferLength)));
     }
 }
示例#10
0
        public void Close()
        {
            _DataWriter?.DetachStream();
            _DataWriter = null;

            _CommentSessionWebSocket?.Close(1000, "");
            _CommentSessionWebSocket = null;
            IsConnected = false;
        }
示例#11
0
        //The MessageReceived event handler. DON'T ACCESS CANVAS!!!!
        private void WebSock_MessageReceived(MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args)
        {
            DataReader messageReader = args.GetDataReader();

            messageReader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
            messageReader.ByteOrder       = ByteOrder.LittleEndian;
            incomingMessageString         = messageReader.ReadString(messageReader.UnconsumedBufferLength);
            ReceiveAndEnqueue(incomingMessageString);
        }
        //	one shared data writer;	http://stackoverflow.com/a/39653730

        public WebSocket(string Url)
        {
            url    = TryGetUri(Url);
            socket = new MessageWebSocket();
            socket.MessageReceived += OnMessageRecieved;
            socket.Closed          += OnClosed;
            MessageWriter           = new DataWriter(socket.OutputStream);
            SendLock = new System.Threading.Mutex();
        }
        private async Task WebSock_SendMessage(MessageWebSocket webSock, string message)
        {
            Debug.WriteLine("WebSock_SendMessage : " + message);

            DataWriter messageWriter = new DataWriter(webSock.OutputStream);

            messageWriter.WriteString(message);
            await messageWriter.StoreAsync();
        }
示例#14
0
        private void MessageReceived(MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args)
        {
            var messageReader = args.GetDataReader();

            messageReader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
            var messageString = messageReader.ReadString(messageReader.UnconsumedBufferLength);

            this.OnMessageReceived?.Invoke(this, messageString);
        }
示例#15
0
 public Live2WebSocket(Mntone.Nico2.Live.Watch.Crescendo.CrescendoLeoProps props)
 {
     Props            = props;
     MessageWebSocket = new MessageWebSocket();
     MessageWebSocket.Control.MessageType              = SocketMessageType.Utf8;
     MessageWebSocket.MessageReceived                 += MessageWebSocket_MessageReceived;
     MessageWebSocket.ServerCustomValidationRequested += MessageWebSocket_ServerCustomValidationRequested;
     MessageWebSocket.Closed += MessageWebSocket_Closed;
 }
示例#16
0
 void InitWinRT()
 {
     _webSocket            = new WebSocket(_serverUri);
     _webSocket.OnMessage += WebSocketOnMessage;
     _webSocket.OnClose   += WebSocketOnClose;
     _webSocket.OnOpen    += WebSocketOnOpen;
     _webSocket.OnError   += WebSocketOnError;
     _webSocket.ConnectAsync();
 }
示例#17
0
        // Close connection
        private void Closed(IWebSocket sender, WebSocketClosedEventArgs args)
        {
            MessageWebSocket webSocket = Interlocked.Exchange(ref messageWebSocket, null);

            if (webSocket != null)
            {
                webSocket.Dispose();
            }
        }
        public WebSocketJavaScriptExecutor()
        {
            _webSocket = new MessageWebSocket();
            _webSocket.Control.MessageType = SocketMessageType.Utf8;
            _webSocket.MessageReceived    += OnMessageReceived;

            _injectedObjects = new JObject();
            _callbacks       = new Dictionary <int, TaskCompletionSource <JToken> >();
        }
示例#19
0
        public async Task connect()
        {
            Debug.WriteLine("WSC connect()...");

            if (socket == null)
            {
                socket = new MessageWebSocket();
                if (userAgent != null)
                {
                    socket.SetRequestHeader("X-Signal-Agent", userAgent);
                }
                socket.MessageReceived += OnMessageReceived;
                socket.Closed          += OnClosed;

                try
                {
                    Uri server = new Uri(wsUri);
                    await socket.ConnectAsync(server);

                    if (socket != null)
                    {
                        attempts  = 0;
                        connected = true;
                    }
                    //Connected(this, EventArgs.Empty);
                    keepAliveTimer = new Timer(sendKeepAlive, null, TimeSpan.FromSeconds(KEEPALIVE_TIMEOUT_SECONDS), TimeSpan.FromSeconds(KEEPALIVE_TIMEOUT_SECONDS));
                    messageWriter  = new DataWriter(socket.OutputStream);

                    Debug.WriteLine("WSC connected...");
                    Connected?.Invoke(this, EventArgs.Empty);
                }
                catch (Exception e)
                {
                    /*WebErrorStatus status = WebSocketError.GetStatus(e.GetBaseException().HResult);
                     *
                     * switch (status)
                     * {
                     *  case WebErrorStatus.CannotConnect:
                     *  case WebErrorStatus.NotFound:
                     *  case WebErrorStatus.RequestTimeout:
                     *      Debug.WriteLine("Cannot connect to the server. Please make sure " +
                     *          "to run the server setup script before running the sample.");
                     *      break;
                     *
                     *  case WebErrorStatus.Unknown:
                     *      throw;
                     *
                     *  default:
                     *      Debug.WriteLine("Error: " + status);
                     *      break;
                     * }*/
                    this.connected = false;
                    ConnectionFailed?.Invoke(this, EventArgs.Empty);
                    Debug.WriteLine("Unable to connect WSC");
                }
            }
        }
示例#20
0
 public Live2WebSocket(LeoPlayerProps props)
 {
     Props            = props;
     MessageWebSocket = new MessageWebSocket();
     MessageWebSocket.Control.MessageType              = SocketMessageType.Utf8;
     MessageWebSocket.MessageReceived                 += MessageWebSocket_MessageReceived;
     MessageWebSocket.ServerCustomValidationRequested += MessageWebSocket_ServerCustomValidationRequested;
     MessageWebSocket.Closed += MessageWebSocket_Closed;
 }
    private void WebSocketMessageReceived(MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args)
    {
        if (args.MessageType == SocketMessageType.Utf8)
        {
            string jsonOutput;
            using (var dataReader = args.GetDataReader())
            {
                dataReader.UnicodeEncoding = UnicodeEncoding.Utf8;
                jsonOutput = dataReader.ReadString(dataReader.UnconsumedBufferLength);
            }

            var result = JsonConvert.DeserializeObject <Result>(jsonOutput);
            foreach (var receiver in TextReceivers)
            {
                receiver.OnTextReceived(result);
            }
        }
        else if (args.MessageType == SocketMessageType.Binary)
        {
            // the binary output is the text to speech audio
            using (var dataReader = args.GetDataReader())
            {
                dataReader.ByteOrder = ByteOrder.LittleEndian;

                // Read the data from the audio returned - convert to [-1.0f, 1.0f]
                // then we can use an AudioClip in Unity and set the data into it and
                // play it back...
                var numBytes = dataReader.UnconsumedBufferLength;

                // Skip over the RIFF header for PCM 16bit 16kHz mono output
                var headerSize = 44;
                var bytes      = new byte[headerSize];
                dataReader.ReadBytes(bytes);

                // skip the header
                var numSamples = (int)(numBytes - headerSize);

                float[] data = new float[numSamples];
                //var count = await dataReader.LoadAsync(numSamples);

                int numInt16s = numSamples / sizeof(Int16);
                for (int i = 0; i < numInt16s; i++)
                {
                    data[i] = dataReader.ReadInt16() / (float)Int16.MaxValue;
                }

                // Notify observers with this audio data.. (probably should notify the header
                // to future-proof but skip that for now - API data is signed 16bit PCM mono audio)
                _args.Data = data;
                foreach (var receiver in AudioReceivers)
                {
                    receiver.OnAudioReceived(_args);
                }
            }
        }
    }
示例#22
0
        private MessageWebSocket GetMessageWebSocket()
        {
            var socket = new MessageWebSocket();

            socket.Control.MessageType = SocketMessageType.Utf8;
            socket.MessageReceived    += HandleMessage;
            socket.Closed += HandleClosed;

            return(socket);
        }
示例#23
0
    private void WebSock_MessageReceived(MessageWebSocket sender, MessageWebSocketMessageReceivedEventArgs args)
    {
        DataReader messageReader = args.GetDataReader();

        messageReader.UnicodeEncoding = UnicodeEncoding.Utf8;
        string messageString = messageReader.ReadString(messageReader.UnconsumedBufferLength);

        OnMessageReceived?.Invoke(messageString);
        messageReader.Dispose();
    }
示例#24
0
 public void Close()
 {
     if (WebSocket != null)
     {
         WebSocket.Dispose();
         WebSocket = null;
         isAlive   = false;
         OnClosed?.Invoke(null, EventArgs.Empty);
     }
 }
 /// <summary>
 /// Closes the connection to the websocket.
 /// </summary>
 /// <returns>The task of closing the websocket connection.</returns>
 private async Task CloseInternalAsync()
 {
     await Task.Run(() =>
     {
         this.websocket.Close(WebSocketCloseStatus_NormalClosure, "Closed due to user request.");
         this.websocket.Dispose();
         this.websocket   = null;
         this.IsConnected = false;
     });
 }
        // This may be triggered remotely by the server or locally by Close/Dispose()
        private void Closed(IWebSocket sender, WebSocketClosedEventArgs args)
        {
            MarshalText(OutputField, "Closed; Code: " + args.Code + ", Reason: " + args.Reason + "\r\n");

            if (messageWebSocket != null)
            {
                messageWebSocket.Dispose();
                messageWebSocket = null;
            }
        }
示例#27
0
    public void Close()
    {
#if WINDOWS_UWP
        ws.Close(1000, "Disconnect function is called.");
        ws = null;
#else
        ws.Close();
        ws = null;
#endif
    }
示例#28
0
        private void Closed(IWebSocket sender, WebSocketClosedEventArgs args)
        {
            System.Diagnostics.Debug.WriteLine("Closed; Code: " + args.Code + ", Reason: " + args.Reason);

            if (messageWebSocket != null)
            {
                messageWebSocket.Dispose();
                messageWebSocket = null;
            }
        }
示例#29
0
 private void CreateSocket()
 {
     _socket?.Dispose();
     _socket = new MessageWebSocket();
     _socket.Control.MessageType = SocketMessageType.Utf8;
     _socket.MessageReceived    += HandleMessage;
     _socket.Closed += HandleClosed;
     _dataWriter?.Dispose();
     _dataWriter = new DataWriter(_socket.OutputStream);
 }
示例#30
0
        private static void WebSocket_ReceivedMessage(MessageWebSocket ws, MessageWebSocketMessageReceivedEventArgs args)
        {
            DataReader reader = args.GetDataReader();

            reader.UnicodeEncoding = Windows.Storage.Streams.UnicodeEncoding.Utf8;
            string result = reader.ReadString(reader.UnconsumedBufferLength);

            //Here, you need to put receive message to the chat room view model.
            Debug.WriteLine(result);
        }