initialize
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using com.itac.mes.tools;
|
||||
using com.itac.mes.proxy.business;
|
||||
using OibClient = Asm.As.Oib.Client;
|
||||
using com.itac.oib.client.customextensions;
|
||||
#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 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;
|
||||
_oibBoardGateKeeperEvents.Ping = Ping;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Start/Stop
|
||||
|
||||
public void Start()
|
||||
{
|
||||
_oibBoardGateKeeperEvents.Start();
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
_oibBoardGateKeeperEvents.Stop();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Handling of events
|
||||
|
||||
bool Ping()
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, "BoardGateKeeperReceiver.Ping");
|
||||
return _eventHandler != null;
|
||||
}
|
||||
|
||||
#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)
|
||||
{
|
||||
|
||||
com.itac.oib.client.customextensions.VirtualInkspotHandlerBoardRequest virtInkspotBoardRequest = VirtualInkspotHandlerBoardRequestMapper.get(virtualInkspotHandlerBoardRequest);
|
||||
|
||||
com.itac.oib.boardgatekeeper.contracts.data.BoardRequestResult itacResult = _eventHandler.virtualInkspotBoardRequest(virtInkspotBoardRequest);
|
||||
|
||||
// itacResult ist null: call an das DataInterface schlug fehl
|
||||
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
|
||||
{
|
||||
//
|
||||
// Werte in die Rückgabe kopieren;
|
||||
/* virtualInkspotHandlerBoardRequest.BoardRequestResult.Reason = itacResult.getBoardRequestResult().reason;
|
||||
virtualInkspotHandlerBoardRequest.BoardRequestResult.RequestResult = itacResult.getBoardRequestResult().requestResult;
|
||||
if (itacResult.getBoardRequestResult().getVIHResult().getSubPanelStates() != null)
|
||||
{
|
||||
if (itacResult.getBoardRequestResult().getVIHResult().getSubPanelStates().Length == virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates.Length)
|
||||
{
|
||||
// subPanelStates kopieren
|
||||
for (int i = 0; i < itacResult.getBoardRequestResult().getVIHResult().getSubPanelStates().Length; i++)
|
||||
{
|
||||
virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Place = itacResult.getBoardRequestResult().getVIHResult().getSubPanelStates()[i].getPlace();
|
||||
virtualInkspotHandlerBoardRequest.BoardRequestResult.VIHResult.SubPanelStates[i].Reason = itacResult.getBoardRequestResult().getVIHResult().getSubPanelStates()[i].getReason();
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
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);
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using Asm.As.Oib.Client.CustomExtensions;
|
||||
using com.itac.mes.tools;
|
||||
using com.itac.mes.proxy.business;
|
||||
using com.itac.oib.client.customextensions;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
/// <summary>
|
||||
/// Receiver class for the Changeover manager events
|
||||
/// </summary>
|
||||
public class ChangeoverReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
|
||||
public OIBEventHandler _eventHandler { get; set; }
|
||||
private readonly ChangeoverManager _changeoverManager;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public ChangeoverReceiver(ChangeoverManager changeoverManager)
|
||||
{
|
||||
_changeoverManager = changeoverManager;
|
||||
_changeoverManager.LineChangeover += new Asm.As.Oib.Client.CustomExtensions.LineChangeoverEvent(ChangeoverManagerLineChangeover);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposeable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_changeoverManager != null)
|
||||
_changeoverManager.Dispose();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Start/Stop
|
||||
|
||||
public void Start()
|
||||
{
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Handling of events
|
||||
|
||||
public class LineChangeoverThread : ThreadTemplate<Asm.As.Oib.Client.CustomExtensions.LineChangeoverEventArgs>
|
||||
{
|
||||
public LineChangeoverThread(OIBEventHandler eventHandler, Asm.As.Oib.Client.CustomExtensions.LineChangeoverEventArgs request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = LineChangeoverEventArgsMapper.get(_request);
|
||||
getEventHandler().lineChangeoverEvent(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public void ChangeoverManagerLineChangeover(object sender, Asm.As.Oib.Client.CustomExtensions.LineChangeoverEventArgs args)
|
||||
{
|
||||
try
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, string.Format("Changeover completed for line '{0}'", args.Line.Name));
|
||||
// interessante Infos:
|
||||
// String conveyorModeString = args.Line.StationInLines[0].StationConveyorSystem.ConveyorMode.ToString();
|
||||
// com.itac.oib.client.customextensions.LineChangeoverEventArgs lineChangeoverEvent = LineChangeoverEventArgsMapper.get(args);
|
||||
// if (lineChangeoverEvent == null)
|
||||
// {
|
||||
// LogHandler.log(Constants.LOGGER, TraceEventType.Error, "LineChangeover not converted");
|
||||
// return;
|
||||
// }
|
||||
var mmt = new LineChangeoverThread(_eventHandler, args);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, string.Format("LineChangeover could not be pushed to java receiver"), e);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
internal com.itac.oib.client.customextensions.LineChangeoverEventArgs getCurrentLineProductionData()
|
||||
{
|
||||
var v = _changeoverManager.GetCurrentLineProductionData();
|
||||
com.itac.oib.client.customextensions.LineChangeoverEventArgs lineChangeoverEvent = LineChangeoverEventArgsMapper.get(v);
|
||||
if (lineChangeoverEvent == null)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "LineChangeover not converted");
|
||||
return null;
|
||||
}
|
||||
return lineChangeoverEvent;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using Asm.As.Oib.Client.CustomExtensions;
|
||||
using Asm.As.Oib.DisplayService.Contracts.Messages;
|
||||
using Asm.As.Oib.DisplayService.Proxy.Architecture.Objects;
|
||||
using com.itac.mes.proxy;
|
||||
using com.itac.mes.proxy.business;
|
||||
using com.itac.oib.client.customextensions;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
/// <summary>
|
||||
/// Receiver class for the Changeover manager events
|
||||
/// </summary>
|
||||
public class DisplayServiceReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
|
||||
public OIBEventHandler _eventHandler { get; set; }
|
||||
private readonly DisplayServiceClient _displayServiceClient;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public DisplayServiceReceiver(DisplayServiceClient displayServiceClient)
|
||||
{
|
||||
_displayServiceClient = displayServiceClient;
|
||||
_displayServiceClient.ConfirmationReceived += confirmationReceived;
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposeable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_displayServiceClient != null)
|
||||
_displayServiceClient.Dispose();
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Start/Stop
|
||||
|
||||
public void Start()
|
||||
{
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Handling of events
|
||||
private void confirmationReceived(ConfirmationReceivedRequest confirmationReceivedRequest)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
/*public class LineChangeoverThread : ThreadTemplate<Asm.As.Oib.Client.CustomExtensions.LineChangeoverEventArgs>
|
||||
{
|
||||
public LineChangeoverThread(OIBEventHandler eventHandler, Asm.As.Oib.Client.CustomExtensions.LineChangeoverEventArgs request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = LineChangeoverEventArgsMapper.get(_request);
|
||||
getEventHandler().lineChangeoverEvent(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public void ChangeoverManagerLineChangeover(object sender, Asm.As.Oib.Client.CustomExtensions.LineChangeoverEventArgs args)
|
||||
{
|
||||
try
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, string.Format("Changeover completed for line '{0}'", args.Line.Name));
|
||||
// interessante Infos:
|
||||
// String conveyorModeString = args.Line.StationInLines[0].StationConveyorSystem.ConveyorMode.ToString();
|
||||
// com.itac.oib.client.customextensions.LineChangeoverEventArgs lineChangeoverEvent = LineChangeoverEventArgsMapper.get(args);
|
||||
// if (lineChangeoverEvent == null)
|
||||
// {
|
||||
// LogHandler.log(Constants.LOGGER, TraceEventType.Error, "LineChangeover not converted");
|
||||
// return;
|
||||
// }
|
||||
var mmt = new LineChangeoverThread(_eventHandler, args);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, string.Format("LineChangeover could not be pushed to java receiver"), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
internal com.itac.oib.client.customextensions.LineChangeoverEventArgs getCurrentLineProductionData()
|
||||
{
|
||||
com.itac.oib.client.customextensions.LineChangeoverEventArgs lineChangeoverEvent = LineChangeoverEventArgsMapper.get(_displayServiceClient.GetCurrentLineProductionData());
|
||||
if (lineChangeoverEvent == null)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "LineChangeover not converted");
|
||||
return null;
|
||||
}
|
||||
return lineChangeoverEvent;
|
||||
}*/
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
public interface IReceiver
|
||||
{
|
||||
void Start();
|
||||
|
||||
void Stop();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,215 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using com.itac.mes.tools;
|
||||
using com.itac.mes.proxy.business;
|
||||
using Constants = com.itac.mes.tools.Constants;
|
||||
using OibMonBizObj = Asm.As.Oib.Monitoring.Proxy.Business.EventArgs;
|
||||
using OibClient = Asm.As.Oib.Client;
|
||||
using System.Configuration;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
public class MonitoringReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
|
||||
public OIBEventHandler _eventHandler { get; set; }
|
||||
private readonly String _lineFullPath;
|
||||
private readonly OibClient.OibMonitoringEvents _oibMonitoringEvents;
|
||||
private TimeSpan boardProcessedMaxAge = new TimeSpan(0, 0, 0);
|
||||
private TimeSpan stationEventMaxAge = new TimeSpan(0, 0, 0);
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public MonitoringReceiver(OibClient.OibMonitoringEvents oibMonitoringEvents, string lineFullPath)
|
||||
{
|
||||
_oibMonitoringEvents = oibMonitoringEvents;
|
||||
_lineFullPath = lineFullPath;
|
||||
|
||||
oibMonitoringEvents.BoardProcessed += BoardProcessedEventReceived;
|
||||
oibMonitoringEvents.StationEvent += StationEventReceived;
|
||||
|
||||
try
|
||||
{
|
||||
String sMaxAge = (String)new AppSettingsReader().GetValue("BoardProcessedDataMaxAge", typeof(String));
|
||||
boardProcessedMaxAge = TimeSpan.Parse(sMaxAge);
|
||||
}
|
||||
catch (FormatException)
|
||||
{
|
||||
// default Wert 1 Stunde
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "configured Value for 'BoardProcessedDataMaxAge' is invalid, use default value");
|
||||
boardProcessedMaxAge = new TimeSpan(24, 0, 0);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
boardProcessedMaxAge = new TimeSpan(0, 0, 0);
|
||||
}
|
||||
if (boardProcessedMaxAge.Ticks > 0)
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "maximum age for BoardProcessedMessages = " + boardProcessedMaxAge.ToString());
|
||||
else
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "no maximum age for BoardProcessedMessages");
|
||||
try
|
||||
{
|
||||
String sMaxAge = (String)new AppSettingsReader().GetValue("StationEventMaxAge", typeof(String));
|
||||
stationEventMaxAge = TimeSpan.Parse(sMaxAge);
|
||||
}
|
||||
catch (FormatException)
|
||||
{
|
||||
// default Wert 1 Stunde
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "configured Value for 'StationEventMaxAge' is invalid, use default value");
|
||||
stationEventMaxAge = new TimeSpan(24, 0, 0);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
stationEventMaxAge = new TimeSpan(0, 0, 0);
|
||||
}
|
||||
if (stationEventMaxAge.Ticks > 0)
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "maximum age for StationEventMaxAge = " + stationEventMaxAge.ToString());
|
||||
else
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "no maximum age for StationEventMaxAge");
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Start/Stopp
|
||||
|
||||
public void Start()
|
||||
{
|
||||
_oibMonitoringEvents.Start();
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
_oibMonitoringEvents.Stop();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Handling of events
|
||||
|
||||
#region Board Processed
|
||||
|
||||
public void BoardProcessedEventReceived(object sender, OibMonBizObj.BoardProcessedEventArgs args)
|
||||
{
|
||||
try
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "BoardProcessedEventArgs");
|
||||
if (boardProcessedMaxAge.Ticks > 0)
|
||||
{
|
||||
Boolean skip = false;
|
||||
DateTime oldestDate = new DateTime(DateTime.Now.Ticks - boardProcessedMaxAge.Ticks).ToUniversalTime();
|
||||
foreach (Asm.As.Oib.Monitoring.Proxy.Business.Objects.ProcessedBoard processedBoard in args.BoardProcessedData.ProcessedBoards)
|
||||
{
|
||||
if (processedBoard.StationTime != null && processedBoard.StationTime.ToUniversalTime().Ticks < oldestDate.Ticks)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, "found old BoardProcessedEvent from " + processedBoard.StationTime.ToUniversalTime().ToString() +
|
||||
", oldest message to be processed is " + oldestDate.ToString());
|
||||
skip = true;
|
||||
}
|
||||
}
|
||||
if (skip)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, "ignore BoardProcessedEvent because one of its " +
|
||||
"stationEvents is older than configured time " + boardProcessedMaxAge.ToString());
|
||||
return;
|
||||
}
|
||||
}
|
||||
var mmt = new BoardProcessedThread(_eventHandler, args.BoardProcessedData);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "BoardProcessedEventArgs failed", e);
|
||||
}
|
||||
}
|
||||
|
||||
private class BoardProcessedThread : ThreadTemplate<Asm.As.Oib.Monitoring.Proxy.Business.Objects.BoardProcessedData>
|
||||
{
|
||||
public BoardProcessedThread(OIBEventHandler eventHandler, Asm.As.Oib.Monitoring.Proxy.Business.Objects.BoardProcessedData request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.monitoring.contracts.data.BoardProcessedDataMapper.get(_request);
|
||||
getEventHandler().boardProcessedEventReceived(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Station Event
|
||||
|
||||
public void StationEventReceived(object sender, OibMonBizObj.StationEventArgs args)
|
||||
{
|
||||
try
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "StationEventReceived");
|
||||
|
||||
if (stationEventMaxAge.Ticks > 0)
|
||||
{
|
||||
DateTime oldestDate = new DateTime(DateTime.Now.ToUniversalTime().Ticks - stationEventMaxAge.Ticks).ToUniversalTime();
|
||||
if (args.StationEventComposite != null && args.StationEventComposite.StationTime.ToUniversalTime().Ticks < oldestDate.Ticks)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "ignore StationEvent because its time '" +
|
||||
args.StationEventComposite.StationTime.ToUniversalTime() + "' is older than configured time " + stationEventMaxAge.ToString());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
var mmt = new StationEventThread(_eventHandler, args.StationEventComposite);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "StationEventArgs failed", e);
|
||||
}
|
||||
}
|
||||
|
||||
public class StationEventThread : ThreadTemplate<Asm.As.Oib.Monitoring.Proxy.Business.Objects.StationEventComposite>
|
||||
{
|
||||
public StationEventThread(OIBEventHandler eventHandler, Asm.As.Oib.Monitoring.Proxy.Business.Objects.StationEventComposite request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.monitoring.contracts.data.StationEventCompositeMapper.get(_request);
|
||||
getEventHandler().stationEventReceived(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
void MonitoringSubscriptionHealthStatus(object sender, OibClient.OibServiceStatusEventArgs e)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!e.SubscriptionCheckResult.Succeeded)
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, string.Format("OIB Monitoring Queue for line '{0}' cound not be checked.", _lineFullPath));
|
||||
else
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, string.Format("OIB Monitoring Queue for line '{0}' is in state '{1}' containing '{2}' messages.", _lineFullPath, e.SubscriptionCheckResult.QueueStatus, e.SubscriptionCheckResult.MessagesInQueue));
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, string.Format("OIB Monitoring Queue for line '{0}' checked failed: '{1}'.", _lineFullPath, ex.Message));
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region IDisposeable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_oibMonitoringEvents != null)
|
||||
_oibMonitoringEvents.Dispose();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using com.itac.mes.proxy.business;
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
|
||||
public class ThreadTemplate<T>
|
||||
{
|
||||
protected readonly OIBEventHandler _eventHandler;
|
||||
protected readonly T _request;
|
||||
|
||||
public ThreadTemplate(OIBEventHandler eventHandler, T request)
|
||||
{
|
||||
_eventHandler = eventHandler;
|
||||
_request = request;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// get the event handler. By calling a funcion at the eventHandler the object is serialized and transported to java receiver.
|
||||
/// </summary>
|
||||
/// <returns>The event handler instance</returns>
|
||||
/// <exception>An exception is thrown when the handler was not set to this instance of thread template</exception>
|
||||
public OIBEventHandler getEventHandler()
|
||||
{
|
||||
if (_eventHandler == null)
|
||||
{
|
||||
if (_request == null) { throw new Exception("missing event handler to transport unknown message"); }
|
||||
throw new Exception("missing event handler to transport message of type " + _request.GetType().Name);
|
||||
}
|
||||
return _eventHandler;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,248 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Diagnostics;
|
||||
using System.Reflection;
|
||||
using System.ServiceModel;
|
||||
using www.siplace.com.OIB._2008._05.SetupCenter.Contracts.Data;
|
||||
using com.itac.mes.tools;
|
||||
using com.itac.mes.proxy.business;
|
||||
using OibClient = Asm.As.Oib.Client;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
|
||||
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
|
||||
public class SetupCenterExternalControlReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private readonly OibClient.OibSetupCenterExternalControlEvents _oibSetupCenterExternalControlEvents;
|
||||
public OIBEventHandler _eventHandler { get; set; }
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public SetupCenterExternalControlReceiver(OibClient.OibSetupCenterExternalControlEvents oibSetupCenterExternalControlEvents)
|
||||
{
|
||||
_oibSetupCenterExternalControlEvents = oibSetupCenterExternalControlEvents;
|
||||
oibSetupCenterExternalControlEvents.Ping = Ping;
|
||||
oibSetupCenterExternalControlEvents.GetNewPackagingUnitData = GetNewPackagingUnitData;
|
||||
oibSetupCenterExternalControlEvents.GetPackagingUnitControlStatus = GetPackagingUnitControlStatus;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Start/Stop
|
||||
|
||||
public void Start()
|
||||
{
|
||||
if (!_oibSetupCenterExternalControlEvents.IsStarted)
|
||||
{
|
||||
_oibSetupCenterExternalControlEvents.Start();
|
||||
}
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
_oibSetupCenterExternalControlEvents.Stop();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ISiplaceSetupCenterExternalControl Members
|
||||
|
||||
/// <summary>
|
||||
/// Check for the client if this service is available.
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public bool Ping()
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, "SetupCenterExternalControl.Ping");
|
||||
return _eventHandler != null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public ExternalControlResult[] GetPackagingUnitControlStatus(PackagingUnitLocation[] packagingUnitLocations)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "ExternalControl GetPackagingUnitControlStatus called");
|
||||
com.itac.oib.siplacesetupcenter.contracts.data.PackagingUnitLocation[] report = com.itac.oib.siplacesetupcenter.contracts.data.PackagingUnitLocationMapper.getArray(packagingUnitLocations);
|
||||
www.siplace.com.OIB._2008._05.SetupCenter.Contracts.Data.ExternalControlResult[] oibResult = null;
|
||||
try
|
||||
{
|
||||
com.itac.oib.siplacesetupcenter.contracts.data.ExternalControlResult[] itacResult = _eventHandler.getPackagingUnitControlStatus(report);
|
||||
oibResult = com.itac.oib.siplacesetupcenter.contracts.data.ExternalControlResultMapper.get(itacResult);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "failed to process GetPackagingUnitControlStatus", e);
|
||||
}
|
||||
|
||||
asmHandler(ref packagingUnitLocations, ref oibResult);
|
||||
return oibResult;
|
||||
}
|
||||
|
||||
public void UpdateEmptyFields(List<PackagingUnitLocation> packagingUnitLocations, List<ExternalControlResult> result)
|
||||
{
|
||||
if (packagingUnitLocations == null || packagingUnitLocations.Count == 0)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "SetupCenterExternalControl.updateEmptyFields: packagingUnitLocations empty or null");
|
||||
return;
|
||||
}
|
||||
if (result == null || result.Count == 0)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "SetupCenterExternalControl.updateEmptyFields: result empty or null");
|
||||
return;
|
||||
}
|
||||
if (packagingUnitLocations.Count != result.Count)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "SetupCenterExternalControl.updateEmptyFields: packagingUnitLocations and result different size");
|
||||
return;
|
||||
}
|
||||
// über alle Items iterieren
|
||||
for (int i = 0; i < packagingUnitLocations.Count; i++)
|
||||
{
|
||||
UpdateEmptyFields(packagingUnitLocations[i], result[i]);
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateEmptyFields(PackagingUnitLocation packagingUnitLocation, ExternalControlResult result)
|
||||
{
|
||||
if (packagingUnitLocation == null)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "SetupCenterExternalControl.updateEmptyFields: packagingUnitLocation is null");
|
||||
return;
|
||||
}
|
||||
if (result == null)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "SetupCenterExternalControl.updateEmptyFields: result is null");
|
||||
return;
|
||||
}
|
||||
// per reflection über alle Felder iterieren, dabei per Name vorgehen
|
||||
// deepCopy(packagingUnitLocation, result);
|
||||
// Console.WriteLine("");
|
||||
if (packagingUnitLocation.PackagingUnit.BatchPackagingUnit != null && result.PackagingUnit.BatchPackagingUnit == null)
|
||||
{
|
||||
result.PackagingUnit.BatchPackagingUnit = packagingUnitLocation.PackagingUnit.BatchPackagingUnit;
|
||||
}
|
||||
}
|
||||
|
||||
// muss noch weiter getestet werden...
|
||||
public void DeepCopy(object sourceObject, object destObject)
|
||||
{
|
||||
Type sourceType = sourceObject.GetType();
|
||||
Type destType = destObject.GetType();
|
||||
MemberInfo[] sourceMbrInfoArray = sourceType.GetMembers();
|
||||
MemberInfo[] destMbrInfoArray = destType.GetMembers();
|
||||
|
||||
foreach (MemberInfo sourceMbrInfo in sourceMbrInfoArray)
|
||||
{
|
||||
if (sourceMbrInfo.MemberType == MemberTypes.Property)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "" + sourceMbrInfo + " is a " + sourceMbrInfo.MemberType);
|
||||
// alle einfachen TypeNameConverter direkt prüfen (int, String, bool)
|
||||
// komplexe Typen ???
|
||||
|
||||
PropertyInfo sourcePropInfo = sourceType.GetProperty(sourceMbrInfo.Name);
|
||||
|
||||
// gibt es das Property auch im Zielobjekt
|
||||
foreach (MemberInfo destMbrInfo in destMbrInfoArray)
|
||||
{
|
||||
// identischer Name, identischerr Typ
|
||||
if (destMbrInfo.MemberType == sourceMbrInfo.MemberType && destMbrInfo.Name == sourceMbrInfo.Name)
|
||||
{
|
||||
PropertyInfo destPropInfo = destType.GetProperty(destMbrInfo.Name);
|
||||
object sourceValue = sourcePropInfo.GetValue(sourceObject, null);
|
||||
object destValue = destPropInfo.GetValue(destObject, null);
|
||||
if (sourcePropInfo.PropertyType == typeof(String) || sourcePropInfo.PropertyType == typeof(int)
|
||||
|| sourcePropInfo.PropertyType == typeof(Int32) || sourcePropInfo.PropertyType == typeof(Int64)
|
||||
|| sourcePropInfo.PropertyType == typeof(long) || sourcePropInfo.PropertyType == typeof(bool)
|
||||
|| sourcePropInfo.PropertyType == typeof(Boolean))
|
||||
{
|
||||
if (sourceValue != destValue)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, "primitive type copy value");
|
||||
destPropInfo.SetValue(destObject, sourceValue, null);
|
||||
}
|
||||
}
|
||||
else if (!sourceType.IsArray)
|
||||
{
|
||||
// komplexer Typ, kein Array
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, sourceMbrInfo.Name + " is complex type ");
|
||||
if (sourceValue != null)
|
||||
{
|
||||
DeepCopy(sourceValue, destValue);
|
||||
}
|
||||
else
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Verbose, sourceMbrInfo.Name + " is complex type, sourceValue is null");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void asmHandler(ref www.siplace.com.OIB._2008._05.SetupCenter.Contracts.Data.PackagingUnitLocation[] packagingUnitLocations,
|
||||
ref www.siplace.com.OIB._2008._05.SetupCenter.Contracts.Data.ExternalControlResult[] result)
|
||||
{
|
||||
//
|
||||
// special ASM Handling:
|
||||
// simply return MSD Level and MSD Open Date as received in request
|
||||
|
||||
foreach (www.siplace.com.OIB._2008._05.SetupCenter.Contracts.Data.PackagingUnitLocation item in packagingUnitLocations)
|
||||
{
|
||||
// find this container in result and copy the values
|
||||
foreach (www.siplace.com.OIB._2008._05.SetupCenter.Contracts.Data.ExternalControlResult resultItem in result)
|
||||
{
|
||||
if (item.PackagingUnit.UID.Equals(resultItem.PackagingUnit.UID))
|
||||
{
|
||||
resultItem.PackagingUnit.MsdLevel = item.PackagingUnit.MsdLevel;
|
||||
resultItem.PackagingUnit.MsdOpenDate = item.PackagingUnit.MsdOpenDate;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public ExternalControlResult[] GetNewPackagingUnitData(PackagingUnitLocation[] packagingUnitLocations)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "SetupCenterExternalControl.GetPackagingUnitControlStatus");
|
||||
try
|
||||
{
|
||||
// List<ExternalControlResult> result = _eventHandler.GetPackagingUnitControlStatus(packagingUnitLocations);
|
||||
|
||||
// hier müssen eigentliche alle Felder aus den quelldaten, die nicht in den Zieldaten enthalten sind per
|
||||
// Reflection übernommen werden, damit wir nie mehr irgend welche Werte verlieren
|
||||
// UpdateEmptyFields(packagingUnitLocations, result);
|
||||
// return result;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
_eventHandler = null;
|
||||
// Fehler, keine weitere info vorhanden, da die Applikation nicht läuft
|
||||
}
|
||||
return new ExternalControlResult[0];
|
||||
}
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposeable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_oibSetupCenterExternalControlEvents != null)
|
||||
_oibSetupCenterExternalControlEvents.Dispose();
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,269 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using com.itac.mes.tools;
|
||||
using com.itac.mes.proxy.business;
|
||||
using System.Threading;
|
||||
using OibClient = Asm.As.Oib.Client;
|
||||
using www.siplace.com.OIB._2008._05.SetupCenter.Contracts.Data;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
public class SetupCenterReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
public OIBEventHandler _eventHandler { get; set; }
|
||||
private readonly String _lineFullPath;
|
||||
private readonly OibClient.OibSetupCenterEvents _oibSetupCenterEvents;
|
||||
private bool _isSetupStation;
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public SetupCenterReceiver(OibClient.OibSetupCenterEvents oibSetupCenterEvents, string lineFullPath, bool isSetupStation)
|
||||
{
|
||||
_oibSetupCenterEvents = oibSetupCenterEvents;
|
||||
_lineFullPath = lineFullPath;
|
||||
_isSetupStation = isSetupStation;
|
||||
|
||||
oibSetupCenterEvents.FeederPlaced += SetupCenterFeederPlaced;
|
||||
oibSetupCenterEvents.FeederRemoved += SetupCenterFeederRemoved;
|
||||
oibSetupCenterEvents.NewSetupActive += SetupCenterNewSetupActive;
|
||||
oibSetupCenterEvents.PackagingQuantityChanged += SetupCenterPackagingQuantityChanged;
|
||||
oibSetupCenterEvents.SetupChanged += SetupCenterSetupChanged;
|
||||
oibSetupCenterEvents.PackagingUnitConsumed += SetupCenterPackagingUnitConsumed;
|
||||
oibSetupCenterEvents.MaterialMoved += SetupCenterMaterialMoved;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Start/Stop
|
||||
|
||||
public void Start()
|
||||
{
|
||||
if (!_oibSetupCenterEvents.IsStarted)
|
||||
{
|
||||
_oibSetupCenterEvents.Start();
|
||||
}
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
_oibSetupCenterEvents.Stop();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Handling of events
|
||||
private void startSetupcenterEvent(Object args)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, String.Format("SetupCenterReceiver.{0}", args.GetType().Name));
|
||||
}
|
||||
private void setupcenterEventFailed(Object args, Exception e)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, String.Format("calling SetupCenterNotifyReceiver.{0} failed", args.GetType().Name), e);
|
||||
}
|
||||
|
||||
void SetupCenterPackagingQuantityChanged(object sender, OibClient.PackagingQuantityChangedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new PackagingQuantityChangedThread(_eventHandler, args.PackagingQuantityChangedReportRequest.PackagingQuantityChangedReport);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
void SetupCenterFeederPlaced(object sender, OibClient.FeederPlacedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new FeederPlacedThread(_eventHandler, args.FeederPlacedReportRequest.FeederPlacedReport);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
void SetupCenterFeederRemoved(object sender, OibClient.FeederRemovedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new FeederRemovedThread(_eventHandler, args.FeederRemovedReportRequest.FeederRemovedReport);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
void SetupCenterNewSetupActive(object sender, OibClient.NewSetupActiveEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new NewSetupActiveThread(_eventHandler, args.NewSetupActiveReportRequest.NewSetupActiveReport);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
void SetupCenterSetupChanged(object sender, OibClient.SetupChangedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new SetupChangedThread(_eventHandler, args.SetupChangedReportRequest.SetupChangedReport);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
void SetupCenterPackagingUnitConsumed(object sender, OibClient.PackagingUnitConsumedEventArgs args)
|
||||
{
|
||||
if (_isSetupStation)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "ignore PackagingUnitConsumed because in SetupStation mode");
|
||||
return;
|
||||
}
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new PackagingUnitConsumedThread(_eventHandler, args.PackagingUnitConsumedReportRequest.PackagingUnitConsumedReport);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetupCenterMaterialMoved(object sender, OibClient.MaterialMovedEventArgs args)
|
||||
{
|
||||
startSetupcenterEvent(args);
|
||||
try
|
||||
{
|
||||
var mmt = new MaterialMovedThread(_eventHandler, args.MaterialMovedReportRequest.MaterialMovedReport);
|
||||
var thread = new Thread(mmt.ThreadFunction);
|
||||
thread.Start();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
setupcenterEventFailed(args, e);
|
||||
}
|
||||
}
|
||||
// Calls delegieren an die eigentliche Implementierung
|
||||
|
||||
public class FeederPlacedThread : ThreadTemplate<FeederPlacedReport>
|
||||
{
|
||||
public FeederPlacedThread(OIBEventHandler eventHandler, FeederPlacedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.FeederPlacedReportMapper.get(_request);
|
||||
getEventHandler().feederPlaced(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class FeederRemovedThread : ThreadTemplate<FeederRemovedReport>
|
||||
{
|
||||
public FeederRemovedThread(OIBEventHandler eventHandler, FeederRemovedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.FeederRemovedReportMapper.get(_request);
|
||||
getEventHandler().feederRemoved(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class NewSetupActiveThread : ThreadTemplate<NewSetupActiveReport>
|
||||
{
|
||||
public NewSetupActiveThread(OIBEventHandler eventHandler, NewSetupActiveReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.NewSetupActiveReportMapper.get(_request);
|
||||
getEventHandler().newSetupActive(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class PackagingQuantityChangedThread : ThreadTemplate<PackagingQuantityChangedReport>
|
||||
{
|
||||
public PackagingQuantityChangedThread(OIBEventHandler eventHandler, PackagingQuantityChangedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.PackagingQuantityChangedReportMapper.get(_request);
|
||||
getEventHandler().packagingQuantityChanged(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
public class SetupChangedThread : ThreadTemplate<SetupChangedReport>
|
||||
{
|
||||
public SetupChangedThread(OIBEventHandler eventHandler, SetupChangedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.SetupChangedReportMapper.get(_request);
|
||||
getEventHandler().setupChanged(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
public class PackagingUnitConsumedThread : ThreadTemplate<PackagingUnitConsumedReport>
|
||||
{
|
||||
public PackagingUnitConsumedThread(OIBEventHandler eventHandler, PackagingUnitConsumedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.PackagingUnitConsumedReportMapper.get(_request);
|
||||
getEventHandler().packagingUnitConsumed(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Calls delegieren an die eigentliche Implementierung
|
||||
|
||||
|
||||
public class MaterialMovedThread : ThreadTemplate<MaterialMovedReport>
|
||||
{
|
||||
public MaterialMovedThread(OIBEventHandler eventHandler, MaterialMovedReport request) : base(eventHandler, request) { }
|
||||
|
||||
public void ThreadFunction()
|
||||
{
|
||||
var mesNamespaceConformRequest = com.itac.oib.siplacesetupcenter.contracts.data.MaterialMovedReportMapper.get(_request);
|
||||
getEventHandler().materialMoved(mesNamespaceConformRequest);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region IDisposeable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_oibSetupCenterEvents != null)
|
||||
_oibSetupCenterEvents.Dispose();
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,91 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading;
|
||||
using com.itac.mes.tools;
|
||||
using com.itac.mes.proxy.business;
|
||||
using Constants = com.itac.mes.tools.Constants;
|
||||
using OibMonBizObj = Asm.As.Oib.Monitoring.Proxy.Business.EventArgs;
|
||||
using OibClient = Asm.As.Oib.Client;
|
||||
using com.itac.oib.linecontrol.data;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
public class SpiReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
|
||||
private readonly OIBEventHandler _eventHandler;
|
||||
private readonly OibClient.OibSpiEvents _oibSpiEvents;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public SpiReceiver(OibClient.OibSpiEvents oibSpiEvents, OIBEventHandler eventHandler)
|
||||
{
|
||||
_eventHandler = eventHandler;
|
||||
_oibSpiEvents = oibSpiEvents;
|
||||
|
||||
oibSpiEvents.RecipeSecifiedForStation += OibSpiEventsRecipeSecifiedForStation;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Start/Stopp
|
||||
|
||||
public void Start()
|
||||
{
|
||||
_oibSpiEvents.StartDownloadEvents();
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
_oibSpiEvents.StopDownloadEvents();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Handling of events
|
||||
|
||||
public void OibSpiEventsRecipeSecifiedForStation(object sender, OibClient.RecipeSecifiedForStationEventArgs args)
|
||||
{
|
||||
try
|
||||
{
|
||||
var downloadData = new DownloadData();
|
||||
downloadData.strServiceComputer = "";
|
||||
downloadData.downloadTime = args.DownloadTime;
|
||||
downloadData.lineName = args.ProductionScheduleElement.Recipe.Setup.Line.FullPath;
|
||||
downloadData.stationName = args.StationIdentity.FullPath;
|
||||
downloadData.conveyorLanes = args.IsRightLane ? "Right" : "Left";
|
||||
downloadData.jobName = args.ProductionScheduleElement.OrderID;
|
||||
downloadData.recipeName = args.ProductionScheduleElement.Recipe.FullPath;
|
||||
downloadData.productionScheduleName = args.ProductionScheduleDisplayName;
|
||||
downloadData.productionScheduleElementId = args.ProductionScheduleElement.ID;
|
||||
downloadData.placementInfo = com.itac.oib.siplacepro.service.SiplacePro.GetPlacementForRecipe(args.ProductionScheduleElement.Recipe);
|
||||
_eventHandler.downloadEvent(downloadData);
|
||||
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "download Event received");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Trace.WriteLine("Error processing SPI property changed event: " + ex.Message);
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "Error processing SPI property changed event: ", ex);
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposeable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_oibSpiEvents != null)
|
||||
_oibSpiEvents.Dispose();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
#region Namespace
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using Asm.As.Oib.Client.CustomExtensions;
|
||||
using com.itac.mes.tools;
|
||||
using com.itac.mes.proxy.business;
|
||||
using com.itac.oib.traceability.contracts.data;
|
||||
using OibClient = Asm.As.Oib.Client;
|
||||
using SiplaceNS = www.siplace.com.OIB._2009._03.Traceability.Contracts.Data;
|
||||
#endregion
|
||||
|
||||
namespace Itac.Oib
|
||||
{
|
||||
/// <summary>
|
||||
/// Receiver class for the TraceService events
|
||||
/// </summary>
|
||||
public class TraceabilityReceiver : IDisposable, IReceiver
|
||||
{
|
||||
#region Fields
|
||||
|
||||
OIBEventHandler _eventHandler;
|
||||
readonly OibClient.OibTraceabilityEvents _oibTraceabilityEvents;
|
||||
readonly OperatorNotificationManager _operatorNotificationManager;
|
||||
|
||||
#endregion
|
||||
|
||||
#region Constructor
|
||||
|
||||
public TraceabilityReceiver(OibClient.OibTraceabilityEvents oibTraceEvents, OIBEventHandler eventHandler, OperatorNotificationManager operatorNotificationManager)
|
||||
{
|
||||
if (oibTraceEvents == null) throw new ArgumentNullException("oibTraceEvents");
|
||||
if (eventHandler == null) throw new ArgumentNullException("eventHandler");
|
||||
if (operatorNotificationManager == null) throw new ArgumentNullException("operatorNotificationManager");
|
||||
|
||||
_oibTraceabilityEvents = oibTraceEvents;
|
||||
_eventHandler = eventHandler;
|
||||
_operatorNotificationManager = operatorNotificationManager;
|
||||
|
||||
oibTraceEvents.TraceabilityData = TraceDataReceived;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Start/Stop
|
||||
|
||||
public void Start()
|
||||
{
|
||||
_oibTraceabilityEvents.Start();
|
||||
}
|
||||
|
||||
public void Stop()
|
||||
{
|
||||
_oibTraceabilityEvents.Stop();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Handling of events
|
||||
|
||||
|
||||
public bool TraceDataReceived(SiplaceNS.TraceabilityData traceabilityData)
|
||||
{
|
||||
try
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "ITraceabilityOibService.NewTraceabilityData");
|
||||
if (_eventHandler != null)
|
||||
{
|
||||
|
||||
TraceabilityData itacTraceData = TraceabilityDataMapper.get(traceabilityData);
|
||||
BoardProducedResponse result = _eventHandler.boardProduced(itacTraceData);
|
||||
if (result.BoardValidationResult == 2)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "received the RC_TRCDATA_REJECTED return code");
|
||||
try
|
||||
{
|
||||
_operatorNotificationManager.TraceDataRejected("Die letzte Station wurde gestoppt, da iTac die Tracedaten als fehlerhaft erkannt hat.");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "calling OperatorNotificationManager failed", ex);
|
||||
}
|
||||
}
|
||||
else if (result.BoardValidationReason.StartsWith("RC_TRCDATA_REJECTED:"))
|
||||
{
|
||||
string message = result.BoardValidationReason.Replace("RC_TRCDATA_REJECTED:", "");
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "received the RC_TRCDATA_REJECTED return code with additional l message text " + message);
|
||||
try
|
||||
{
|
||||
_operatorNotificationManager.TraceDataRejected(message);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "calling OperatorNotificationManager failed", ex);
|
||||
}
|
||||
}
|
||||
//response.BoardValidationResult = 2;
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Warning, "calling ITraceabilityOibService.NewTraceabilityData not performed");
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
// der letzte Aufruf schlug fehl!!
|
||||
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "calling NewTraceabilityData in eventHandler failed", e);
|
||||
}
|
||||
// response.BoardValidationResult = 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region IDisposeable
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
if (_oibTraceabilityEvents != null)
|
||||
_oibTraceabilityEvents.Dispose();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user