Пример #1
0
 private void CloseConnection(object sender, ConnectionCloseEventArgs e)
 {
     e.Connection.Received -= ReceivedData;
     formatters[e.Connection.Id].DeserializedMessage -= DeserializedMessage;
     formatters.Remove(e.Connection.Id);
     sessionManager.RemoveSession(e.Connection.Id);
 }
Пример #2
0
 private void FrameBuilder_OnClose(object sender, ConnectionCloseEventArgs e)
 {
     _socketHandler.OnDisconnect(new ConnectionEventArgs(ConnectionId, 0, "Disconnected by request"));
     if (BuilderConnectionClose != null)
     {
         BuilderConnectionClose(sender, e);
     }
 }
Пример #3
0
 private void FrameBuilder_OnClose(object sender, ConnectionCloseEventArgs e)
 {
     _socketHandler.OnDisconnect(new ConnectionEventArgs(ConnectionId, (int)e.Code, e.Reason));
     if (BuilderConnectionClose != null)
     {
         BuilderConnectionClose(sender, e);
     }
 }
Пример #4
0
        private void ControlMessage(byte[] data)
        {
            if (_opCode == 0x08)
            {
                ConnectionCloseEventArgs closeEventArgs;

                if (data.Length == 0)
                {
                    closeEventArgs = new ConnectionCloseEventArgs(WebSocketCloseCode.Normal, "Close frame received - zero bytes received");
                }
                else if (data.Length == 1)
                {
                    closeEventArgs = new ConnectionCloseEventArgs(WebSocketCloseCode.ProtocolError, "Invalid payload load");
                }
                else
                {
                    var code = BitConverter.ToUInt16(data, 0);
                    if (!IsValidErrorCode(code))
                    {
                        closeEventArgs = new ConnectionCloseEventArgs(WebSocketCloseCode.ProtocolError, string.Format("invalid status code {0}", code));
                    }
                    else
                    {
                        closeEventArgs = new ConnectionCloseEventArgs((WebSocketCloseCode)code, "Close frame received");
                    }
                }
                _logger.ErrorFormat("Received close code from connection {0} - {1}", ConnectionId, closeEventArgs.Reason);
                if (OnClose != null)
                {
                    OnClose(this, closeEventArgs);
                }
                return;
            }

            if (_opCode == 0x09)
            {
                if (OnPing != null)
                {
                    OnPing(this, new PingEventArgs(data));
                }
                else
                if (OnPong != null)
                {
                    OnPong(this, new PingEventArgs(data));
                }
            }


            lock (_syncFrameBuilderState)
            {
                _frameBuilderState = FrmeBuilderState.GET_INFO;
            }
        }
Пример #5
0
        private void session_ConnectionClose(object sender, ConnectionCloseEventArgs e)
        {
            if (e.LastException != null)
            {
                logger.Debug("{0} session been close: {1}",
                             _connectionToken.Substring(0, 6),
                             e.LastException.Message);
            }

            //close the last processor
            if (_lastProcessor != null)
            {
                _lastProcessor.Close();
            }

            SessionClose(this, EventArgs.Empty);
        }
Пример #6
0
        protected virtual void OnConnectionClose(byte[] payload)
        {
            ConnectionCloseEventArgs args = GetConnectionCloseEventArgsFromPayload(payload);

            if (args.Reason == null)
            {
                _logger.Information(this.GetType(), "Received web socket close message: {0}", args.Code);
            }
            else
            {
                _logger.Information(this.GetType(), "Received web socket close message: Code '{0}' Reason '{1}'", args.Code, args.Reason);
            }

            if (ConnectionClose != null)
            {
                ConnectionClose(this, args);
            }
        }
 private void C_ConnectionCloseEvent(object sender, ConnectionCloseEventArgs e)
 {
     _clientConnectionCloseEventArgs = e;
 }
 private void S_ConnectionCloseEvent(object sender, ConnectionCloseEventArgs e)
 {
     _serverConnectionCloseEventArgs = e;
 }
Пример #9
0
        public void WebSocketServer_CloseConnection_OnStopServerTest()
        {
            var clientsCount = 1;
            var ipep         = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 4445);
            var epList       = new List <TcpServerLocalEndpoint>
            {
                new TcpServerLocalEndpoint(ipep, clientsCount)
            };

            var s = new WebSocketServer();

            s.ConnectedEvent       += S_ConnectedEvent;
            s.DisconnectedEvent    += S_DisconnectedEvent;
            s.ConnectionCloseEvent += S_ConnectionCloseEvent;
            s.Start(epList);

            var c = new TcpClient();

            c.DataReceivedEvent += C_DataReceivedEvent;
            c.Start(ipep);
            var startTime = DateTime.Now;

            while (_connectionEventArgs == null)
            {
                var delta = DateTime.Now - startTime;
                if (delta.TotalSeconds > 10)
                {
                    Assert.Fail();
                }
                Thread.Sleep(1);
            }
            var         r   = new Random((int)DateTime.Now.Ticks);
            List <byte> key = new List <byte>();

            for (int i = 0; i < 16; i++)
            {
                key.Add((byte)r.Next(32, 127));
            }
            var keyStr = Convert.ToBase64String(key.ToArray());

            var reqStr = $"GET /Test HTTP/1.1\r\n";

            reqStr += "Upgrade: websocket\r\n";
            reqStr += "Connection: Upgrade\r\n";
            reqStr += $"Sec-WebSocket-Key: {keyStr}\r\n";
            reqStr += $"Sec-WebSocket-Version: 13\r\n\r\n";

            _handshakeTest     = true;
            _handshakeReceived = false;
            c.SendData(Encoding.UTF8.GetBytes(reqStr));
            startTime = DateTime.Now;
            while (_handshakeReceived == false)
            {
                var delta = DateTime.Now - startTime;
                if (delta.TotalSeconds > 10)
                {
                    Assert.Fail();
                }
                Thread.Sleep(1);
            }

            _handshakeTest = false;

            _clientFrameData.Clear();
            s.Stop();
            startTime = DateTime.Now;
            _connectionCloseEventArgs = null;
            while (_clientFrameData.Count < 4)
            {
                var delta = DateTime.Now - startTime;
                if (delta.TotalSeconds > 10)
                {
                    Assert.Fail();
                }
                Thread.Sleep(1);
            }
            Assert.AreEqual(4, _clientFrameData.Count);

            var fin    = (_clientFrameData[0] & 0x80) >> 7;
            var opcode = (_clientFrameData[0] & 0x0F);

            Assert.AreEqual(0x01, fin);
            Assert.AreEqual(0x08, opcode);

            Assert.AreEqual(0x02, _clientFrameData[1]);
            Assert.AreEqual(0x03, _clientFrameData[2]);
            Assert.AreEqual(0xE8, _clientFrameData[3]);

            c.Dispose();
            s.Dispose();
        }
Пример #10
0
 void conn_Disconnected(object sender, ConnectionCloseEventArgs e)
 {
     this.textBox_Log.AddString("网络断开:" + e.ToString());
 }