#region Namespace using System; using System.Diagnostics; using com.itac.mes.proxy.business; using com.itac.mes.tools; using com.itac.oib.client.customextensions; using Constants = com.itac.mes.tools.Constants; using OibClient = Asm.As.Oib.Client; #endregion namespace Itac.Oib { /// /// Receiver class for the TraceService events /// public class BoardGateKeeperReceiver : IDisposable, IReceiver { #region Fields OIBEventHandler _eventHandler; readonly OibClient.OibBoardGateKeeperEvents _oibBoardGateKeeperEvents; public static string DefaultMachineFullPath { get; internal set; } public BoardGateKeeperReceiver(OibClient.OibBoardGateKeeperEvents oibBoardGateKeeperEvents, OIBEventHandler eventHandler) { if (oibBoardGateKeeperEvents == null) throw new ArgumentNullException("oibBoardGateKeeperEvents"); if (eventHandler == null) throw new ArgumentNullException("eventHandler"); this._oibBoardGateKeeperEvents = oibBoardGateKeeperEvents; this._eventHandler = eventHandler; } #endregion #region Start/Stop public void Start() { _oibBoardGateKeeperEvents.Start(); } public void Stop() { _oibBoardGateKeeperEvents.Stop(); } #endregion #region IDisposeable public void Dispose() { if (_oibBoardGateKeeperEvents != null) { _oibBoardGateKeeperEvents.Dispose(); } } #endregion public void virtualInkspotData(OibClient.CustomExtensions.VirtualInkspotHandlerBoardRequest virtualInkspotHandlerBoardRequest) { try { LogHandler.log(Constants.LOGGER, TraceEventType.Information, "BoardGateKeeperReceiver.VirtualInkspotData"); if (_eventHandler == null) { LogHandler.log(Constants.LOGGER, TraceEventType.Error, "calling BoardGateKeeperReceiver.VirtualInkspotData not performed, no eventHandler available"); return; } // map asm call values to itac struct com.itac.oib.client.customextensions.VirtualInkspotHandlerBoardRequest virtInkspotBoardRequest = VirtualInkspotHandlerBoardRequestMapper.get(virtualInkspotHandlerBoardRequest); // OIB 5.3 has a station information, oib 3 doesn't. If not available provide the first smt machines path to imsInterfaces. if (virtInkspotBoardRequest.BoardRequestData.Position.Station == null) { virtInkspotBoardRequest.BoardRequestData.Position.Station = DefaultMachineFullPath; } // execute call ar imsInterfaces com.itac.oib.boardgatekeeper.contracts.data.BoardRequestResult itacResult = _eventHandler.virtualInkspotBoardRequest(virtInkspotBoardRequest); // itacResult ist null: call to imsInterface failed (imsInterfaces not available). if (itacResult == null) { // setzen default Fehlertext virtualInkspotHandlerBoardRequest.BoardRequestResult.Reason = "no results from iTAC.MES.Suite"; virtualInkspotHandlerBoardRequest.BoardRequestResult.RequestResult = "Rejected"; for (int i = 0; i < virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates.Length; i++) { virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Place = false; virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Reason = "no results from iTAC.MES.Suite"; } } else { // copy values from itac back to asm return struct virtualInkspotHandlerBoardRequest.BoardRequestResult.RequestResult = itacResult.RequestResult; virtualInkspotHandlerBoardRequest.BoardRequestResult.Reason = itacResult.Reason; // virtualInkspotHandlerBoardRequest.BoardRequestResult.Reason = "no results from iTAC.MES.Suite"; // text info // virtualInkspotHandlerBoardRequest.BoardRequestResult.RequestResult = "Rejected"; // result code if (itacResult.VIHResult.SubPanelStates != null && itacResult.VIHResult.SubPanelStates.Length == virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates.Length) { // copy all subpanelstates from itacs result to asm return value for (int i = 0; i < itacResult.VIHResult.SubPanelStates.Length; i++) { virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Place = itacResult.VIHResult.SubPanelStates[i].Place; virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Reason = itacResult.VIHResult.SubPanelStates[i].Reason; } } } } catch (Exception e) { // The call failed exceptionally LogHandler.log(Constants.LOGGER, TraceEventType.Error, "calling BoardRequestResult in eventHandler failed", e); for (int i = 0; i < virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates.Length; i++) { virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Place = false; virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Reason = e.Message; } } } // called by incoming xml files public void virtualInkspotData(com.itac.oib.client.customextensions.VirtualInkspotHandlerBoardRequest requestData) { try { LogHandler.log(Constants.LOGGER, TraceEventType.Information, "BoardGateKeeperReceiver.VirtualInkspotData from xml-file"); if (_eventHandler != null) { com.itac.oib.boardgatekeeper.contracts.data.BoardRequestResult itacResult = _eventHandler.virtualInkspotBoardRequest(requestData); // TODO: Rückgabe noch auswerten ? // requestData.setBoardRequestResult(itacResult); return; } else { LogHandler.log(Constants.LOGGER, TraceEventType.Warning, "calling BoardGateKeeperReceiver.VirtualInkspotData not performed"); } } catch (Exception e) { // der letzte Aufruf schlug fehl!! LogHandler.log(Constants.LOGGER, TraceEventType.Error, "calling BoardRequestResult in eventHandler failed", e); } } } }