// // 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.TryParse(aResponse.SenderReference, 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; break; case dbh.response.RootType.TRANSIT: aMessage.MessageCore.TransitId = aResponse.TransitId; break; case dbh.response.RootType.CANCEL: break; case dbh.response.RootType.RESET: break; case dbh.response.RootType.DATA: break; } //aMessage.Status = Message.MessageStatus. 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"); } } } }