private void ReceivedHanlder(SegmentToken session)
        {
            if (IsConnected == false)
            {
                string msg = encoding.GetString(session.Data.buffer, session.Data.offset, session.Data.size);
                acceptInfo = new WebsocketFrame().ParseAcceptedFrame(msg);

                if ((IsConnected = acceptInfo.IsHandShaked()))
                {
                    resetEvent.Set();
                    if (OnConnected != null)
                    {
                        OnConnected(session.sToken, IsConnected);
                    }
                }
                else
                {
                    clientProvider.Disconnect();
                }
            }
            else
            {
                WebsocketFrame packet = new WebsocketFrame();
                bool           isOk   = packet.DecodingFromBytes(session.Data, true);
                if (isOk == false)
                {
                    return;
                }

                if (packet.OpCode == 0x01)
                {
                    if (OnReceived != null)
                    {
                        OnReceived(session.sToken, encoding.GetString(packet.Payload.buffer,
                                                                      packet.Payload.offset, packet.Payload.size));
                    }

                    return;
                }
                else if (packet.OpCode == 0x08)//close
                {
                    IsConnected = false;
                    clientProvider.Disconnect();
                }
                else if (packet.OpCode == 0x09)//ping
                {
                    SendPong(session.Data);
                }
                else if (packet.OpCode == 0x0A)//pong
                {
                    SendPing();
                }

                if (OnReceivedBytes != null && packet.Payload.size > 0)
                {
                    OnReceivedBytes(new SegmentToken(session.sToken, packet.Payload));
                }
            }
        }
        public bool Send(string msg, bool waiting = true)
        {
            if (IsConnected == false)
            {
                return(false);
            }

            var buf = new WebsocketFrame().ToSegmentFrame(msg);

            clientProvider.Send(buf, waiting);
            return(true);
        }
Example #3
0
        private void ReceivedHandler(SegmentToken session)
        {
            var connection = ConnectionPool.Find(x => x.sToken.TokenId == session.sToken.TokenId);

            if (connection == null)
            {
                connection = new ConnectionInfo()
                {
                    sToken = session.sToken
                };

                ConnectionPool.Add(connection);
            }

            if (connection.IsHandShaked == false)
            {
                var serverFrame = new WebsocketFrame();

                var access = serverFrame.GetHandshakePackage(session.Data);
                connection.IsHandShaked = access.IsHandShaked();

                if (connection.IsHandShaked == false)
                {
                    CloseAndRemove(connection);
                    return;
                }
                connection.ConnectedTime = DateTime.Now;

                var rsp = serverFrame.RspAcceptedFrame(access);

                serverProvider.Send(new SegmentToken(session.sToken, rsp));

                connection.accessInfo = access;

                if (OnAccepted != null)
                {
                    OnAccepted(session.sToken);
                }
            }
            else
            {
                RefreshTimeout(session.sToken);

                WebsocketFrame packet = new WebsocketFrame();
                bool           isOk   = packet.DecodingFromBytes(session.Data, true);
                if (isOk == false)
                {
                    return;
                }

                if (packet.OpCode == 0x01)//text
                {
                    if (OnReceived != null)
                    {
                        OnReceived(session.sToken, encoding.GetString(packet.Payload.buffer,
                                                                      packet.Payload.offset, packet.Payload.size));
                    }

                    return;
                }
                else if (packet.OpCode == 0x08)//close
                {
                    CloseAndRemove(connection);
                    return;
                }
                else if (packet.OpCode == 0x09)//ping
                {
                    SendPong(session);
                }
                else if (packet.OpCode == 0x0A)//pong
                {
                    //  SendPing(session.sToken);
                }

                if (OnReceivedBytes != null && packet.Payload.size > 0)
                {
                    OnReceivedBytes(new SegmentToken(session.sToken, packet.Payload));
                }
            }
        }
Example #4
0
        private void SendPong(SegmentToken session)
        {
            var buffer = new WebsocketFrame().ToSegmentFrame(session.Data, OpCodeType.Bong);

            serverProvider.Send(new SegmentToken(session.sToken, buffer));
        }
Example #5
0
        public bool Send(SocketToken sToken, string content, bool waiting = true)
        {
            var buffer = new WebsocketFrame().ToSegmentFrame(content);

            return(serverProvider.Send(new SegmentToken(sToken, buffer), waiting));
        }
        public void SendPing()
        {
            var buf = new WebsocketFrame().ToSegmentFrame(new byte[] { }, OpCodeType.Bing);

            clientProvider.Send(buf, true);
        }
        public void SendPong(SegmentOffset buf)
        {
            var seg = new WebsocketFrame().ToSegmentFrame(buf, OpCodeType.Bong);

            clientProvider.Send(seg, true);
        }