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); }