/// <summary> /// Send raw HTTP request to the server and request the map tiles around the coords. This mimics browser on the map page. /// </summary> public static List <MapTile> GetMapTiles(Account acc, Coordinates coords) { switch (acc.AccInfo.ServerVersion) { case Classificator.ServerVersionEnum.T4_4: var ajaxToken = DriverHelper.GetJsObj <string>(acc, "ajaxToken"); var req = new RestSharp.RestRequest { Resource = "/ajax.php?cmd=mapPositionData", Method = Method.POST, }; req.AddParameter("cmd", "mapPositionData"); req.AddParameter("data[x]", coords.x.ToString()); req.AddParameter("data[y]", coords.y.ToString()); req.AddParameter("data[zoomLevel]", "3"); req.AddParameter("ajaxToken", ajaxToken); var resString = HttpHelper.SendPostReq(acc, req); var root = JsonConvert.DeserializeObject <MapPositionDataT4_4.Root>(resString); if (root.response.error) { throw new Exception("Unable to get T4.4 map position data!\n" + root.response.error); } return(root.response.data.tiles.Select(x => x.GetMapTile()).ToList()); //case Classificator.ServerVersionEnum.T4_5: //{ // var bearerToken = DriverHelper.GetBearerToken(acc); // var reqMapInfo = new RestSharp.RestRequest // { // Resource = "/api/v1/ajax/mapInfo", // Method = Method.POST, // RequestFormat = DataFormat.Json // }; // reqMapInfo.AddHeader("authorization", $"Bearer {bearerToken}"); // reqMapInfo.AddHeader("content-type", "application/json; charset=UTF-8"); // reqMapInfo.AddJsonBody(GenerateMapInfo(coords)); // var mapInfoRes = HttpHelper.SendPostReq(acc, reqMapInfo); // var mapPosition = new SendMapPositionT4_5.Root() // { // data = new SendMapPositionT4_5.Data() // { // x = coords.x, // y = coords.y, // zoomLevel = 3, // ignorePositions = new List<object>() // } // }; // var reqMapPosition = new RestSharp.RestRequest // { // Resource = "/api/v1/ajax/mapPositionData", // Method = Method.POST, // RequestFormat = DataFormat.Json // }; // reqMapPosition.AddHeader("authorization", $"Bearer {bearerToken}"); // reqMapPosition.AddHeader("content-type", "application/json; charset=UTF-8"); // reqMapPosition.AddJsonBody(mapPosition); // var mapPositionRes = HttpHelper.SendPostReq(acc, reqMapPosition); // var mapPositionData = JsonConvert.DeserializeObject<MapPositionDataT4_5>(mapPositionRes); // return mapPositionData.tiles.Select(x => x.GetMapTile()).ToList(); //} default: { var bearerToken = DriverHelper.GetBearerToken(acc); var reqMapInfo = new RestSharp.RestRequest { Resource = "/api/v1/map/info", Method = Method.POST, RequestFormat = DataFormat.Json }; reqMapInfo.AddHeader("authorization", $"Bearer {bearerToken}"); reqMapInfo.AddHeader("content-type", "application/json; charset=UTF-8"); reqMapInfo.AddJsonBody(GenerateMapInfo(coords)); var mapInfoRes = HttpHelper.SendPostReq(acc, reqMapInfo); var mapPosition = new SendMapPositionT4_5.Root() { data = new SendMapPositionT4_5.Data() { x = coords.x, y = coords.y, zoomLevel = 3, ignorePositions = new List <object>() } }; var reqMapPosition = new RestSharp.RestRequest { Resource = "/api/v1/map/position", Method = Method.POST, RequestFormat = DataFormat.Json }; reqMapPosition.AddHeader("authorization", $"Bearer {bearerToken}"); reqMapPosition.AddHeader("content-type", "application/json; charset=UTF-8"); reqMapPosition.AddJsonBody(mapPosition); var mapPositionRes = HttpHelper.SendPostReq(acc, reqMapPosition); var mapPositionData = JsonConvert.DeserializeObject <MapPositionDataT4_5>(mapPositionRes); return(mapPositionData.tiles.Select(x => x.GetMapTile()).ToList()); } } }
public override async Task <TaskRes> Execute(Account acc) { await acc.Wb.Navigate($"{acc.AccInfo.ServerUrl}/karte.php"); Coordinates closesCoords = null; var mainVill = AccountHelper.GetMainVillage(acc); switch (acc.AccInfo.ServerVersion) { case Classificator.ServerVersionEnum.T4_4: var ajaxToken = DriverHelper.GetJsObj <string>(acc, "ajaxToken"); var req = new RestRequest { Resource = "/ajax.php?cmd=mapPositionData", Method = Method.POST, }; req.AddParameter("cmd", "mapPositionData"); req.AddParameter("data[x]", mainVill.Coordinates.x.ToString()); req.AddParameter("data[y]", mainVill.Coordinates.y.ToString()); req.AddParameter("data[zoomLevel]", "3"); req.AddParameter("ajaxToken", ajaxToken); var resString = HttpHelper.SendPostReq(acc, req); var root = JsonConvert.DeserializeObject <MapPositionDataT4_4.Root>(resString); if (root.response.error) { throw new Exception("Unable to get T4.4 map position data!\n" + root.response.error); } var mapTiles = root.response.data.tiles.Select(x => x.GetMapTile()).ToList(); closesCoords = GetClosestCoordinates(acc, mapTiles); break; case Classificator.ServerVersionEnum.T4_5: var bearerToken = DriverHelper.GetBearerToken(acc); var reqMapInfo = new RestRequest { Resource = "/api/v1/ajax/mapInfo", Method = Method.POST, RequestFormat = DataFormat.Json }; reqMapInfo.AddHeader("authorization", $"Bearer {bearerToken}"); reqMapInfo.AddHeader("content-type", "application/json; charset=UTF-8"); reqMapInfo.AddJsonBody(GenerateMapInfo(mainVill.Coordinates)); var mapInfoRes = HttpHelper.SendPostReq(acc, reqMapInfo); var mapPosition = new SendMapPositionT4_5.Root() { data = new SendMapPositionT4_5.Data() { x = mainVill.Coordinates.x, y = mainVill.Coordinates.y, zoomLevel = 3, ignorePositions = new List <object>() } }; var reqMapPosition = new RestRequest { Resource = "/api/v1/ajax/mapPositionData", Method = Method.POST, RequestFormat = DataFormat.Json }; reqMapPosition.AddHeader("authorization", $"Bearer {bearerToken}"); reqMapPosition.AddHeader("content-type", "application/json; charset=UTF-8"); reqMapPosition.AddJsonBody(mapPosition); //reqMapPosition.AddParameter("application/json", , ParameterType.RequestBody); var mapPositionRes = HttpHelper.SendPostReq(acc, reqMapPosition); var mapPositionData = JsonConvert.DeserializeObject <MapPositionDataT4_5>(mapPositionRes); var mapTilesT45 = mapPositionData.tiles.Select(x => x.GetMapTile()).ToList(); closesCoords = GetClosestCoordinates(acc, mapTilesT45); break; } if (closesCoords == null) { return(TaskRes.Retry); } acc.NewVillages.Locations.Add(new NewVillage() { coordinates = closesCoords, Name = NewVillageHelper.GenerateName(acc), }); return(TaskRes.Executed); }