398 lines
12 KiB
C#
398 lines
12 KiB
C#
using Newtonsoft.Json;
|
|
using RestSharp;
|
|
using System.Collections.Generic;
|
|
using System.Net.NetworkInformation;
|
|
|
|
namespace WebDoorCreator.SDK
|
|
{
|
|
public class WDC
|
|
{
|
|
#region Public Constructors
|
|
|
|
/// <summary>
|
|
/// Classe per effettuare comunicazioni con NKC
|
|
/// </summary>
|
|
/// <param name="baseIp">IP di base x ping</param>
|
|
/// <param name="baseUrl">URL di base x chiamate REST</param>
|
|
/// <param name="wksCode">Codice workstation di calcolo</param>
|
|
public WDC(string baseIp, string baseUrl, string wksCode)
|
|
{
|
|
_baseIp = baseIp;
|
|
apiUrl = baseUrl;
|
|
_wksCode = wksCode;
|
|
}
|
|
|
|
#endregion Public Constructors
|
|
|
|
#region Public Properties
|
|
|
|
/// <summary>
|
|
/// Numero di chiamate in coda da processare
|
|
/// </summary>
|
|
public int numTask2proc
|
|
{
|
|
get
|
|
{
|
|
int answ = 0;
|
|
try
|
|
{
|
|
var rawData = callUrlGet(urlActLenght);
|
|
if (rawData != "ERR")
|
|
{
|
|
var returnData = JsonConvert.DeserializeObject<Dictionary<string, long>>(rawData);
|
|
// rendo!
|
|
if (returnData.ContainsKey(pendQueue))
|
|
{
|
|
answ = (int)returnData[pendQueue];
|
|
}
|
|
}
|
|
}
|
|
catch { }
|
|
return answ;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Effettua test alive all'indirizzo del server
|
|
/// </summary>
|
|
public bool testAlive
|
|
{
|
|
get
|
|
{
|
|
bool answ = false;
|
|
try
|
|
{
|
|
var rawData = callUrlGet(urlAlive);
|
|
string returnData = JsonConvert.DeserializeObject<string>(rawData);
|
|
answ = returnData == "OK";
|
|
}
|
|
catch
|
|
{ }
|
|
// rendo!
|
|
return answ;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Effettua test ping all'indirizzo del server
|
|
/// </summary>
|
|
public PingReply testPing
|
|
{
|
|
get
|
|
{
|
|
Ping myPing = new Ping();
|
|
// timeout a 1 sec!
|
|
PingReply answ = myPing.Send(_baseIp, 1000);
|
|
// rendo!
|
|
return answ;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Effettua test ping all'indirizzo del server
|
|
/// </summary>
|
|
public bool testPingOk
|
|
{
|
|
get
|
|
{
|
|
bool answ = false;
|
|
try
|
|
{
|
|
Ping myPing = new Ping();
|
|
// timeout a 1 sec!
|
|
var testPing= myPing.Send(_baseIp, 1000);
|
|
answ = testPing.Status == IPStatus.Success;
|
|
}
|
|
catch
|
|
{ }
|
|
// rendo!
|
|
return answ;
|
|
}
|
|
}
|
|
|
|
#endregion Public Properties
|
|
|
|
#region Public Methods
|
|
|
|
public static PingReply testPingDevice(string address)
|
|
{
|
|
Ping myPing = new Ping();
|
|
// timeout a 1 sec!
|
|
PingReply answ = myPing.Send(address, 2000);
|
|
// rendo!
|
|
return answ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Elenco degli item da processare, nel formato DoorId, Vers
|
|
/// </summary>
|
|
public Dictionary<string, CalcReqtDTO> queueList(int maxNum)
|
|
{
|
|
Dictionary<string, CalcReqtDTO> returnData = new Dictionary<string, CalcReqtDTO>();
|
|
Dictionary<string, string> parList = new Dictionary<string, string>()
|
|
{
|
|
{ "numItems", $"{maxNum}" }
|
|
};
|
|
var rawData = callUrlGet(urlTakeNextItems, parList);
|
|
if (!string.IsNullOrEmpty(rawData) && rawData != "ERR")
|
|
{
|
|
returnData = JsonConvert.DeserializeObject<Dictionary<string, CalcReqtDTO>>(rawData);
|
|
}
|
|
return returnData;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Status delle code chiamate
|
|
/// </summary>
|
|
public Dictionary<string, long> queueStatus()
|
|
{
|
|
Dictionary<string, long> returnData = new Dictionary<string, long>();
|
|
var rawData = callUrlGet(urlActLenght);
|
|
if (rawData != "ERR")
|
|
{
|
|
returnData = JsonConvert.DeserializeObject<Dictionary<string, long>>(rawData);
|
|
}
|
|
return returnData;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Reset di tutte le code a REQUEST
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string ResetQueue()
|
|
{
|
|
Dictionary<string, string> parList = new Dictionary<string, string>
|
|
{
|
|
{ "passPhrase", "bbbBirdIsTheWord" }
|
|
};
|
|
var rawData = callUrlPost(urlResetQueue, "", parList);
|
|
return rawData;
|
|
}
|
|
/// <summary>
|
|
/// Reset delle code di processing a REQUEST
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string ResetQueueProcessing()
|
|
{
|
|
var rawData = callUrlPost(urlResetQueueProc, "");
|
|
return rawData;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Restitusice l'elenco degli esiti di processing
|
|
/// </summary>
|
|
/// <param name="calcResults"></param>
|
|
/// <returns></returns>
|
|
public string SendProcResults(List<CalcResultDTO> calcResults)
|
|
{
|
|
string payload = JsonConvert.SerializeObject(calcResults);
|
|
var rawData = callUrlPost(urlSaveProcRes, payload);
|
|
return rawData;
|
|
}
|
|
|
|
#endregion Public Methods
|
|
|
|
#region Protected Fields
|
|
|
|
protected const string pendQueue = "pending";
|
|
protected const string urlActLenght = "api/Queue/ActLenght";
|
|
protected const string urlAlive = "/api/Alive";
|
|
protected const string urlResetQueue = "api/Queue/ResetQueue";
|
|
protected const string urlResetQueueProc = "api/Queue/ResetQueueProcessing";
|
|
protected const string urlSaveProcRes = "api/Queue/SaveProcResult";
|
|
protected const string urlStatusList = "api/Queue/StatusList";
|
|
protected const string urlTakeNextItems = "api/Queue/TakeNextItems";
|
|
|
|
#endregion Protected Fields
|
|
|
|
#region Protected Properties
|
|
|
|
/// <summary>
|
|
/// DnsName/IP di base x chaimate
|
|
/// </summary>
|
|
protected string _baseIp { get; set; } = "seriate.steamware.net";
|
|
|
|
/// <summary>
|
|
/// Cod Workstation che effettua i calcoli
|
|
/// </summary>
|
|
protected string _wksCode { get; set; } = "";
|
|
|
|
/// <summary>
|
|
/// URL di base per la comunicazione
|
|
///
|
|
/// PROD: https://iis01.egalware.com/WDC/SRV/
|
|
/// DEV: https://localhost:7043/
|
|
/// </summary>
|
|
protected string apiUrl { get; set; } = @"https://iis01.egalware.com/WDC/SRV/";
|
|
|
|
#endregion Protected Properties
|
|
|
|
#region Protected Methods
|
|
|
|
/// <summary>
|
|
/// Effettua chiamata URL GET e restituisce risultato
|
|
/// </summary>
|
|
/// <param name="URL"></param>
|
|
/// <returns></returns>
|
|
protected string callUrlGet(string URL)
|
|
{
|
|
string answ = "";
|
|
// cerco online
|
|
using (RestClient client = new RestClient(apiUrl))
|
|
{
|
|
var request = new RestRequest(URL);
|
|
try
|
|
{
|
|
var response = client.Get(request);
|
|
// controllo status code risposta
|
|
if (response.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
// deserializzo risposta
|
|
answ = response.Content;
|
|
}
|
|
else
|
|
{
|
|
answ = "KO";
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
answ = "ERR";
|
|
}
|
|
}
|
|
// restituisco valore!
|
|
return answ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Effettua chiamata URL GET con parametri e restituisce risultato
|
|
/// </summary>
|
|
/// <param name="URL"></param>
|
|
/// <param name="paramsList"></param>
|
|
/// <returns></returns>
|
|
protected string callUrlGet(string URL, Dictionary<string, string> paramsList)
|
|
{
|
|
string answ = "";
|
|
// cerco online
|
|
using (RestClient client = new RestClient(apiUrl))
|
|
{
|
|
// compongo
|
|
string paramsQuery = "";
|
|
foreach (var item in paramsList)
|
|
{
|
|
paramsQuery += $"{item.Key}={item.Value}";
|
|
}
|
|
var request = new RestRequest($"{URL}?{paramsQuery}");
|
|
try
|
|
{
|
|
var response = client.Get(request);
|
|
// controllo status code risposta
|
|
if (response.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
// deserializzo risposta
|
|
answ = response.Content;
|
|
}
|
|
else
|
|
{
|
|
answ = "KO";
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
answ = "ERR";
|
|
}
|
|
}
|
|
// restituisco valore!
|
|
return answ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Effettua chiamata URL GET con parametri e restituisce risultato
|
|
/// </summary>
|
|
/// <param name="URL"></param>
|
|
/// <param name="payload"></param>
|
|
/// <returns></returns>
|
|
protected string callUrlPost(string URL, string payload)
|
|
{
|
|
string answ = "";
|
|
// cerco online
|
|
using (RestClient client = new RestClient(apiUrl))
|
|
{
|
|
var request = new RestRequest(URL);
|
|
request.AddJsonBody(payload);
|
|
try
|
|
{
|
|
var response = client.Post(request);
|
|
// controllo status code risposta
|
|
if (response.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
// deserializzo risposta
|
|
answ = response.Content;
|
|
}
|
|
else
|
|
{
|
|
answ = "KO";
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
answ = "ERR";
|
|
}
|
|
}
|
|
// restituisco valore!
|
|
return answ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Effettua chiamata URL POST con parametri (opzionali) e payload (opzionale) e restituisce risultato
|
|
/// </summary>
|
|
/// <param name="URL"></param>
|
|
/// <param name="payload"></param>
|
|
/// <param name="paramsList"></param>
|
|
/// <returns></returns>
|
|
protected string callUrlPost(string URL, string payload, Dictionary<string, string> paramsList)
|
|
{
|
|
string answ = "";
|
|
// cerco online
|
|
using (RestClient client = new RestClient(apiUrl))
|
|
{
|
|
var request = new RestRequest(URL);
|
|
// compongo
|
|
string paramsQuery = "";
|
|
if (paramsList != null && paramsList.Count > 0)
|
|
{
|
|
foreach (var item in paramsList)
|
|
{
|
|
paramsQuery += $"{item.Key}={item.Value}";
|
|
}
|
|
request = new RestRequest($"{URL}?{paramsQuery}");
|
|
}
|
|
if (!string.IsNullOrEmpty(payload))
|
|
{
|
|
request.AddJsonBody(payload);
|
|
}
|
|
try
|
|
{
|
|
var response = client.Post(request);
|
|
// controllo status code risposta
|
|
if (response.StatusCode == System.Net.HttpStatusCode.OK)
|
|
{
|
|
// deserializzo risposta
|
|
answ = response.Content;
|
|
}
|
|
else
|
|
{
|
|
answ = "KO";
|
|
}
|
|
}
|
|
catch
|
|
{
|
|
answ = "ERR";
|
|
}
|
|
}
|
|
// restituisco valore!
|
|
return answ;
|
|
}
|
|
|
|
#endregion Protected Methods
|
|
}
|
|
} |