git_bsmd/nsw/Source/bsmd.dbh/Response.cs
Daniel Schick f4b3d3caf0 Stand nach Live-Schaltung (noch keine Übermittlung Richtung DBH/Dakosy)
Aktiv ist Herberg FormService und der Report Generator
30.Mai 2015
2015-05-30 18:56:16 +00:00

136 lines
5.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());
}
*/
_log.Debug(aResponse.Serialize());
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 error = new MessageError();
error.ErrorText = aResponse.Messages[i].Text;
_log.WarnFormat("Error received for {0}: {1}", aResponse.Messages[i].Type, error.ErrorText);
break;
case dbh.response.RootMessageType.VIOLATION:
MessageViolation violation = new MessageViolation();
violation.ViolationText = aResponse.Messages[i].Text;
_log.WarnFormat("Violation received for {0}: {1}", aResponse.Messages[i].Type, violation.ViolationText);
break;
case dbh.response.RootMessageType.WARNING:
_log.InfoFormat("WARNING received for {0}: {1}", aResponse.Messages[i].Type, aResponse.Messages[i].Text);
break;
case dbh.response.RootMessageType.INFO:
default:
_log.InfoFormat("INFO received for {0}: {1}", aResponse.Messages[i].Type, aResponse.Messages[i].Text);
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;
aMessage.MessageCore.BSMDStatusInternal = MessageCore.BSMDStatus.PREPARE;
DBManager.Instance.Save(aMessage.MessageCore);
break;
case dbh.response.RootType.TRANSIT:
aMessage.MessageCore.TransitId = aResponse.TransitId;
aMessage.MessageCore.BSMDStatusInternal = MessageCore.BSMDStatus.PREPARE;
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.ReceivedAt = DateTime.Now;
aMessage.InternalStatus = Message.BSMDStatus.RESPONSE_RECEIVED;
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");
}
}
}
}