示例#1
0
        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);
 }