private String HandleLocalRequest(AcceptedRequest acceptedRequest)
        {
            String responseBody = String.Empty;
            String jsonValue = String.Empty;
            String ENTER = "\ue007";
            int innerPort = 9998;
            String sessionId = "awesomeSessionId";
            String request = acceptedRequest.request;
            String content = acceptedRequest.content;
            String command = Parser.GetRequestCommand(request);
            switch (command) {
                case "session":
                    String innerIp = InitializeApplication();
                    //Console.WriteLine("Enter inner driver ip");
                    //String innerIp = Console.ReadLine();
                    Console.WriteLine("Inner ip: " + innerIp);
                    phoneRequester = new Requester(innerIp, innerPort);
                    String jsonResponse = Responder.CreateJsonResponse(sessionId,
                        ResponseStatus.Sucess, new JsonCapabilities("WinPhone"));
                    responseBody = jsonResponse;
                    break;

                //if the text has the ENTER command in it, execute it after sending the rest of the text to the inner driver
                case "value":
                    bool needToClickEnter = false;
                    JsonValueContent oldContent = JsonConvert.DeserializeObject<JsonValueContent>(content);
                    String[] value = oldContent.GetValue();
                    if (value.Contains(ENTER)) {
                        needToClickEnter = true;
                        value = value.Where(val => val != ENTER).ToArray();
                    }
                    JsonValueContent newContent = new JsonValueContent(oldContent.sessionId, oldContent.id, value);
                    responseBody = phoneRequester.SendRequest(Parser.GetRequestUrn(request), JsonConvert.SerializeObject(newContent));
                    if (needToClickEnter)
                        OuterDriver.ClickEnter();
                    break;

                case "moveto":
                    JsonMovetoContent moveToContent = JsonConvert.DeserializeObject<JsonMovetoContent>(content);
                    String elementId = moveToContent.element;
                    Point coordinates = new Point();
                    if (elementId != null) {
                        String locationRequest = "/session/" + sessionId + "/element/" + elementId + "/location";
                        String locationResponse = phoneRequester.SendRequest(locationRequest, String.Empty);
                        JsonResponse JsonResponse = JsonConvert.DeserializeObject<JsonResponse>(locationResponse);
                        Dictionary<String, String> values = JsonConvert.DeserializeObject<Dictionary<String, String>>(JsonResponse.value.ToString());
                        coordinates.X = Convert.ToInt32(values["x"]);
                        coordinates.Y = Convert.ToInt32(values["y"]);
                    }
                    else {
                        coordinates = new Point(Int32.Parse(moveToContent.xOffset), Int32.Parse(moveToContent.yOffset));
                    }
                    OuterDriver.MoveCursorToEmulatorCoordinates(coordinates);
                    break;

                case "click":
                    int requestLength = Parser.GetRequestLength(request);
                    if (requestLength == 3) {
                        //simple click command without element
                        OuterDriver.ClickLeftMouseButton();
                        break;
                    }
                    responseBody = phoneRequester.SendRequest(Parser.GetRequestUrn(request), content);
                    JsonResponse response = JsonConvert.DeserializeObject<JsonResponse>(responseBody);
                    var clickValue = (String)response.value;
                    if (clickValue != null) {
                        String[] clickCoordinatesArray = ((String)clickValue).Split(':');
                        int xOffset = Convert.ToInt32(clickCoordinatesArray[0]);
                        int yOffset = Convert.ToInt32(clickCoordinatesArray[1]);
                        Point point = new Point(xOffset, yOffset);
                        OuterDriver.ClickEmulatorScreenPoint(point);
                        Console.WriteLine("Coordinates: " + xOffset + " " + yOffset);
                        responseBody = String.Empty;
                    }
                    break;

                case "buttondown":
                    OuterDriver.ButtonDown();
                    break;

                case "buttonup":
                    OuterDriver.ButtonUp();
                    break;

                case "keys":
                    jsonValue = Parser.GetKeysString(content);
                    if (jsonValue.Equals(ENTER))
                        OuterDriver.ClickEnter();
                    break;

                default:
                    Console.WriteLine("Not proxying. Unimplemented");
                    responseBody = "Success";
                    break;
            }
            return responseBody;
        }
 public OuterServer(String innerIp, int innerPort)
 {
     this.requester = new Requester(innerIp, innerPort);
 }