Files
2025-06-06 09:15:13 +02:00

181 lines
7.1 KiB
C#

#region Namespace
using System;
using System.Diagnostics;
using Asm.As.Oib.Client;
using com.itac.mes.proxy.business;
using com.itac.oib.client.customextensions;
using com.itac.mes.tools;
using Constants = com.itac.mes.tools.Constants;
using com.itac.oib.siplacepro.contracts.data;
using com.itac.oib.traceability.contracts.data;
using OibSpiArchObj = Asm.As.Oib.SiplacePro.Proxy.Architecture.Objects;
using OibSpiBizObj = Asm.As.Oib.SiplacePro.Proxy.Business.Objects;
using OibSpiTypes = Asm.As.Oib.SiplacePro.Proxy.Types;
using System.Collections.Generic;
#endregion
namespace com.itac.oib.siplacepro.service
{
/// <summary>
/// Diese Klasse enthält eine Referenz auf eine Siplace pro Session, über die auf die SiplacePro Schnittstelle zugegriffen werden kann.
/// </summary>
public class SiplacePro : ISiplacePro
{
#region Fields
// Eventhandler zur übergabe des Events an Java Server.
public OIBEventHandler _eventHandler { set; get; }
public OibSpiAccess oibSpiAccess { get; set; }
#endregion
#region ISiplacePro Member
public void RegisterCallback()
{
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "subscribe SiplacePro events");
try
{
if (oibSpiAccess.Session != null)
{
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "SiplacePro Adapter Version: " + oibSpiAccess.Session.OibSiplaceProAdapterVersion);
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "SiplacePro Proxy Version: " + oibSpiAccess.Session.OibSiplaceProProxyVersion);
oibSpiAccess.Session.ServiceUnreachable += SpiSessionOnServiceUnreachable;
oibSpiAccess.Session.ServiceReconnect += SpiSessionOnServiceReconnect;
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "SiplacePro events subscribed ");
}
}
catch (Exception ex)
{
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "Got exception during setting up Subcription mode: ", ex);
}
}
#endregion
#region SPI Event Handling
private void SpiSessionOnServiceReconnect(string endpoint, string comment)
{
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "*** SERVICE RECONNECT ***");
if (_eventHandler != null)
_eventHandler.onServiceReconnect();
}
private void SpiSessionOnServiceUnreachable(string endpoint, string comment)
{
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "*** SERVICE UNREACHABLE ***");
if (_eventHandler != null)
_eventHandler.onServiceDisconnect();
}
#endregion
#region ISiplacePro Member
public BoardElement[] getPlacementForBoard(String boardFullName)
{
LogHandler.log(Constants.LOGGER, TraceEventType.Information, ".NET get Board");
// PlacementInfo placementInfo = new PlacementInfo();
OibSpiBizObj.Board board = oibSpiAccess.Session.GetObject(boardFullName, OibSpiTypes.ObjectServerType.Board) as OibSpiBizObj.Board;
List<com.itac.oib.siplacepro.contracts.data.BoardElement> itacBoardElementList = new List<com.itac.oib.siplacepro.contracts.data.BoardElement>();
com.itac.oib.siplacepro.contracts.data.BoardElement itacBoardElement = new com.itac.oib.siplacepro.contracts.data.BoardElement();
com.itac.oib.siplacepro.contracts.data.Board itacBoard = BoardMapper.get(board);
itacBoardElement.Board = itacBoard;
//board = BoardElementHelper.DoBoard(board);
// itacBoard.producedSide = board.BoardSideProduced.ToString();
itacBoardElementList.Add(itacBoardElement);
return itacBoardElementList.ToArray();
}
// diese Methode im Download Event ausführen und Ergebnis zurückliefern
internal static BoardElement[] GetPlacementForRecipe(OibSpiBizObj.Recipe recipe)
{
LogHandler.log(Constants.LOGGER, TraceEventType.Information, ".NET get Recipe");
BoardElement[] placementInfo = new BoardElement[0];
// var itacBoardElementList = new List<BoardElement>();
try
{
foreach (var boardelement in recipe.BoardElements)
{
// itacBoardElementList.Add(BoardElementHelper.DoBoardElement(boardelement));
}
// placementInfo.boardElements = itacBoardElementList.ToArray();
}
catch (Exception ex)
{
// bei allen Exceptions Ausgabe machen und null liefern!!!
LogHandler.log(Constants.LOGGER, TraceEventType.Error, "converting board information failed, can't continue properly", ex);
return null;
}
return placementInfo;
}
#endregion
#region ISiplacePro Member
public BoardCheckInRequest completeCheckinData(BoardCheckInRequest checkinData)
{
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "complete CheckInData");
if (checkinData == null) { return null; }
// Line und Recipe ermitteln, die fehlenden Werte in die übergebene Struktur eintragen und zurückliefern
var result = checkinData;
LogHandler.log(Constants.LOGGER, TraceEventType.Information, ".NET call getRecipe");
// var recipe = oibSpiAccess.Session.GetObject(checkinData.getRecipeName(), OibSpiTypes.ObjectServerType.Recipe) as OibSpiBizObj.Recipe;
// result.setRecipeName(monitoring.contracts.data.RecipeMapper.get(recipe));
// LogHandler.log(Constants.LOGGER, TraceEventType.Information, ".NET call getLine");
// var line = oibSpiAccess.Session.GetObject(checkinData.getLineName(), OibSpiTypes.ObjectServerType.Line) as OibSpiBizObj.Line;
// result.setLineName( LineMapper.get(line));
LogHandler.log(Constants.LOGGER, TraceEventType.Information, "complete CheckInData finished");
return checkinData;
}
private static OibSpiArchObj.Identity GetStationIdentity(OibSpiBizObj.DownloadData downloadData, OibSpiBizObj.ProductionDataManager pdm)
{
foreach (var dd in pdm.LineControlData.DownloadData)
{
if (dd.Value.OID == downloadData.OID)
{
return dd.Key;
}
}
return null;
}
#endregion
internal void Download(Asm.As.Oib.SiplacePro.Contracts.Data.Business.Objects.DownloadData downloadData)
{
if (_eventHandler != null)
{
// TODO richtiges download nehmen _eventHandler.DownloadEvent(downloadData);
}
}
public LineChangeoverEventArgs getCurrentLineProductionData()
{
throw new NotImplementedException();
}
#region ISiplacePro Member
#endregion
}
}