Ejemplo n.º 1
0
        private void OnReceieve(SocketToken token, BufferSegment seg)
        {
            var connection = _connectionPool.Find(x => x.sToken.tokenId == token.tokenId);

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

                _connectionPool.Add(connection);
            }

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

                var access = serverFrame.GetHandshakePackage(seg);
                connection.IsHandShaked = access.IsHandShaked();

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

                var rsp = serverFrame.RspAcceptedFrame(access);

                this._token.SendAsync(token, rsp);

                connection.accessInfo = access;

                if (onAccept != null)
                {
                    onAccept(token);
                }
            }
            else
            {
                RefreshTimeout(token);

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

                if (packet.opCode == 0x01)//text
                {
                    if (onRecieveString != null)
                    {
                        onRecieveString(token, _encoding.GetString(seg.buffer,
                                                                   seg.offset, seg.count));
                    }

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

                if (onReceieve != null && packet.payload.count > 0)
                {
                    onReceieve(token, packet.payload);
                }
            }
        }
Ejemplo n.º 2
0
 private bool Remove(SocketToken sToken)
 {
     return(_connectionPool.RemoveAll(x => x.sToken.tokenId == sToken.tokenId) > 0);
 }
Ejemplo n.º 3
0
        private void SendPong(SocketToken token, BufferSegment seg)
        {
            var buffer = new WebsocketFrame().ToSegmentFrame(seg, OpCodeType.Bong);

            this._token.SendAsync(token, buffer);
        }
Ejemplo n.º 4
0
 private void SendPing(SocketToken sToken)
 {
     _token.SendAsync(sToken, new BufferSegment(new byte[] { 0x89, 0x00 }));
 }
Ejemplo n.º 5
0
 public bool Send(SocketToken token, BufferSegment seg, bool waiting = true)
 {
     return(this._token.SendAsync(token, seg, waiting));
 }
Ejemplo n.º 6
0
        public bool Send(SocketToken sToken, string content, bool waiting = true)
        {
            var buffer = new WebsocketFrame().ToSegmentFrame(content);

            return(_token.SendAsync(sToken, buffer, waiting));
        }
Ejemplo n.º 7
0
 public void Close(SocketToken sToken)
 {
     _token.Close(sToken);
 }