using Newtonsoft.Json; using System; using System.IO; using System.Net; using System.Net.NetworkInformation; namespace NKC_SDK { public class NKC { #region utils comunicazione HTTP /// /// Effettua chiamata URL e restituisce risultato /// /// /// public static string callUrl(string URL) { string answ = ""; var client = new WebClientWT(); //var client = new WebClient(); client.Headers.Add("user-agent", "NKC_SDK"); try { answ = client.DownloadString(URL); } catch (Exception exc) { Log.Instance.Error($"Eccezione durante callUrl per URL: {URL}{Environment.NewLine}{exc}"); answ = exc.Message; } // restituisco valore! return answ; } /// /// Effettua chiamata URL e restituisce risultato /// /// /// /// public static string callUrl(string URL, string payload) { string answ = ""; var client = new WebClientWT(); client.Headers.Add("user-agent", "NKC_SDK"); try { answ = client.UploadString(URL, payload); } catch (Exception exc) { Log.Instance.Error($"Eccezione durante callUrl per URL: {URL} | payload: {payload}{Environment.NewLine}{exc}"); answ = exc.Message; } // restituisco valore! return answ; } /// /// Effettua chiamata PUT /// /// /// /// public static string putData(string URL, string payload) { string answ = ""; var client = new WebClientWT(); client.Headers.Add("user-agent", "NKC_SDK"); // importante x evitare errore 415 di dataType non ammesso client.Headers.Add(HttpRequestHeader.ContentType, "application/json"); try { // va messo "PUT" e va configurato IIS per accettare PUT answ = client.UploadString(URL, "PUT", payload); answ = "ok"; } catch (Exception exc) { Log.Instance.Error($"Eccezione durante putData per {URL}{Environment.NewLine}{exc}"); answ = exc.Message; } // restituisco valore! return answ; } #endregion #region URL di base protected string urlAlive { get { return $"{_baseUrl}api/Alive"; } } protected string urlAliveClock { get { return $"{_baseUrl}api/Alive/1"; } } protected string urlCurrBunk { get { return $"{_baseUrl}api/Bunk"; } } protected string urlCurrSheet4Mac { get { return $"{_baseUrl}api/Sheet/{_codPost}"; } } protected string urlGetBunk(int currBunkId) { return $"{_baseUrl}api/Bunk/{currBunkId}?showNext=false"; } protected string urlNextBunk(int currBunkId) { return $"{_baseUrl}api/Bunk/{currBunkId}?showNext=true"; } protected string urlPutBunk(int currBunkId) { return $"{_baseUrl}api/Bunk/{currBunkId}"; } /// /// URL x salvataggio dati SHEET /// /// protected string urlPutSheetList { get { return $"{_baseUrl}api/Sheet/{_codPost}"; } } /// /// file locale per persistenza BUNK /// protected string persistFileName = "data/persistFile.json"; #endregion /// /// URL di base per la comunicazione /// /// PROD: http://seriate.steamware.net:8083/NKC/ /// DEV: https://localhost:44388/ /// protected string _baseUrl { get; set; } = @"http://seriate.steamware.net:8083/NKC/"; /// /// DnsName/IP di base x chaimate /// protected string _baseIp { get; set; } = "seriate.steamware.net"; /// /// COD macchina x cui si effettua chiamata /// protected string _codPost { get; set; } = ""; /// /// Classe per effettuare comunicazioni con NKC /// /// IP di base x ping /// URL di abse x chiamate REST /// Codice posstazione/macchina x cui si fa chiamata public NKC(string baseIp, string baseUrl, string codPost) { _baseIp = baseIp; _baseUrl = baseUrl; _codPost = codPost; } /// /// Effettua test ping all'indirizzo del server /// public PingReply testPing { get { Ping myPing = new Ping(); // timeout a 1 sec! PingReply answ = myPing.Send(_baseIp, 1000); // rendo! return answ; } } /// /// Effettua test alive all'indirizzo del server /// public bool testAlive { get { bool answ = false; string returnData = callUrl(urlAlive); returnData = JsonConvert.DeserializeObject(returnData); answ = returnData == "OK"; // rendo! return answ; } } /// /// Effettua test ping all'indirizzo del server /// public DateTime testClock { get { DateTime oggi = DateTime.Today; DateTime answ = oggi.AddYears(-oggi.Year + 1900).AddMonths(-oggi.Month).AddDays(-oggi.Day + 1); // recupero! string returnData = callUrl(urlAliveClock); try { DateTime.TryParse(JsonConvert.DeserializeObject(returnData), out answ); } catch (Exception exc) { Log.Instance.Error($"Eccezione durante testClock, ricevuto {returnData}{Environment.NewLine}{exc}"); } // rendo! return answ; } } #region metodi per SheetWorklist /// /// Recupera elenco dei fogli ATTIVI /// - effettua chiamata tramite REST API HTTP /// - il risutlato viene deserializzato nell'oggetto richiesto /// /// public SheetWorkList getCurrentSheets() { SheetWorkList answ = null; string rawdata = ""; // chiamo metodo x recupero WBunk... try { rawdata = callUrl(urlCurrSheet4Mac); answ = JsonConvert.DeserializeObject(rawdata); } catch (Exception exc) { Log.Instance.Error($"Eccezione durante getCurrentSheets, ricevuto {rawdata}{Environment.NewLine}{exc}"); } return answ; } /// /// Effettua salvataggio dell'elenco dei fogli (1..n) su NKC /// /// public bool saveSheets(SheetWorkList updatedSheetList) { bool answ = false; string rawdata = ""; try { // serializzo oggetto rawdata = JsonConvert.SerializeObject(updatedSheetList); // invio con metodo put! putData(urlPutSheetList, rawdata); answ = true; } catch (Exception exc) { Log.Instance.Error($"Eccezione durante saveSheets, ricevuto {rawdata}{Environment.NewLine}{exc}"); } return answ; } /// /// Oggetto che contiene l'oggetto SHEET WorkList corrente salvato LOCALMENTE /// public SheetWorkList persistedSheetList { get { SheetWorkList answ = new SheetWorkList(); try { string rawdata = File.ReadAllText(persistFileName); answ = JsonConvert.DeserializeObject(rawdata); } catch (Exception exc) { Log.Instance.Error($"Eccezione durante recupero locale della SheetList{Environment.NewLine}{exc}"); } return answ; } set { try { // serializzo oggetto string rawdata = JsonConvert.SerializeObject(value); // salvo in locale File.WriteAllText(persistFileName, rawdata); } catch (Exception exc) { Log.Instance.Error($"Eccezione durante salvataggio locale della SheetList{Environment.NewLine}{exc}"); } } } #endregion #if false #region metodi per BUNK /// /// Recupera il PRIMO BUNK /// - effettua chiamata tramite REST API HTTP /// - il risutlato viene deserializzato nell'oggetto richiesto /// /// public ProdBunk getFirstBunk() { ProdBunk answ = null; string rawdata = ""; // chiamo metodo x recupero WBunk... try { rawdata = callUrl(urlCurrBunk); answ = JsonConvert.DeserializeObject(rawdata); } catch (Exception exc) { Log.Instance.Error($"Eccezione durante getFirstBunk, ricevuto {rawdata}{Environment.NewLine}{exc}"); } return answ; } /// /// Recupera il BUNK SUCCESSIVO /// - effettua chaimata tramite REST API HTTP /// - il risutlato viene deserializzato nell'oggetto richiesto /// /// public ProdBunk getNextBunk(int currBunkId) { ProdBunk answ = null; string rawdata = ""; // chiamo metodo x recupero WBunk... try { rawdata = callUrl(urlNextBunk(currBunkId)); answ = JsonConvert.DeserializeObject(rawdata); } catch (Exception exc) { Log.Instance.Error($"Eccezione durante getNextBunk, ricevuto {rawdata}{Environment.NewLine}{exc}"); } return answ; } /// /// Recupera UN BUNK esatto /// - effettua chaimata tramite REST API HTTP /// - il risutlato viene deserializzato nell'oggetto richiesto /// /// public ProdBunk getBunk(int currBunkId) { ProdBunk answ = null; string rawdata = ""; // chiamo metodo x recupero WBunk... try { rawdata = callUrl(urlGetBunk(currBunkId)); answ = JsonConvert.DeserializeObject(rawdata); } catch (Exception exc) { Log.Instance.Error($"Eccezione durante getBunk, ricevuto {rawdata}{Environment.NewLine}{exc}"); } return answ; } /// /// Effettua salvataggio del BUNK corrente su NKC /// /// public bool saveBunk(ProdBunk currBunk) { bool answ = false; string rawdata = ""; try { // serializzo oggetto rawdata = JsonConvert.SerializeObject(currBunk); // invio con metodo put! putData(urlPutBunk(currBunk.BunkId), rawdata); answ = true; } catch (Exception exc) { Log.Instance.Error($"Eccezione durante saveBunk, ricevuto {rawdata}{Environment.NewLine}{exc}"); } return answ; } /// /// Oggetto che contiene il BUNK corrente LOCALMENTE /// public ProdBunk persistedBunk { get { ProdBunk answ = new ProdBunk(); try { string rawdata = File.ReadAllText(persistFileName); answ = JsonConvert.DeserializeObject(rawdata); } catch (Exception exc) { Log.Instance.Error($"Eccezione durante recupero locale del bunk{Environment.NewLine}{exc}"); } return answ; } set { try { // serializzo oggetto string rawdata = JsonConvert.SerializeObject(value); // salvo in locale File.WriteAllText(persistFileName, rawdata); } catch (Exception exc) { Log.Instance.Error($"Eccezione durante salvataggio locale del BUNK{Environment.NewLine}{exc}"); } } } #endregion #endif } }