public ProcessingResult Process(RequestContext requestcontext)
        {
            IRequest request = requestcontext.Request;
            IResponse response = requestcontext.Response;
            IHttpContext context = requestcontext.HttpContext;

            if (request.Method == Method.Post)
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.WriteLine("({0}) <Web Interface> AJAX request from {1} {2} {3} {4}", DateTime.Now.ToString("hh:mm"), context.RemoteEndPoint, request.HttpVersion, request.Method, request.Uri.AbsoluteUri);

                if (HasParameter(request.Parameters, request.Parameters.Get("rooturl")))
                {
                    if (SessionManager.Current == null)
                    {
                        SessionManager.Create();
                        SessionManager.Current.FirstRun = true;
                        SessionManager.Save(SessionManager.Current);
                        Console.WriteLine("({0}) <Web Interface> Created new session with id {1}", DateTime.Now.ToString("hh:mm"), SessionManager.Current.SessionId);
                    }
                    Console.WriteLine("({0}) <Web Interface> AJAX parameters width={1}&height={2}&rooturl={3}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("width").Value, request.Parameters.Get("height").Value, request.Parameters.Get("rooturl").Value);
                    response.ContentType = new ContentTypeHeader("application/json");
                    response.Status = HttpStatusCode.OK;
                    var stream = new MemoryStream(Encoding.UTF8.GetBytes("{\"session\":\"" + SessionManager.Current.SessionId + "\",\"data\":\"\"}"));
                    response.ContentLength.Value = stream.Length;
                    var generator = new ResponseWriter();
                    generator.SendHeaders(context, response);
                    generator.SendBody(context, stream);
                    Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "{\"session\":\"" + SessionManager.Current.SessionId + "\",\"data\":\"\"}");
                }

                if (HasParameter(request.Parameters, request.Parameters.Get("session")))
                {
                    Console.WriteLine("({0}) <Web Interface> AJAX parameters width={1}&height={2}&session={3}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("width").Value, request.Parameters.Get("height").Value, request.Parameters.Get("session").Value);
                    //Console.WriteLine("({0}) <Web Interface> Trying to load session with id {1}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("session").Value);
                    session = SessionManager.Load(request.Parameters.Get("session").Value);

                    if (session == null)
                    {
                        Console.WriteLine("({0}) <Web Interface> Failed to load session with id {1}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("session").Value);
                        response.ContentType = new ContentTypeHeader("application/json");
                        response.Status = HttpStatusCode.OK;
                        var stream = new MemoryStream(Encoding.UTF8.GetBytes("{\"session\":\"" + request.Parameters.Get("session").Value + "\",\"data\":\"Failed to load session !\"}"));
                        response.ContentLength.Value = stream.Length;
                        var generator = new ResponseWriter();
                        generator.SendHeaders(context, response);
                        generator.SendBody(context, stream);
                        Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "{\"session\":\"" + request.Parameters.Get("session").Value + "\",\"data\":\"Failed to load session !\"}");
                    }
                    else
                    {
                        //Console.WriteLine("({0}) <Web Interface> Loaded session with id {1}", DateTime.Now.ToString("hh:mm"), request.Parameters.Get("session").Value);
                        if (request.Parameters.Get("session").Value == session.SessionId)
                        {
                            if (HasParameter(request.Parameters, request.Parameters.Get("keys")))
                            {
                                lastkeys = request.Parameters.Get("keys").Value;
                                while (lastkeys != null)
                                {
                                    Thread.Sleep(50);
                                    if (lastkeys == null)
                                    {
                                        if (request.Parameters.Get("session").Value == lastsession)
                                        {
                                            response.ContentType = new ContentTypeHeader("text/html; charset=utf-8");
                                            response.Status = HttpStatusCode.OK;
                                            var stream2 = new MemoryStream(Encoding.UTF8.GetBytes("OK"));
                                            response.ContentLength.Value = stream2.Length;
                                            var generator2 = new ResponseWriter();
                                            generator2.SendHeaders(context, response);
                                            generator2.SendBody(context, stream2);
                                            Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "OK");
                                            lastsession = null;
                                            break;
                                        }
                                    }
                                }
                            }
                            else
                            {
                                if (session.FirstRun)
                                {
                                    lastkeys = null;
                                    response.ContentType = new ContentTypeHeader("application/json");
                                    response.Status = HttpStatusCode.OK;
                                    var stream = new MemoryStream(Encoding.UTF8.GetBytes("{\"session\":\"" + session.SessionId + "\",\"data\":\"Connected to server-side.\\r\\nWelcome to WCell.Terminal !\\r\\n\"}"));
                                    response.ContentLength.Value = stream.Length;
                                    var generator = new ResponseWriter();
                                    generator.SendHeaders(context, response);
                                    generator.SendBody(context, stream);
                                    Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "{\"session\":\"" + session.SessionId + "\",\"data\":\"Connected to server-side. Welcome to WCell.Terminal !\"}");
                                    session.FirstRun = false;
                                    SessionManager.Save(session);
                                }
                                else
                                {
                                    while (lastkeys == null)
                                    {
                                        Thread.Sleep(50);
                                        if (lastkeys != null)
                                        {
                                            string stringValue = "";
                                            if (lastkeys.Length == 2)
                                            {
                                                int value = Convert.ToInt32(lastkeys, 16);
                                                if (value <= Int32.MaxValue)
                                                {
                                                    stringValue = Char.ConvertFromUtf32(value);
                                                }
                                                else
                                                {
                                                    /*Console.WriteLine("({0}) <Web Interface> Problem with lastkeys ({1}): {2}", DateTime.Now.ToString("hh:mm"), e, lastkeys);
                                                    stringValue = "\\r\\nProblem with lastkeys: " + lastkeys + "\\r\\n";*/
                                                    if (lastkeys.Length > 2)
                                                    {
                                                        string[] strArray = SplitString(lastkeys, 2);
                                                        if (strArray != null)
                                                        {
                                                            foreach (string str in strArray)
                                                            {
                                                                if (!String.IsNullOrWhiteSpace(str))
                                                                {
                                                                    value = Convert.ToInt32(str, 16);
                                                                    stringValue += Char.ConvertFromUtf32(value);
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            else
                                            {
                                                /*Console.WriteLine("({0}) <Web Interface> Problem with lastkeys ({1}): {2}", DateTime.Now.ToString("hh:mm"), e, lastkeys);
                                                stringValue = "\\r\\nProblem with lastkeys: " + lastkeys + "\\r\\n";*/
                                                if (lastkeys.Length > 2)
                                                {
                                                    string[] strArray = SplitString(lastkeys, 2);
                                                    if (strArray != null)
                                                    {
                                                        foreach (string str in strArray)
                                                        {
                                                            if (!String.IsNullOrWhiteSpace(str))
                                                            {
                                                                int value = Convert.ToInt32(str, 16);
                                                                stringValue += Char.ConvertFromUtf32(value);
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                            if (stringValue == "\r")
                                            {
                                                stringValue = "\\r\\n";
                                            }
                                            if (stringValue == "\x7f")
                                            {
                                                stringValue = "\\b \\b";
                                            }
                                            if (stringValue == "\f")
                                            {
                                                stringValue = "\\f";
                                            }
                                            if (stringValue == "\t")
                                            {
                                                stringValue = "\\t";
                                            }
                                            if (lastsession == null)
                                            {
                                                lastsession = session.SessionId;
                                            }
                                            response.ContentType = new ContentTypeHeader("application/json");
                                            response.Status = HttpStatusCode.OK;
                                            var stream = new MemoryStream(Encoding.UTF8.GetBytes("{\"session\":\"" + lastsession + "\",\"data\":\"" + stringValue + "\"}"));
                                            response.ContentLength.Value = stream.Length;
                                            var generator = new ResponseWriter();
                                            generator.SendHeaders(context, response);
                                            generator.SendBody(context, stream);
                                            Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "{\"session\":\"" + lastsession + "\",\"data\":\"" + stringValue + "\"}");
                                            lastkeys = null;
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                        else
                        {
                            Console.WriteLine("({0}) <Web Interface> AJAX response {1}", DateTime.Now.ToString("hh:mm"), "Invalid Session: " + request.Parameters.Get("session").Value);
                        }
                    }
                }
                return ProcessingResult.Abort;
            }
            else
            {
                if (context.IsSecure)
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("({0}) <Web Interface> Secure HTTP request from {1} {2} {3} {4}", DateTime.Now.ToString("hh:mm"), context.RemoteEndPoint, request.HttpVersion, request.Method, request.Uri.AbsoluteUri);
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.WriteLine("({0}) <Web Interface> HTTP request from {1} {2} {3} {4}", DateTime.Now.ToString("hh:mm"), context.RemoteEndPoint, request.HttpVersion, request.Method, request.Uri.AbsoluteUri);
                }
            }
            return ProcessingResult.Continue;
        }
 public static void Save(SessionManager session)
 {
     _sessionProvider.Save(session);
 }