using EgwProxy.Icoel.SizerService; using System; using System.Runtime.Serialization; using System.ServiceModel; namespace EgwProxy.Icoel.Compac { public class ComClient : IDisposable { #region Public Constructors /// /// Oggetto client comunicazione con sizer ICOEL per invio/recupero informazioni di /// produzione (batch) /// /// Indirizzo IP del server SIZER /// Porta di connessione del sizer (def: 8001) public ComClient(string sizerIp, string port) { // Salvo IP e porta ipAddress = sizerIp; tcpPort = port; // inizializzazione servizio comunicazione var url = "http://" + sizerIp + ":" + port + "/SizerService/"; EndpointAddress epa = new EndpointAddress(new Uri(url)); SSClient = new SizerServiceClient("WSHttpBinding_ISizerService", epa); } #endregion Public Constructors #region Public Properties /// /// Status di connessione del client /// public bool connected { get { bool answ = false; if (SSClient != null) { answ = SSClient.State == CommunicationState.Opened; } return answ; } } #endregion Public Properties #region Public Methods /// /// Dispose dell'oggetto /// public void Dispose() { Close(); } #endregion Public Methods #region Internal Properties /// /// Inidirizzo IP /// internal string ipAddress { get; set; } = "127.0.0.1"; /// /// Porta del webservice (SOAP) /// internal string tcpPort { get; set; } = "8001"; #endregion Internal Properties #region Internal Methods /// /// Verifica del grower da codice/nome con eventuale creazione se mancante /// /// Codice del produttore /// Denominazione del produttore internal void CheckGrower(string growerCode, string growerName) { var grower = SSClient.GetGrower(growerCode); if (grower == null) { var nuovo = new Grower() { Code = growerCode, Name = growerName }; SSClient.AddGrower(nuovo); } } /// /// Effettua chiusura del proxy di comunicazione /// internal void Close() { if (SSClient.State != CommunicationState.Closed) { SSClient.Close(); } } /// /// Elenco dei layout attivi della varietà /// /// Guid della varietà /// internal Layout GetActiveLayout(Guid VarietyId) { return SSClient.GetActiveLayout(VarietyId); } /// /// Elenco varietà attive /// /// internal Variety[] GetActiveVarieties() { return SSClient.GetActiveVarieties(); } /// /// Elenco varietà (tutte) /// /// internal Variety[] GetAllVarieties() { return SSClient.GetAllVarieties(); } /// /// Recupera il batch corrente (se monolinea) /// /// internal Batch GetCurrentBatch() { return SSClient.GetCurrentBatch(); } /// /// Recupera il batch corrente data la linea /// /// Numero della linea 1=sx/2=dx /// internal Batch GetCurrentBatchByLane(int lineNum) { return SSClient.GetCurrentBatchByLane(lineNum); } /// /// Elenco dei layout della varietà /// /// Guid della varietà /// internal Layout[] GetLayouts(Guid VarietyId) { return SSClient.GetLayouts(VarietyId); } /// /// Effettua chiamata per mettere in coda il lotto richiesto /// /// Oggetto Batch completamente popolato da accodare in richiesta internal void MettiLottoInCoda(Batch batch) { SSClient.AddBatch(batch); } #endregion Internal Methods #region Private Properties /// /// Client che inoltra le richieste al Sizer /// private SizerServiceClient SSClient { get; set; } #endregion Private Properties } [Serializable] internal class IcoelSizerException : Exception { #region Public Constructors public IcoelSizerException() { } public IcoelSizerException(Exception ex) { this.ex = ex; } public IcoelSizerException(string message) : base(message) { } public IcoelSizerException(string message, Exception innerException) : base(message, innerException) { } #endregion Public Constructors #region Protected Constructors protected IcoelSizerException(SerializationInfo info, StreamingContext context) : base(info, context) { } #endregion Protected Constructors #region Private Fields private Exception ex; #endregion Private Fields } }