void parseSocket() { string socket_key = "", socket_ext = "", socket_ver = ""; if (!_req.TryGetHeader("Sec-WebSocket-Key", out socket_key) || !_req.TryGetHeader("Sec-WebSocket-Version", out socket_ver) || !_req.TryGetHeader("Sec-WebSocket-Extensions", out socket_ext)) return; string socket_protocol = ""; if (!Request.TryGetHeader("Sec-WebSocket-Protocol", out socket_protocol)) socket_protocol = ""; if (!string.IsNullOrEmpty(socket_protocol)) _sessionID = socket_protocol; StringBuilder send = new StringBuilder(); send.AppendLine("HTTP/1.1 101 Switching Protocols"); WriteHeader("Upgrade", "websocket"); WriteHeader("Connection", "Upgrade"); WriteHeader("Sec-WebSocket-Accept", Html5SocketMsg.ComputeWebSocketHandshakeSecurityHash09(socket_key)); //WriteHeader("Sec-WebSocket-Protocol", "chat"); is_write_headers = true; if (send_headers != null) send.Append(send_headers.ToString()); send.AppendLine(); Write(send.ToString()); //WriteSocketMsg("Mensaje de Prueba 1"); //WriteSocketMsg("Este es un mensaje de prueba 2"); //WriteSocketMsg(LIB.Replicate("Este es un mensaje de prueba 2", 7)); //WriteSocketMsg(LIB.Replicate("Este es un mensaje de prueba 2", 2200)); }
}/* * void ProcessThread() * { * while (is_active) * { * try * { * TcpClient s = listener.AcceptTcpClient(); * if (s != null) * { * Thread thread = new Thread(new ParameterizedThreadStart(Process)); * thread.Name = "HTTP_" + s.Client.RemoteEndPoint.ToString(); * thread.IsBackground = true; * thread.Start(s); * } * Thread.Sleep(1); * } * catch { } * } * }*/ void Process(object cl) { TcpClient client = (TcpClient)cl; if (!OnAccept(client)) { client.Close(); return; } HttpProcessor processor = new HttpProcessor(((IPEndPoint)client.Client.RemoteEndPoint).Address.ToString(), client.GetStream(), this, false); if (processor.IsSocket) { Html5SocketMsg msg = null; try { while ((msg = processor.ReadSocketMsg()) != null) { switch (msg.Type) { case ESocketDataType.ping: { processor.WriteSocketMsg(msg.Data, ESocketDataType.pong); break; } case ESocketDataType.text: case ESocketDataType.binary: { OnSocketMsg(processor, msg); break; } case ESocketDataType.close: return; } } } catch (Exception ex) { try { processor.WriteSocketMsg(ex.ToString(), ESocketDataType.close); } catch { } } finally { processor.Close(); processor.Dispose(); } } else { while (processor.KeepAlive) { processor = processor.ReProcess(); if (processor == null) { return; } } } processor.Close(); processor.Dispose(); }
public Html5SocketMsg ReadSocketMsg() { return Html5SocketMsg.GetMsg(codec_post, stream); }
public void WriteSocketMsg(byte[] payload, ESocketDataType type) { byte[] dmp = Html5SocketMsg.hybi10Encode(payload, type); stream.Write(dmp, 0, dmp.Length); }
public virtual void OnSocketMsg(HttpProcessor p, Html5SocketMsg msg) { }