107 lines
4.3 KiB
C#
107 lines
4.3 KiB
C#
using bsmd.database;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Xml;
|
|
using System.Xml.Serialization;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using log4net;
|
|
|
|
namespace bsmd.hisnord
|
|
{
|
|
public class Response
|
|
{
|
|
|
|
private static ILog _log = LogManager.GetLogger(typeof(Response));
|
|
|
|
|
|
public static void ReadAnswers()
|
|
{
|
|
foreach (string answerFile in Directory.GetFiles(Properties.Settings.Default.AnswerDir))
|
|
{
|
|
|
|
// TODO: klären was man hier liest: reguläre Antwort oder Schnittstellenfehler
|
|
VisitIdResponse visitIdResponse = ReadVisitId(answerFile);
|
|
if (visitIdResponse != null)
|
|
{
|
|
_log.InfoFormat("HIS-NORD: Visit-ID {0} delivered for Core {1}", visitIdResponse.VisitId, visitIdResponse.ClientRequestId);
|
|
// update MessageCore
|
|
if (visitIdResponse.ClientRequestId != null)
|
|
{
|
|
Guid messageCoreId;
|
|
if (Guid.TryParse(visitIdResponse.ClientRequestId, out messageCoreId))
|
|
{
|
|
MessageCore answerCore = DBManager.Instance.GetMessageCoreById(messageCoreId);
|
|
if (answerCore == null)
|
|
{
|
|
_log.WarnFormat("HIS-NORD: Core not found for notification id {0}", visitIdResponse.NotificationId);
|
|
}
|
|
else
|
|
{
|
|
if (!answerCore.IsTransit)
|
|
answerCore.VisitId = visitIdResponse.VisitId;
|
|
else
|
|
answerCore.TransitId = visitIdResponse.VisitId;
|
|
answerCore.BSMDStatusInternal = MessageCore.BSMDStatus.RESPONDED;
|
|
DBManager.Instance.Save(answerCore);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_log.WarnFormat("{0} ANSWER parsed, but MessageCoreId is no Guid: {1}",
|
|
Path.GetFileName(answerFile), visitIdResponse.ClientRequestId);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_log.WarnFormat("Client request id is null in {0}", answerFile);
|
|
}
|
|
|
|
// archive file
|
|
File.Move(answerFile, Path.Combine(Properties.Settings.Default.AnswerArchiveDir, Path.GetFileName(answerFile)));
|
|
}
|
|
}
|
|
}
|
|
|
|
internal static VisitIdResponse ReadVisitId (string filename)
|
|
{
|
|
VisitIdResponse visitIdResponse = null;
|
|
|
|
try
|
|
{
|
|
XmlSerializer serializer = new XmlSerializer(typeof(bsmd.hisnord.dataset));
|
|
using (FileStream fs = new FileStream(filename, FileMode.Open))
|
|
{
|
|
// aus dem Gewühl die Antwort fischen..
|
|
dataset aDataSet = (dataset)serializer.Deserialize(fs);
|
|
if (aDataSet != null)
|
|
{
|
|
for (int i = 0; i < aDataSet.Items.Length; i++)
|
|
{
|
|
if (aDataSet.Items[i] is Envelope)
|
|
{
|
|
Envelope anEnvelope = (Envelope)aDataSet.Items[i];
|
|
if (anEnvelope.Body.Length > 0)
|
|
{
|
|
visitIdResponse = anEnvelope.Body[0].VisitIdResponse;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_log.ErrorFormat("Exception occurred during deserialization: {0}", ex.Message);
|
|
|
|
}
|
|
|
|
return visitIdResponse;
|
|
}
|
|
|
|
}
|
|
}
|