public bool Process() { if (!IsConnected()) return false; TimeSpan idle = DateTime.Now - LastActivity; if ((idle.TotalSeconds > 60) && (!IsWebSocket)) { Console.Out.WriteLine("[{0}]: disconnected ID:{1}", Tcp.Client.RemoteEndPoint, ID); Tcp.Close(); return false; } if (IsWebSocket) { if (DateTime.Now > NextPing) { NextPing = DateTime.Now + TimeSpan.FromSeconds(5); return HttpHelper.SendWebSocket_Text(Tcp, "PING"); } } int a = Tcp.Available; if (a == 0) return true; LastActivity = DateTime.Now; if (IsWebSocket) { var Requests = HttpHelper.ReadWebsocketRequests(Tcp); for (int i = 0; i < Requests.Length; i++) { int opcode = Requests[i].OpCode; switch (opcode) { case 1: // text data { string response = WebSocketHandler.ExecMessage("?", Requests[i].Message); if (response != "") { if (!HttpHelper.SendWebSocket_Text(Tcp, response)) return false; } break; } default: { break; } } } Request = ""; } else { Request += HttpHelper.ReadRequest(Tcp); ProcessHttpRequest(Request); Request = ""; } return true; }