Coap.Proxy.ClientConnection.Handler C# (CSharp) Method

Handler() private method

private Handler ( ) : void
return void
        private void Handler()
        {
            bool recvRequest = true;
            string EOL = "\r\n";
            string requestPayload = "";
            string requestTempLine = "";
            List<string> requestLines = new List<string>();
            byte[] requestBuffer = new byte[1];
            byte[] responseBuffer = new byte[1];

            requestLines.Clear();

            try
            {
                //State 0: Handle Request from Client
                while (recvRequest)
                {
                    this.clientSocket.Receive(requestBuffer);
                    string fromByte = ASCIIEncoding.ASCII.GetString(requestBuffer);
                    requestPayload += fromByte;
                    requestTempLine += fromByte;

                    if (requestTempLine.EndsWith(EOL))
                    {
                        requestLines.Add(requestTempLine.Trim());
                        requestTempLine = "";
                    }

                    if (requestPayload.EndsWith(EOL + EOL))
                    {
                        recvRequest = false;
                    }
                }
                //received http request
                Console.WriteLine("Raw Request Received...");
                Console.WriteLine(requestPayload);

                //State 1:Segregation
                //Nomal coap request
                if (requestLines[0].Contains(portName) & !requestLines[0].Contains("?observehost"))
                {
                    
                    //get the URL
                    string remoteHost = requestLines[0].Split(' ')[1].Replace("http://", "coap://").Split(' ')[0];
                    Uri uri = new Uri(remoteHost);

                    //creat coap request
                    Request.Method method;
                    string requestMethod = requestLines[0].Substring(0, requestLines[0].IndexOf(' ')).ToLower();
                    if (requestMethod.Trim() == "get")
                        method = Request.Method.GET;
                    else if (requestMethod.Trim() == "post")
                    {
                        method = Request.Method.POST;
                        requestPayload += requestLines[requestLines.Count-1];
                    }
                    else if (requestMethod.Trim() == "put")
                    {
                        method = Request.Method.PUT;
                        requestPayload += requestLines[requestLines.Count - 1];
                    }
                    else if (requestMethod.Trim() == "delete")
                        method = Request.Method.DELETE;
                    else
                        method = Request.Method.GET;

                    //get the payLoad
                    Payload = requestPayload;

                    //Resource discovery request
                    if (remoteHost.Contains("index"))
                    {
                        remoteHost = remoteHost.Replace("index", ".well-known/core");
                        Uri discoverUri = new Uri(remoteHost);
                        Request request = PerformCoAP(Request.Method.GET, discoverUri, false, false);
                        Action<Request> discoverHandler = new Action<Request>(HandleDiscover);
                        discoverHandler.BeginInvoke(request, null, null);
                    }
                    //nomal CoAP request
                    else
                    {
                        Request requestOnce = PerformCoAP(method, uri, true, false);
                    }
                }
                //observe request
                else if (requestLines[0].Contains(portName) & requestLines[0].Contains("?observehost"))
                {
                    //get URL
                    string remoteHost = requestLines[0].Split(' ')[1].Replace("http://", "coap://").Split(' ')[0];
                    remoteHost = remoteHost.Replace("?observehost", "");
                    Uri discoverUri = new Uri(remoteHost);

                    PerformObserve(Request.Method.GET, discoverUri);
                }
                //Http Conncet request
                else if (requestLines[0].ToLower().Contains("connect"))
                {
                    string remoteHost = requestLines[0].Split(' ')[1].Replace("http://", "").Split('/')[0];
                    int port = Int32.Parse(remoteHost.Split(':')[1]);
                    remoteHost = remoteHost.Split(':')[0];
                    Socket destServerSocket = null;
                    //Conncet to real Server
                    try
                    {
                        destServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                        destServerSocket.Connect(remoteHost, port);
                    }

                    catch (Exception e)
                    {
                        Console.WriteLine("Bad connect to real Server: " + e.Message);
                    }

                    // Conncet to real Server success
                    if (destServerSocket.Connected)
                    {
                        Console.WriteLine("Websocket connect success ");
                        //exchange message
                        ForwardTcpData(clientSocket, destServerSocket);
                    }
                    else
                    {
                        clientSocket.Shutdown(SocketShutdown.Both);
                        clientSocket.Close();
                    }
                }
                //nomal Http request
                else
                {
                    //State 1: Rebuilding Request Information and Create Connection to Destination Server

                    string remoteHost = requestLines[0].Split(' ')[1].Replace("http://", "").Split('/')[0];
                    string requestFile = requestLines[0].Replace("http://", "").Replace(remoteHost, "");
                    requestLines[0] = requestFile;

                    requestPayload = "";
                    foreach (string line in requestLines)
                    {
                        requestPayload += line;
                        requestPayload += EOL;
                    }

                    Socket destServerSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                    destServerSocket.Connect(remoteHost, 80);

                    //State 2: Sending New Request Information to Destination Server and Relay Response to Client            
                    destServerSocket.Send(ASCIIEncoding.ASCII.GetBytes(requestPayload));

                    //Console.WriteLine("Begin Receiving Response...");
                    while (destServerSocket.Receive(responseBuffer) != 0)
                    {
                        //Console.Write(ASCIIEncoding.ASCII.GetString(responseBuffer));
                        this.clientSocket.Send(responseBuffer);
                    }

                    destServerSocket.Disconnect(false);
                    destServerSocket.Dispose();

                    this.clientSocket.Disconnect(false);
                    this.clientSocket.Dispose();
                }

            }
            catch (Exception e)
            {
                Console.WriteLine("Error Occured: " + e.Message);
                //Console.WriteLine(e.StackTrace);
            }
        }
         /// <summary>