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); } } }
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()))); }
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()))); }
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); }