agrobot_base/AgroBase/AgroBase/Services/APIService.cs

121 lines
4.2 KiB
C#

using AgroBase.Models;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net.Http;
using System.Text;
namespace AgroBase.Services
{
public static class APIService
{
public static Process pythonProcess = null;
public static string API_Base { get; set; } = "http://localhost";
public static string API_Porta { get; set; } = "5001";
public static string GPS_setCoordenadasEndpoint { get; set; } = "/receber-coordenadas";
public static string GPS_getCoordenadasEndpoint { get; set; } = "/servir-coordenadas/<id>";
public static string Mapa_setRuasSelecionadasEndpoint { get; set; } = "/receber-ruas-selecionadas";
public static string Mapa_getRuasSelecionadasEndpoint { get; set; } = "/servir-ruas-selecionadas";
public static int GPS_IDcoordenadasRobo { get; set; } = 1;
public static string ApiBase()
{
return API_Base + ":" + API_Porta.ToString();
}
public static void Inicializar()
{
if (pythonProcess == null)
{
pythonProcess = PythonService.RunScript(PythonService.ScriptAPI, new string[] {
API_Porta.ToString(),
GPS_getCoordenadasEndpoint,
GPS_setCoordenadasEndpoint,
Mapa_getRuasSelecionadasEndpoint,
Mapa_setRuasSelecionadasEndpoint
});
}
}
public static void Parar()
{
if (pythonProcess != null && !pythonProcess.HasExited)
{
pythonProcess.Kill();
pythonProcess = null;
}
}
public static async void AtualizarCoordenadasGPS(GPSModel Leitura, int ID)
{
var url = ApiBase() + GPS_setCoordenadasEndpoint;
var localizacao = new
{
id = ID.ToString(),
latitude = Leitura.Latitude,
longitude = Leitura.Longitude
};
var json = JsonConvert.SerializeObject(localizacao);
var data = new StringContent(json, Encoding.UTF8, "application/json");
try
{
using (var client = new HttpClient())
{
var response = await client.PostAsync(url, data);
string result = await response.Content.ReadAsStringAsync();
}
}
catch (Exception e)
{
Console.WriteLine("Erro ao atualizar coordenadas GPS: " + e.Message);
if (pythonProcess == null || pythonProcess.HasExited)
{
Inicializar();
}
}
}
public static async void AtualizarRuasSelecionadas()
{
try
{
var url = ApiBase() + Mapa_getRuasSelecionadasEndpoint;
using (var client = new HttpClient())
{
var response = await client.GetAsync(url);
List<string> ids = new List<string>();
string result = await response.Content.ReadAsStringAsync();
if (!result.Contains("[]"))
{
result = result.Replace("\n", "");
result = result.Replace("\"", "");
ids = JsonConvert.DeserializeObject<int[]>(result).Select(x => x.ToString()).ToList();
}
if (ids.Count != Variaveis.OperacaoEmAndamento.Mapa.RuasPercorrer.Count)
{
Variaveis.OperacaoEmAndamento.Mapa.RuasPercorrer = ids;
Variaveis.OperacaoEmAndamento.Mapa.PopularTrajetoria();
}
}
}
catch (Exception e)
{
Console.WriteLine("Erro ao atualizar ruas selecionadas: " + e.Message);
if (pythonProcess == null || pythonProcess.HasExited)
{
Inicializar();
}
}
}
}
}