diff --git a/MP-IO/Controllers/IOBController.cs b/MP-IO/Controllers/IOBController.cs index 3347cfda..7c2cb78c 100644 --- a/MP-IO/Controllers/IOBController.cs +++ b/MP-IO/Controllers/IOBController.cs @@ -79,6 +79,7 @@ namespace MP_IO.Controllers return answ; } + // GET: IOB/enabled/SIMUL_03 public string enabled(string id) { @@ -105,9 +106,88 @@ namespace MP_IO.Controllers return answ; } + /// + /// Processa una chiamata POST per l'invio di un array Json di oggetti rawTransfer (generiche info da deserializzare) + /// POST: IOB/rawTransfJson/SIMUL_03 + /// + /// ID dell'IOB + /// + [HttpPost] + public string rawTransfJson(string id) + { + int insDone = 0; + string answ = ""; + // questa classe è derivata da Controller.Response... x cui recupero lo stream in altro modo... + string content = ""; + System.Web.HttpContext.Current.Request.InputStream.Position = 0; + using (var reader = new StreamReader( + Request.InputStream, System.Text.Encoding.UTF8, true, 4096, true)) + { + content = reader.ReadToEnd(); + } + //Rest + System.Web.HttpContext.Current.Request.InputStream.Position = 0; + // se ho dati... + if (content != "") + { + DataLayer DataLayerObj = new DataLayer(); + // deserializzo come un dictionary generico di oggetti rawDataType/string + baseRawTransf receivedData = new baseRawTransf(); + // procedo a deserializzare in blocco l'oggetto... + try + { + // deserializzo. + receivedData = JsonConvert.DeserializeObject(content); + } + catch (Exception exc) + { + logger.lg.scriviLog($"Errore in fase deserializzazione rawTransfJson{Environment.NewLine}{exc}"); + answ = "NO"; + } + // se ho qualcosa da processare... + if (receivedData != null) + { + try + { + // per ora salvo su REDIS ultimo x tipo + DataLayerObj.lastRawTrasfData = JsonConvert.SerializeObject(receivedData.mesContent); + + // !!! FixMe ToDo fare + // deserializzazione e salvataggio su MongoDB + // salvataggio su tab RawTrasf su DB IS + + // in base al tipo processo... + switch (receivedData.mesType) + { + case rawTransfType.ND: + break; + case rawTransfType.IcoelBatch: + break; + case rawTransfType.IcoelVarInfo: + break; + default: + break; + } + insDone++; + // se vuoto --> OK! + if (string.IsNullOrEmpty(answ)) + { + answ = $"OK {insDone} processed"; + } + } + catch (Exception exc) + { + logger.lg.scriviLog($"Errore in fase invio valori rawTransfJson{Environment.NewLine}{exc}"); + answ = "NO"; + } + } + } + return answ; + } + /// /// Processa una chiamata POST per l'invio di un array Json di oggetti input (EVENTI) - /// PUT: IOB/evListJson/SIMUL_03 + /// POST: IOB/evListJson/SIMUL_03 /// /// ID dell'IOB /// diff --git a/MapoDb/DataLayer.cs b/MapoDb/DataLayer.cs index e3892c82..fb4cad70 100644 --- a/MapoDb/DataLayer.cs +++ b/MapoDb/DataLayer.cs @@ -120,10 +120,7 @@ namespace MapoDb /// public static string hMSE { - get - { - return mHash(string.Format("hMSE_DATA")); - } + get => mHash("hMSE_DATA"); } public static string redKeyArtUsed @@ -135,6 +132,11 @@ namespace MapoDb get => mHash($"CACHE:TabCheckArt"); } + public static string redKeyRawTransfData + { + get => mHash($"RAW:TRANSFER"); + } + /// /// Cognome Nome da MatrOpr in sessione /// @@ -173,6 +175,25 @@ namespace MapoDb } } + + /// + /// Dati RawTransfer serializzati in REDIS (get/set) + /// + public string lastRawTrasfData + { + get + { + string answ = ""; + logger.lg.scriviLog("Richiesta rawTransfData da REDIS"); + answ = memLayer.ML.getRSV(redKeyRawTransfData); + return answ; + } + set + { + memLayer.ML.setRSV(redKeyRawTransfData, value); + } + } + /// /// MatrOpr in sessione /// diff --git a/MapoSDK/Enums.cs b/MapoSDK/Enums.cs index 2410d412..fbc241e4 100644 --- a/MapoSDK/Enums.cs +++ b/MapoSDK/Enums.cs @@ -1,4 +1,7 @@ -namespace MapoSDK +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; + +namespace MapoSDK { public enum DataItemCategory { @@ -18,9 +21,14 @@ } /// - /// Tipologia dato RAW da trasmettere/ricevere + /// Tipologia dato Raw Transfer /// - public enum rawDataType + /// serializzazione Native + /// [JsonConverter(typeof(JsonStringEnumConverter))] + /// serializzazione Newtonsoft json + /// [JsonConverter(typeof(StringEnumConverter))] + [JsonConverter(typeof(StringEnumConverter))] + public enum rawTransfType { ND = 0, /// diff --git a/MapoSDK/MapoSDK.csproj b/MapoSDK/MapoSDK.csproj index 3e2e358c..b4dff43d 100644 --- a/MapoSDK/MapoSDK.csproj +++ b/MapoSDK/MapoSDK.csproj @@ -15,7 +15,7 @@ EgalWare SDK for MAPO solutions MAPO;MES;SDK - Copyright (c) 2007-2022 EgalWare + Copyright (c) 2007-2022 EgalWare 512 true diff --git a/MapoSDK/Objects.cs b/MapoSDK/Objects.cs index 81bfe66f..57c2ee7f 100644 --- a/MapoSDK/Objects.cs +++ b/MapoSDK/Objects.cs @@ -438,4 +438,20 @@ namespace MapoSDK #endregion Public Properties } + + /// + /// Classe di base per trasferimento informazioni di tipo RawTransfer + /// + public class baseRawTransf + { + /// + /// Tipo di messaggio trasmesso + /// + public rawTransfType mesType { get; set; } = rawTransfType.ND; + + /// + /// Messaggio in modalità raw/stringa + /// + public object mesContent { get; set; } = null; + } } \ No newline at end of file