149 lines
7.0 KiB
C#
149 lines
7.0 KiB
C#
#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
|
|
{
|
|
/// <summary>
|
|
/// Receiver class for the TraceService events
|
|
/// </summary>
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
} |