Ejemplo n.º 1
0
        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;
        }