public override Dynamic.Net.Base.INetCommand Execute(Dynamic.Net.Base.INetSession session) { string wKey = GetHeader(WebSocketHeader.SecWebSocketKey); if (String.IsNullOrEmpty(wKey)) { return(null); } wKey = wKey.TrimEnd() + HandshakeCommandBase.WebSocketKeyGuid; byte[] data = Encoding.UTF8.GetBytes(wKey); byte[] result; SHA1 sha = new SHA1CryptoServiceProvider(); result = sha.ComputeHash(data); wKey = Convert.ToBase64String(result); HandshakeResponseCommand response = new HandshakeResponseCommand(); response.SetHeader(WebSocketHeader.HttpVersion, GetHeader(WebSocketHeader.HttpVersion)); response.SetHeader(WebSocketHeader.HttpCode, "101"); response.SetHeader(WebSocketHeader.SwitchingProtocols, "Switching Protocols"); response.SetHeader(WebSocketHeader.Upgrade, "websocket"); response.SetHeader(WebSocketHeader.Connection, "Upgrade"); response.SetHeader(WebSocketHeader.SecWebSocketAccept, wKey); WebSocketSession s = session as WebSocketSession; string ps = GetHeader(WebSocketHeader.SecWebSocketProtocol); if (s != null && !String.IsNullOrEmpty(ps)) { SwitchingProtocolEventArgs spargs = new SwitchingProtocolEventArgs(s, GetHeader(WebSocketHeader.SecWebSocketProtocol)); s.OnSwitchingProtocol(spargs); if (!String.IsNullOrEmpty(spargs.SelectedProtocol)) { response.SetHeader(WebSocketHeader.SecWebSocketProtocol, spargs.SelectedProtocol); s.SubProtocol = spargs.SelectedProtocol; } else { logger.Warn("没有合适的协议! {0} {1}", session.SessionID, s.EndPoint); return(null); } } return(response); }
public override Dynamic.Net.Base.INetCommand Execute(Dynamic.Net.Base.INetSession session) { session.Close(); return(null); }