public bool Parse(string header) { Regex regex = new Regex("\r\n"); string[] headers = regex.Split(header); if (headers == null || headers.Length == 0) { return(false); } string curHead = ""; for (int i = 0; i < headers.Length; i++) { curHead = headers[i]; if (i == 0) { string[] rs = curHead.Split(' '); if (rs == null || rs.Length == 0) { return(false); } SetHeader(WebSocketHeader.Method, rs[0]); if (rs.Length > 1) { SetHeader(WebSocketHeader.Url, rs[1]); } if (rs.Length > 2) { SetHeader(WebSocketHeader.HttpVersion, rs[2]); } continue; } string[] hf = curHead.Split(':'); if (hf.Length == 2) { WebSocketHeader h = WebSocketHeaderConverter.ConverterToHeader(hf[0]); if (h != WebSocketHeader.Unknown) { SetHeader(h, hf[1].TrimStart(' ')); } } } logger.Info("接收到的WebSocket请求:\r\n{0}", header); return(true); }
public Byte[] GetResponseData(INetSession session) { StringBuilder sbCommand = new StringBuilder(); sbCommand.Append(GetHeader(WebSocketHeader.HttpVersion)).Append(" "); sbCommand.Append(GetHeader(WebSocketHeader.HttpCode)).Append(" "); sbCommand.Append(GetHeader(WebSocketHeader.SwitchingProtocols)); sbCommand.Append(headerWrap); sbCommand.Append(WebSocketHeaderConverter.ConverterToString(WebSocketHeader.Upgrade)); sbCommand.Append(": "); sbCommand.Append(GetHeader(WebSocketHeader.Upgrade)); sbCommand.Append(headerWrap); sbCommand.Append(WebSocketHeaderConverter.ConverterToString(WebSocketHeader.Connection)); sbCommand.Append(": "); sbCommand.Append(GetHeader(WebSocketHeader.Connection)); sbCommand.Append(headerWrap); sbCommand.Append(WebSocketHeaderConverter.ConverterToString(WebSocketHeader.SecWebSocketAccept)); sbCommand.Append(": "); sbCommand.Append(GetHeader(WebSocketHeader.SecWebSocketAccept)); sbCommand.Append(headerWrap); WebSocketSessionBase s = session as WebSocketSessionBase; if (s != null && !String.IsNullOrEmpty(s.SubProtocol)) { sbCommand.Append(WebSocketHeaderConverter.ConverterToString(WebSocketHeader.SecWebSocketProtocol)); sbCommand.Append(": "); sbCommand.Append(s.SubProtocol); sbCommand.Append(headerWrap); } sbCommand.Append(headerWrap); string response = sbCommand.ToString(); Debug.WriteLine(response); logger.Info("CommandName:{0}\r\nResponseContent:{1}", Name, response); return(Encoding.GetBytes(response)); }