125 lines
4.7 KiB
C#
125 lines
4.7 KiB
C#
//
|
|
// Class: Response
|
|
// Current CLR: 4.0.30319.34209
|
|
// System: Microsoft Visual Studio 10.0
|
|
// Author: dani
|
|
// Created: 3/1/2015 8:12:08 PM
|
|
//
|
|
// Copyright (c) 2015 Informatikbüro Daniel Schick. All rights reserved.
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using bsmd.database;
|
|
using log4net;
|
|
using System.IO;
|
|
using System.Xml.Serialization;
|
|
|
|
namespace bsmd.dbh
|
|
{
|
|
public class Response
|
|
{
|
|
|
|
private static ILog _log = LogManager.GetLogger("dbh Response");
|
|
|
|
public static void ProcessResponse(response.Root aResponse, string connectionString)
|
|
{
|
|
_log.InfoFormat("processing message type {0}, version {1}", aResponse.Type, aResponse.Version);
|
|
XmlSerializer serializer = new XmlSerializer(typeof(response.Root));
|
|
using(StringWriter textWriter = new StringWriter())
|
|
{
|
|
serializer.Serialize(textWriter, aResponse);
|
|
_log.Debug(textWriter.ToString());
|
|
}
|
|
|
|
if (DBManager.Instance.Connect(connectionString))
|
|
{
|
|
|
|
if (aResponse.Messages != null)
|
|
{
|
|
// Status zu den jeweiligen Nachrichten. Bei uns sollte die Anzahl hier immer 1 sein, da wir die Dinger
|
|
// einzeln verschicken.
|
|
for (int i = 0; i < aResponse.Messages.Count; i++)
|
|
{
|
|
_log.InfoFormat("message {0} type {1}: {2}", i,
|
|
aResponse.Messages[i].Type,
|
|
aResponse.Messages[i].Text ?? "null");
|
|
switch (aResponse.Messages[i].Type)
|
|
{
|
|
case dbh.response.RootMessageType.ERROR:
|
|
MessageError messageError = new MessageError();
|
|
messageError.ErrorText = aResponse.Messages[i].Text;
|
|
// messageError.ErrorCode =
|
|
|
|
|
|
break;
|
|
case dbh.response.RootMessageType.VIOLATION:
|
|
|
|
|
|
break;
|
|
case dbh.response.RootMessageType.WARNING:
|
|
case dbh.response.RootMessageType.INFO:
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
Guid messageId;
|
|
if (!Guid.TryParseExact(aResponse.SenderReference, "N", out messageId))
|
|
{
|
|
_log.WarnFormat("SenderReference {0} is not a guid, skipping message processing!", aResponse.SenderReference);
|
|
return;
|
|
}
|
|
DatabaseEntity dbEntity = DBManager.Instance.GetMessageById(messageId);
|
|
if ((dbEntity != null) && (dbEntity.MessageCore != null))
|
|
{
|
|
Message aMessage = null;
|
|
if (dbEntity.GetType().IsAssignableFrom(typeof(Message)))
|
|
aMessage = (Message)dbEntity;
|
|
else
|
|
aMessage = dbEntity.MessageHeader;
|
|
|
|
switch (aResponse.Type)
|
|
{
|
|
case dbh.response.RootType.VISIT:
|
|
// neue VISIT - ID
|
|
aMessage.MessageCore.VisitId = aResponse.VisitId;
|
|
DBManager.Instance.Save(aMessage.MessageCore);
|
|
break;
|
|
case dbh.response.RootType.TRANSIT:
|
|
aMessage.MessageCore.TransitId = aResponse.TransitId;
|
|
DBManager.Instance.Save(aMessage.MessageCore);
|
|
break;
|
|
case dbh.response.RootType.CANCEL:
|
|
|
|
break;
|
|
case dbh.response.RootType.RESET:
|
|
|
|
break;
|
|
case dbh.response.RootType.DATA:
|
|
|
|
break;
|
|
}
|
|
|
|
//aMessage.Status = Message.MessageStatus.
|
|
aMessage.ReceivedAt = DateTime.Now;
|
|
aMessage.InternalStatus = Message.BSMDStatus.RESPONDED;
|
|
DBManager.Instance.Save(aMessage);
|
|
}
|
|
else
|
|
{
|
|
_log.ErrorFormat("no entry found in DB for sender reference {0}", messageId);
|
|
}
|
|
DBManager.Instance.Disconnect();
|
|
}
|
|
else
|
|
{
|
|
_log.Fatal("cannot connect to database");
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|