示例#1
0
        private void ReceivedHanlder(SocketToken token, BufferSegment seg)
        {
            if (IsConnected == false)
            {
                string msg = _encoding.GetString(seg.buffer, seg.offset, seg.count);
                _acceptInfo = new WebsocketFrame().ParseAcceptedFrame(msg);

                if ((IsConnected = _acceptInfo.IsHandShaked()))
                {
                    _resetEvent.Set();
                    if (onConnect != null)
                    {
                        onConnect(token, IsConnected);
                    }
                }
                else
                {
                    this._token.DisConnect();
                }
            }
            else
            {
                WebsocketFrame packet = new WebsocketFrame();
                bool           isOk   = packet.DecodingFromBytes(seg, true);
                if (isOk == false)
                {
                    return;
                }

                if (packet.opCode == 0x01)
                {
                    if (onReceivedString != null)
                    {
                        onReceivedString(token, _encoding.GetString(packet.payload.buffer,
                                                                    packet.payload.offset, packet.payload.count));
                    }

                    return;
                }
                else if (packet.opCode == 0x08)//close
                {
                    IsConnected = false;
                    this._token.DisConnect();
                }
                else if (packet.opCode == 0x09)//ping
                {
                    SendPong(seg);
                }
                else if (packet.opCode == 0x0A)//pong
                {
                    SendPing();
                }

                if (onReceieve != null && packet.payload.count > 0)
                {
                    onReceieve(token, packet.payload);
                }
            }
        }
示例#2
0
        public BufferSegment RspAcceptedFrame(AccessInfo access)
        {
            var accept = new AcceptInfo()
            {
                Connection           = access.Connection,
                Upgrade              = access.Upgrade,
                SecWebSocketLocation = access.Host,
                SecWebSocketOrigin   = access.Origin,
                SecWebSocketAccept   = (access.SecWebSocketKey + acceptMask).ToSha1Base64(encoding)
            };

            return(new BufferSegment(encoding.GetBytes(accept.ToString())));
        }
示例#3
0
        public BufferSegment RspAcceptedFrame(AccessInfo access)
        {
            var accept = new AcceptInfo()
            {
                connection           = access.connection,
                upgrade              = access.upgrade,
                secWebSocketLocation = access.host,
                secWebSocketOrigin   = access.origin,
                secWebSocketAccept   = (access.secWebSocketKey + _acceptMask).ToSha1Base64(_encoding)
            };

            return(new BufferSegment(_encoding.GetBytes(accept.ToString())));
        }
示例#4
0
        public AcceptInfo ParseAcceptedFrame(string msg)
        {
            string[] msgs       = msg.Split(BaseInfo.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            var      acceptInfo = new AcceptInfo
            {
                HttpProto = msgs[0]
            };

            foreach (var item in msgs)
            {
                string[] kv = item.Split(splitChars, StringSplitOptions.RemoveEmptyEntries);
                switch (kv[0])
                {
                case "Upgrade":
                    acceptInfo.Upgrade = kv[1];
                    break;

                case "Connection":
                    acceptInfo.Connection = kv[1];
                    break;

                case "Sec-WebSocket-Accept":
                    acceptInfo.SecWebSocketAccept = kv[1];
                    break;

                case "Sec-WebSocket-Location":
                    acceptInfo.SecWebSocketLocation = kv[1];
                    break;

                case "Sec-WebSocket-Origin":
                    acceptInfo.SecWebSocketOrigin = kv[1];
                    break;
                }
            }
            return(acceptInfo);
        }