From fa57cc3b9dee15e2303e770d902bd5e5d75ae15e Mon Sep 17 00:00:00 2001
From: Tom Wiesing <tkw01536@gmail.com>
Date: Sun, 2 Aug 2015 14:45:28 +0200
Subject: [PATCH] Clean rewrite

---
 SallyConnect/DotNetSallyClient.cs       | 148 +++++---
 SallyConnect/SallyDocument.cs           | 485 ++++++++++++++----------
 SallyConnect/TestUnit.cs                |  14 +-
 SallyConnect/bin/Debug/SallyConnect.exe | Bin 13312 -> 13824 bytes
 SallyConnect/bin/Debug/SallyConnect.pdb | Bin 30208 -> 32256 bytes
 SallyConnect/obj/Debug/SallyConnect.exe | Bin 13312 -> 13824 bytes
 SallyConnect/obj/Debug/SallyConnect.pdb | Bin 30208 -> 32256 bytes
 7 files changed, 380 insertions(+), 267 deletions(-)

diff --git a/SallyConnect/DotNetSallyClient.cs b/SallyConnect/DotNetSallyClient.cs
index cec0cb9..bd12983 100644
--- a/SallyConnect/DotNetSallyClient.cs
+++ b/SallyConnect/DotNetSallyClient.cs
@@ -15,42 +15,86 @@ namespace ConnectToSally
     /// </summary>
     class DotNetSallyClient
     {
-        protected static TimeSpan receiveTimeout = TimeSpan.FromSeconds(10);
+
+        #region Class Variables
+        /*
+        * Connection Properties
+        */
 
         /// <summary>
-        /// A logger so that we can write things to the console. 
+        /// Address this DotNetSallyClient connects to. 
         /// </summary>
-        private static readonly ILog logger = LogManager.GetLogger(typeof(DotNetSallyClient));
+        public string address { get; private set; }
 
         /// <summary>
-        /// Username for the connection. 
+        /// Username used to connect to Sally.  
         /// </summary>
         public string user { get; private set; }
 
         /// <summary>
-        /// Password for the connection. 
+        /// Password used to connect to Sally. 
         /// </summary>
         public string password { get; private set; }
 
-        /// <summary>
-        /// Address for the connection. 
-        /// </summary>
-        public string address { get; private set; }
+        /*
+        * Connection State
+        */
 
         /// <summary>
         /// Connection session variable
         /// </summary>
-        public ISession session { get; private set; }
+        private ISession session { get; set; }
 
         /// <summary>
         /// Connection variable
         /// </summary>
-        public IConnection connection { get; private set; }
+        private IConnection connection { get; set; }
+
+        /*
+        * Logger
+        */
+
+        /// <summary>
+        /// A logger so that we can write things to the console. 
+        /// </summary>
+        private static readonly ILog logger = LogManager.GetLogger(typeof(DotNetSallyClient));
+
+
+
+        #endregion
+
+        #region Connection Start
+        /// <summary>
+        /// Constructs a new DotNetSallyClient and establishes a connection. 
+        /// </summary>
+        /// <param name="address">Adress to connect to. </param>
+        /// <param name="user">Username to connect with. </param>
+        /// <param name="password">Password to connect with. </param>
+        public DotNetSallyClient(string address= "activemq:tcp://localhost:61616", string user="karaf", string password="karaf")
+        {
+
+            // store connection params
+            this.address = address;
+            this.user = user;
+            this.password = password;
+
+            BasicConfigurator.Configure(); // ???
+
+            // try to connect
+            if (!connect())
+            {
+                logFatal("Could not start connection");
+                return; 
+            }
+
+            logInfo("Started connection");
+        }
 
         /// <summary>
         /// Starts the connection to Sally. 
         /// </summary>
-        protected bool startConnection()
+        /// <returns>If the connection was a success</returns>
+        protected bool connect()
         {
             // set up a URI and get ready for connecting
             Uri connecturi = new Uri(this.address);
@@ -62,13 +106,13 @@ namespace ConnectToSally
                 this.connection = connectFactory.CreateConnection(this.user, this.password);
 
                 //create a session
-                this.session = this.connection.CreateSession(); 
+                this.session = this.connection.CreateSession();
 
                 //and get everything running
                 this.connection.Start();
 
                 // we have started the connection. 
-                return this.connection.IsStarted; 
+                return this.connection.IsStarted;
             }
 
             // catch exceptions so that we do not crash
@@ -84,60 +128,64 @@ namespace ConnectToSally
             //nope something went wrong. 
             return false;
         }
+        #endregion
 
+        #region Connection Getters
         /// <summary>
-        /// Starts a DotNetSallyClient object with a session and connection with Sally.
+        /// returns the session of this SallyClient. 
         /// </summary>
-        /// <param name="address">Adress to connect to. </param>
-        /// <param name="user">Username to connect with. </param>
-        /// <param name="password">Password to connect with. </param>
-        public DotNetSallyClient(string address= "activemq:tcp://localhost:61616", string user="karaf", string password="karaf")
-        {
-
-            // store connection params
-            this.address = address;
-            this.user = user;
-            this.password = password;
+        /// <returns></returns>
+        public ISession getSallySession(){
 
-            //set up the logger. 
-            BasicConfigurator.Configure();
-            if (!startConnection())
-            {
-                // if we could not start the connection, we should complain. 
-                Console.WriteLine("DotNetSallyClient <" + address + ">: Could not start connection");
-                logger.Fatal("DotNetSallyClient <" + address + ">: Could not start connection");
-                return; 
+            // if there is no connection, we can not return a session 
+            if (this.connection == null || !this.connection.IsStarted) {
+                throw new Exception(logFatal("No connection started yet. Start a connection and try again."));
             }
-            
-            // we're done for now. 
-            Console.WriteLine("DotNetSallyClient <"+ address + ">: Started connection");
-        }
 
+            // we can now return it. 
+            return this.session;
+        }
+        #endregion
 
+        #region Logging
         /// <summary>
-        /// returns the session of this SallyClient. 
+        /// Generates a log message
         /// </summary>
+        /// <param name="message">Message content</param>
         /// <returns></returns>
-        public ISession getSallySession(){
+        private string logMessage(string message)
+        {
+            return "DotNetSallyClient <" + address + ">: " + message;
+        }
 
-            // if there is no connection, we can not return it. 
-            if (!this.connection.IsStarted) {
-                throw new Exception("DotNetSallyClient <" + address + ">: No connection started yet. Start a connection and try again.");
-            }
+        /// <summary>
+        /// Logs an info message to console and to the log. 
+        /// </summary>
+        /// <param name="message"></param>
+        private string logInfo(string message)
+        {
+            string msg = logMessage(message);
 
-            //and return it. 
-            return this.session;
+            logger.Info(msg);
+
+            return msg; 
         }
 
         /// <summary>
-        /// Registers a document with this Sally Client. 
+        /// Logs a fatal message to console and to the log. 
         /// </summary>
-        /// <param name="doc"></param>
-        public void registerDocument(SallyDocument doc)
+        /// <param name="message"></param>
+        private string logFatal(string message)
         {
-            //just call the document method to do this. 
-            doc.registerWith(this);
+            string msg = logMessage(message);
+
+            logger.Fatal(msg);
+
+            return msg;
         }
 
+        #endregion
+
+
     }
 }
diff --git a/SallyConnect/SallyDocument.cs b/SallyConnect/SallyDocument.cs
index e29e245..dcdc9bc 100644
--- a/SallyConnect/SallyDocument.cs
+++ b/SallyConnect/SallyDocument.cs
@@ -1,328 +1,403 @@
 using System;
 using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
 
-using SallySchemas;
-using Apache.NMS;
-using Apache.NMS.Util;
+using ConnectToSally;
 using System.Xml;
 using System.Xml.Serialization;
 using System.IO;
-using ConnectToSally;
+
 using log4net;
 
+using Apache.NMS;
+using Apache.NMS.Util;
+using SallySchemas; 
+
 namespace SallyConnect
 {
+
+    /// <summary>
+    /// Delegate to handle SallyMessages
+    /// </summary>
+    /// <param name="msg"></param>
+    /// <param name="decoded"></param>
+    public delegate void SallyResponseHandler(IMessage msg, Object decoded);
+
     class SallyDocument
     {
-        /// <summary>
-        /// The name of the sally queue we want to subscribe to
-        /// </summary>
-        public string sallyQueue { get; private set; }
+
+        #region Constructor
 
         /// <summary>
-        /// A boolean stating if we are subscribed to the given SallyQueue
+        /// the SallyClient associated to this document. 
         /// </summary>
-        public bool subscribedToQueue { get; private set; }
+        public DotNetSallyClient client { get; private set;  }
 
         /// <summary>
-        /// The system environment ID used by Sally. 
+        /// The environmentID of this Document
         /// </summary>
-        public string environmentID { get; private set; }
+        public string environmentID { get; private set;  }
 
         /// <summary>
-        /// Interfaces implemented by this client. 
+        /// The interfaces supported by this Document
         /// </summary>
         public string[] interfaces { get; private set; }
 
-        /// <summary>
-        /// Messaging session
-        /// </summary>
-        private ISession session { get; set; }
+        public SallyDocument(DotNetSallyClient client, string environmentID, string[] interfaces)
+        {
+            // connect to the client
+            this.client = client;
+
+            // set up environment Id and interfaces
+            this.environmentID = environmentID;
+            this.interfaces = interfaces;
+        }
+
+        #endregion
 
+        #region Handlers
 
         /// <summary>
-        /// Messaging producer
+        /// Contains all doc Queue handlers
         /// </summary>
-        private IMessageProducer sender { get; set; }
+        private Dictionary<int, Tuple<Type, SallyResponseHandler>> handlers = new Dictionary<int, Tuple<Type, SallyResponseHandler>>();
 
         /// <summary>
-        /// A logger for this document. 
+        /// contains the number of handlers (for id purposes)
         /// </summary>
-        private static readonly ILog logger = LogManager.GetLogger(typeof(SallyDocument));
+        private int handler_count = 0;
 
         /// <summary>
-        /// Represents a Sally Client. 
+        /// registers a handler for a specific type of message. 
         /// </summary>
-        /// <param name="environmentID">Environment ID to use when registering with Sally. </param>
-        /// <param name="interfaces">A list of interfaces this client should implement. </param>
-        public SallyDocument(string environmentID, string[] interfaces)
+        /// <param name="T"></param>
+        /// <param name="handler"></param>
+        /// <returns></returns>
+        public int handleType(Type T, SallyResponseHandler handler)
         {
+            int new_handler_id = handler_count++;
 
-            // set up basic variables. 
-            this.environmentID = environmentID;
-            this.interfaces = interfaces;
-            this.subscribedToQueue = false;
+            handlers.Add(new_handler_id, new Tuple<Type, SallyResponseHandler>(T, handler));
 
-            // generate a new unique client name. 
-            this.sallyQueue = "dotnet_client_" + Guid.NewGuid().ToString();
+            return new_handler_id; 
         }
 
-        #region Initial register With Sally
 
         /// <summary>
-        /// Registers this document with a SallyClient
+        /// removes a certain handler. 
         /// </summary>
-        /// <param name="dns">SallyClient to register with</param>
-        public void registerWith(DotNetSallyClient dns)
+        /// <param name="id"></param>
+        /// <returns></returns>
+        public bool removeHandler(int id)
         {
-            //load the session. 
-            this.session = dns.getSallySession();
-
-            // build the message to send
-            string xmlMessage = Apache.NMS.Util.XmlUtil.Serialize(getCoreRegisterDocument());
-            ITextMessage regRequest = session.CreateTextMessage(xmlMessage);
-
-            //be ready to respond on the document queue
-            registerDocQueueListener();
-
-            // send the sally registration
-            sendReceive(SessionUtil.GetDestination(this.session, "queue://sally_register"), regRequest);
+            if(handlers.ContainsKey(id))
+            {
+                return handlers.Remove(id); 
+            } else
+            {
+                return false; 
+            }
         }
 
         /// <summary>
-        /// Registers to the response Queue so that we can send messages. 
+        /// calls all handlers. 
         /// </summary>
-        /// <param name="responseQueue">Name of the response queue</param>
-        protected void registerToResponseQueue(String responseQueue)
+        /// <param name="msg"></param>
+        private void handleMessage(IMessage msg)
         {
-            // create the destination
-            IDestination responseQDestination = SessionUtil.GetDestination(this.session, responseQueue);
 
-            // and store the sender
-            this.sender = session.CreateProducer(responseQDestination);
+            // turn the message into a string. 
+            System.Byte[] content = (msg as IBytesMessage).Content;
+            String xmlMsg = System.Text.Encoding.Default.GetString(content);
 
-            // we are now ready to send messages. 
-            this.subscribedToQueue = true;
+            // the object we want to decode. 
+            object decoded;
 
-            Console.WriteLine("SallyDocument <" + environmentID + ">: Registered to document queue");
-        }
+            // iterate over all the handlers
+            foreach (KeyValuePair<int, Tuple<Type, SallyResponseHandler>> entry in handlers)
+            {
+                // get the handler
+                Tuple<Type, SallyResponseHandler> handler = entry.Value;
 
-        /// <summary>
-        /// Builds a request to register this document with Sally
-        /// </summary>
-        /// <returns>the request</returns>
-        protected SallySchemas.RegisterClientRequest getCoreRegisterDocument()
-        {
+                // try building a reader
+                XmlSerializer serializer = new XmlSerializer(handler.Item1);
+                XmlReader reader = XmlReader.Create(new StringReader(xmlMsg));
 
-            //create the request
-            SallySchemas.RegisterClientRequest reg = new RegisterClientRequest();
+                // try to decode the object
+                try
+                {
+                    decoded = serializer.Deserialize(reader);
+                } catch (InvalidOperationException) { continue;
+                } catch (XmlException) { continue; }
 
-            // and set up the parameters. 
-            reg.EnvironmentID = this.environmentID;
-            reg.ListenQueue = this.sallyQueue;
-            reg.Schemas = this.interfaces;
+            // if it is null, continue
+            if (decoded == null){ continue; }
 
+                // and try to handle it. 
+                handler.Item2(msg, decoded); 
+            }
 
-            // and return it. 
-            return reg;
         }
+     #endregion
 
-        #endregion
-
-
-        #region Heartbeat Responding
+        #region Send & Receive Helpers
 
         /// <summary>
-        /// Registers a listener for the document queue
+        /// responds to a certain message. 
         /// </summary>
-        /// <param name="docName"></param>
-        /// <param name="interfaces"></param>
-        protected void registerDocQueueListener()
+        /// <param name="msg"></param>
+        /// <param name="response"></param>
+        /// <param name="onResponse"></param>
+        public void respondToMessage(IMessage msg, IMessage response, MessageListener onResponse = null)
         {
-            //the queue
-            IDestination docQueue = SessionUtil.GetDestination(this.session, "queue://" + this.sallyQueue);
+            // create a temporary queue and consumer
+            ITemporaryQueue tempQueue = this.client.getSallySession().CreateTemporaryQueue();
+            IMessageConsumer tempQueueConsumer = this.client.getSallySession().CreateConsumer(tempQueue);
 
-            // build and register a listener
-            IMessageConsumer regConsumer = this.session.CreateConsumer(docQueue);
-            regConsumer.Listener += new MessageListener(OnDocQueueMessage);
+            // handle responses if needed
+            if(onResponse != null)
+            {
+                tempQueueConsumer.Listener += onResponse;
+            }
 
-            Console.WriteLine("SallyDocument <" + environmentID + ">: Registered document queue listener");
+            // set the reply to and ids for the message
+            response.NMSReplyTo = tempQueue;
+            response.NMSCorrelationID = msg.NMSCorrelationID;
+
+            // finally make a consumer and send the message. 
+            IMessageProducer producer = this.client.getSallySession().CreateProducer(msg.NMSReplyTo);
+            producer.Send(response);
         }
 
         /// <summary>
-        /// Handler for messages received on the document queue
+        /// Sends a message. 
         /// </summary>
-        /// <param name="receivedMsg">message received</param>
-        protected void OnDocQueueMessage(IMessage receivedMsg)
+        /// <param name="msg"></param>
+        /// <param name="to"></param>
+        /// <param name="onResponse"></param>
+        public void sendMessage(IMessage msg, IDestination to, MessageListener onResponse = null)
         {
 
-            if (receivedMsg == null)
+            // create a temporary queue and consumer
+            ITemporaryQueue tempQueue = this.client.getSallySession().CreateTemporaryQueue();
+            IMessageConsumer tempQueueConsumer = this.client.getSallySession().CreateConsumer(tempQueue);
+
+            // handle responses if needed
+            if (onResponse != null)
             {
-                // nothing to do ...
-                logger.Warn("No ITextMessage...");
+                tempQueueConsumer.Listener += onResponse;
+                msg.NMSReplyTo = tempQueue; 
             }
-            else
-            {
-                string res_xml = Utilities.getMessageContent(receivedMsg, "HeartbeatRequest");
 
-                // check if we have indeed received a message. 
-                if (res_xml == null)
-                {
-                    logger.Warn("Unknown message type..");
-                    Console.WriteLine("Unknown message type..");
-                    return; 
-                } else
-                {
-                    Console.WriteLine("SallyDocument <" + environmentID + ">: Received HeartbeatRequest");
-                    HeartbeatRequest res = Utilities.deserialize<HeartbeatRequest>(res_xml);
-                    heartBeartResponder(receivedMsg);
-                }
-            }
+            // set the reply to and ids for the message
+            msg.NMSDestination = to;
+
+            // finally make a consumer and send the message. 
+            IMessageProducer producer = this.client.getSallySession().CreateProducer(to);
+            producer.Send(msg);
+        }
+        public void sendMessage(IMessage msg, MessageListener onResponse = null)
+        {
+            // send the message to the send Queue
+            sendMessage(msg, createDestination(sendQueueId), onResponse); 
         }
 
+
         /// <summary>
-        /// Responds to a heart beat request
+        /// creates a message to be sent with Sally
         /// </summary>
-        /// <param name="receivedHeartBeat"></param>
-        protected void heartBeartResponder(IMessage receivedHeartBeat)
+        /// <param name="obj"></param>
+        /// <returns></returns>
+        public IMessage createMessage(object obj)
         {
-            // create the heartbeatreponse
-            SallySchemas.HeartbeatResponse hbResponseContent = new HeartbeatResponse();
-
-            // and serialise it. 
-            ITextMessage hbResponse = this.session.CreateTextMessage(Utilities.serialize<HeartbeatResponse>(hbResponseContent));
+            return this.client.getSallySession().CreateTextMessage(
+                Apache.NMS.Util.XmlUtil.Serialize(obj)
+            ); 
+        }
 
-            // and respond to it. 
-            replyAndReceive(receivedHeartBeat, hbResponse);
 
-            Console.WriteLine("SallyDocument <" + environmentID + ">: Send HeartbeatResponse");
+        /// <summary>
+        /// Returns a destination
+        /// </summary>
+        /// <param name="queue"></param>
+        /// <returns></returns>
+        public IDestination createDestination(string queue)
+        {
+            return SessionUtil.GetDestination(this.client.getSallySession(), "queue://" + queue);
         }
 
         /// <summary>
-        /// Replies to a message and handles the response. 
+        /// Creates a listener for a message. 
         /// </summary>
-        /// <param name="destination">Destination to send message to. </param>
-        protected void replyAndReceive(IMessage inResponseTo, IMessage message)
+        /// <param name="T"></param>
+        /// <param name="handler"></param>
+        /// <returns></returns>
+        public MessageListener createListener(Type T, SallyResponseHandler handler)
         {
-            // create a temporary queue and consumer
-            ITemporaryQueue tempQueue = this.session.CreateTemporaryQueue();
-            IMessageConsumer tempQueueConsumer = this.session.CreateConsumer(tempQueue);
+            return new MessageListener(msg =>
+            {
+                logInfo("hello!!!");
+                //read the message text
+                System.Byte[] content = (msg as IBytesMessage).Content;
+                String xmlMsg = System.Text.Encoding.Default.GetString(content);
+
+                // deserialse the message
+                XmlSerializer serializer = new XmlSerializer(T);
+                XmlReader reader = XmlReader.Create(new StringReader(xmlMsg));
+
+                // and call the handler
+                handler(msg, serializer.Deserialize(reader)); 
+            });
+        }
 
-            // handle the response with the onResponseQueueMessage
-            tempQueueConsumer.Listener += new MessageListener(OnResponseQueueMessage);
+        #endregion
 
-            // set the reply to and ids for the message
-            message.NMSReplyTo = tempQueue;
-            message.NMSCorrelationID = inResponseTo.NMSCorrelationID;
+        #region Registration
 
-            // finally make a consumer and send the message. 
-            IMessageProducer producer = this.session.CreateProducer(inResponseTo.NMSReplyTo);
-            producer.Send(message);
+        /// <summary>
+        /// Contains the ID of the send Queue
+        /// </summary>
+        private string sendQueueId; 
 
-            Console.WriteLine("SallyDocument <" + environmentID + ">: Replying with CorrelationID " + inResponseTo.NMSCorrelationID.ToString());
-        }
+        /// <summary>
+        /// Registers this document with Sally and starts listening to Heartbeats and messages. 
+        /// </summary>
+        /// <param name="queueID"></param>
+        public void register(String queueID = null)
+        {
 
+            // if we do not have a queueId, then we generate one. 
+            if(queueID == null)
+            {
+                queueID = "dotnet_client_" + Guid.NewGuid().ToString();
+            }
 
-        #endregion 
+            //register to the Queue#
+            IDestination docQueue = SessionUtil.GetDestination(this.client.getSallySession(), "queue://" + queueID);
 
-        #region Message Send & Receive
+            // build and register a listener
+            IMessageConsumer regConsumer = this.client.getSallySession().CreateConsumer(docQueue);
+            regConsumer.Listener += new MessageListener(handleMessage);
+
+            // register as a listener
+            logInfo("Registered document queue listener. ");
+
+            //create a request to send
+            RegisterClientRequest regRequest = new RegisterClientRequest();
+            regRequest.ListenQueue = queueID;
+            regRequest.Schemas = interfaces;
+            regRequest.EnvironmentID = environmentID;
+
+            // prepare to send and receive nmessage
+            IMessage message = createMessage(regRequest);
+            IDestination dest = createDestination("sally_register");
+            MessageListener handler = createListener(
+                typeof(RegisterClientResponse), 
+                new SallyResponseHandler(_handleSallyRegister)
+            ); 
+
+            // send it. 
+            sendMessage(message, dest, handler);
+            logInfo("Sent registration message");
+        }
 
         /// <summary>
-        /// Sends a message to a destionation and handles the response. 
+        /// Handles the registration
         /// </summary>
-        /// <param name="destination">Destination to send message to. </param>
-        /// <param name="message">Message to send. </param>
-        protected void sendReceive(IDestination destination, IMessage message)
+        /// <param name="msg"></param>
+        /// <param name="decoded"></param>
+        private void _handleSallyRegister(IMessage msg, object decoded)
         {
-            // create a temporary queue and consumer
-            ITemporaryQueue tempQueue = this.session.CreateTemporaryQueue();
-            IMessageConsumer tempQueueConsumer = this.session.CreateConsumer(tempQueue);
+            // get the response
+            RegisterClientResponse response = (RegisterClientResponse)decoded;
+            logInfo("Got registration response");
 
-            // handle the response with the onResponseQueueMessage
-            tempQueueConsumer.Listener += new MessageListener(OnResponseQueueMessage);
+            // listen to heart beats
+            logInfo("Registering heartbeat responder...");
+            handleType(typeof(HeartbeatRequest), new SallyResponseHandler(_handleHeartBeat));
 
-            // set the reply to and ids for the message
-            message.NMSReplyTo = tempQueue;
-            message.NMSCorrelationID = Guid.NewGuid().ToString();
-
-            // finally make a consumer and send the message. 
-                IMessageProducer producer = this.session.CreateProducer(destination);
-            producer.Send(message);
-
-            Console.WriteLine("SallyDocument <" + environmentID + ">: Sending message to "+destination.ToString());
+            // store the send Queue
+            sendQueueId = response.SendQueue; 
         }
+        #endregion
+
+        #region Heartbeats
 
         /// <summary>
-        /// The temporary one where sally gives back a queue in response for a document register request. Also used for other trivial sendReceives
+        /// Handles Heart Beats
         /// </summary>
-        /// <param name="receivedMsg"></param>
-        protected void OnResponseQueueMessage(IMessage receivedMsg)
+        /// <param name="msg"></param>
+        /// <param name="decoded"></param>
+        private void _handleHeartBeat(IMessage msg, object decoded)
         {
+            logInfo("Responding to heartbeat request");
 
-            Console.WriteLine("SallyDocument <" + environmentID + ">: Received response Queue message");
+            // i take your request
+            HeartbeatRequest request = (HeartbeatRequest)decoded;
 
-            if (receivedMsg == null)
-            {
-                // if there is no message, we have nothing to do
-                logger.Warn("No ITextMessage...");
-            }
-            else
-            {
-                // read the message content
-                string res_xml = Utilities.getMessageContent(receivedMsg, "RegisterClientResponse");
-
-                // and register to the response queue if possible. 
-                if(res_xml == null) {
-                    logger.Warn("SallyDocument <" + environmentID + ">: Unrecognised response Queue message");
-                    Console.WriteLine("SallyDocument < " + environmentID + " >: Unrecognised response Queue message");
-                } else {
-                    RegisterClientResponse res = Utilities.deserialize<RegisterClientResponse>(res_xml);
-                    registerToResponseQueue(res.SendQueue);
-                }
-            }
+            // and raise you a response
+            HeartbeatResponse response = new HeartbeatResponse();
+
+            // we send it
+            respondToMessage(msg, createMessage(response)); 
         }
 
         #endregion
 
-        public bool isRegistered() {
-            return this.subscribedToQueue;
+        #region Logging
+
+        /// <summary>
+        /// A logger for this document. 
+        /// </summary>
+        private static readonly ILog logger = LogManager.GetLogger(typeof(SallyDocument));
+        
+        /// <summary>
+        /// Generates a log message
+        /// </summary>
+        /// <param name="message">Message content</param>
+        /// <returns></returns>
+        private string logMessage(string message)
+        {
+            return "SallyDocument <" + environmentID + ">: " + message;
         }
 
         /// <summary>
-        /// Sends a message to sally. The wait parameter is used for debugging. 
+        /// Logs an info message to console and to the log. 
         /// </summary>
-        /// <param name="xmlMessage"></param>
-        /// <param name="wait"></param>
-        public void sendToSally(String xmlMessage, bool wait = false)
+        /// <param name="message"></param>
+        private string logInfo(string message)
         {
-            if (!this.subscribedToQueue)
-            {// we are not subscribed to a quenue yet, so we can not send anything. 
+            string msg = logMessage(message);
 
-                // in the debug case, we should wait for a second
-                // and try again. 
-                if (wait) {
-                    System.Threading.Thread.Sleep(1000);
-                    sendToSally(xmlMessage, false);
-                    return;
-                }
+            logger.Info(msg);
 
-                // otherwise die with a fatal message
-                logger.Fatal("Register to the queue from sally's response first...");
-                Console.WriteLine("Register to the queue from sally's response first...");
+            return msg;
+        }
 
-            }
-            else
-            {// we are subscribed => send the message. 
+        /// <summary>
+        /// Logs a warning message to console and to the log. 
+        /// </summary>
+        /// <param name="message"></param>
+        private string logWarn(string message)
+        {
+            string msg = logMessage(message);
 
-                this.sender.Send(xmlMessage);
-                Console.WriteLine("Sent a message on response queue..");
-            }
+            logger.Warn(msg);
 
+            return msg;
         }
 
+        /// <summary>
+        /// Logs a fatal message to console and to the log. 
+        /// </summary>
+        /// <param name="message"></param>
+        private string logFatal(string message)
+        {
+            string msg = logMessage(message);
 
+            logger.Fatal(msg);
+
+            return msg;
+        }
+        #endregion
     }
 }
diff --git a/SallyConnect/TestUnit.cs b/SallyConnect/TestUnit.cs
index 750dea6..57e9a0d 100644
--- a/SallyConnect/TestUnit.cs
+++ b/SallyConnect/TestUnit.cs
@@ -16,20 +16,10 @@ namespace SallyConnect
 
             // we first create the sally client. 
             DotNetSallyClient dns = new DotNetSallyClient("activemq:tcp://localhost:61616");//neptune.eecs.jacobs-university.de:61616
+            SallyDocument doc = new SallyDocument(dns, docName, interfaces);
 
-            //and then register a document to it. 
-            SallyDocument sD = new SallyDocument(docName, interfaces);
-            dns.registerDocument(sD); // register the document. 
-
-            //now just wait
-            Console.Read();
-            /*
-            System.Threading.Thread.Sleep(1000);
-            if (sD.isRegistered()){
-                sD.sendToSally("some message");
-            }
+            doc.register();
             Console.Read();
-             */
         }
     }
 }
diff --git a/SallyConnect/bin/Debug/SallyConnect.exe b/SallyConnect/bin/Debug/SallyConnect.exe
index 1c92bba4f62c567e51a3be106a985b72f599a84a..26b47960a945e96dfdd5e6a329a7c1099b117cd9 100644
GIT binary patch
delta 7674
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
YFiK$D%%}5<mC40wv!Ky?#)$^(0GVqv-T(jq

delta 7476
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
XGkr6k-Y-_BC6=27P2Mw3G++k+`V0sS

diff --git a/SallyConnect/bin/Debug/SallyConnect.pdb b/SallyConnect/bin/Debug/SallyConnect.pdb
index 25116f05e19c20881dc74717ac52700bc7d5e3d1..7537996ab4d3eae6bb5f7d1cecb8af104496b094 100644
GIT binary patch
literal 32256
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

literal 30208
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
CXr%Q3

diff --git a/SallyConnect/obj/Debug/SallyConnect.exe b/SallyConnect/obj/Debug/SallyConnect.exe
index 1c92bba4f62c567e51a3be106a985b72f599a84a..26b47960a945e96dfdd5e6a329a7c1099b117cd9 100644
GIT binary patch
delta 7674
zcmZq3Xvmq+p`_2bFO&fa9xx~|a5EY(Fz7HaFmONwoxCQl3S)dbnUPVQHOG^IL1wZd
zlg{KwMs+R^Ed~Y#1qKENoylE{+KhUWw=t?SnoPdOsHC9i1<~xmz`(%7z{+q$lYwD{
zJOcwW0~3QD0|VRSjoJoEa!l2X3=Aw<N=(ePV1^u1H4{t#%$OX&WL(d{z#weE#Nf}s
zz`)4BAjqU4$iTqGz`(?;!NkD8#=yj)!2+gPHP}G3h7bb-ml~4>4+8_6*gr-tHXVKj
zrXofLh5`)%1_m}YZ62l~a}bXo#M5GsHeg}s0y~pIkby~qk%57&SeSu<i;GRHSAc<m
zF|$~Nfq{#gfr*_-gPDPWjY)%*fq^Ywl!1Xug9~IK6O#rfNJI=I!T}b62#AB+36+#!
zVBq4pr@_m>nJ)=aCk2vYxF;;k!XU^36`E|wEL|@N_N5eqTOot66axbz$m`Y&ppXMQ
z4`h>$0Ft3%{}{Cy#ktsYgcz8LVnO}_`LbA=fq|=vNrRn%fsI?6fnAG1*novWhJk^B
zg@Hkkq3AjTLjlCEMgJKX3YaxyKt9%HU`x~jSt!lGz`zPp$i%F{$H2hGRmaA_z`~X<
z3vxBwKqdxU>f{jW!Y(i|FfeJzGca&zC@?T^HB9bj5}TaFqEvs5saTPLfvc8_fq{id
ztd<)@A>vjX9FQy;l3<!uLmEVDfqbFM0AhkdgQ*&%iJM(K0<4>zi>Vr97#lN7u@VCV
zSH3dX89dqy9H5j6@|Xq#0|PtQW7YK_rOf#%Adj=@2rxkOGUuy;Vq2S)K@1#j(gw^7
zOCXs+kb$|>ih+SKUk#*1L!E(vi!EORq#CL>Uz34>i&r~Qh*?96fq_eyg+Yi#LmR|m
z6=coVVPN1Y)&=p{*o*ZT80xt+^g%p!20=DK_Iv|S0%5qvp~i4eQH|lAEQiQHMqv&?
z4jpC&Z2>{nd_x8XE@qB=VX)tYm^F+T7`Sw&-QyQx{wK!Fz#yG(4D#$9Ek=+R8NwL&
zQW#j&z-cLrfiHuBMV*0xk%>W#A#Vx;KPYbs*BdY~WHT@@aDszFLkyIJc|n8;$a_o(
z0k(WokSAG1{xS1%>Tofzv*w$D>;feSa}a}tIo|>l+?F5?l1AoyE0C}?$Y&fZ`8FVF
zEpT2=WME*ZC(&XdxW&wD`Cxk)m|5~|L53pP$&wGTju~oQ90L<G6H_%00|SeO3IhWh
zi-sa71hp6#>cK7nWeF~{5Mb7@1G(EC6b{-9Y+Aww%nXVQ3=G_8>WbJIL0QKEl(ZdT
zilL<yD3S6oFbEc#fU*x8Q>_3f12Na~fhd+*eg=km76!I|Y^I>%#t9U@;9LqS>R1@w
zF)%Rjf-GYOB?2}<HXS8~B1uMu0u5(yiV<S}C#DBViQu9HWWN9-15zMhI1EV+8k_7)
z_5ax9VU|N8l&Q!ZWQP{0Tr740#~O3KD=2_Dm^7q7Ny81wkpOYrK^!Iy4P^!fHeRNp
zMvz`m5DT*~UC?J>U<BuRrhjbeAX|hO7}zva85r1vS(!KmSp-=%>cJ7gR5Tx?4{WCv
z#P^`8gAe3;mJ*OLTueom;Yyf_*qIm#K-r5;jp>2`k}Vo=TVz4*XJX6u02MBvh=-c1
z&A<Rk`hpBhMZQc71@#b9SV};qa20!k;(&>ni5=`85l~sh#sEsK$i-$a6R6k(`5vv<
z#3(g2LD62v3yN(VrDi>-1Y_1fR_Fx^Q5?l9vO1LFl?AnU1z8Cx?N}I`85kG@Kp`pK
zYtF#Hs47;pmWiQY5m(W6kpH=helsx?6j?GuiDGUB1~wiJcD7;}P>gblfC@S`1`Tge
zeX6Adt#`Gg4VV~889=6jJb<G_WCx`eE(UNx2Px-x7_?OwIP!fM7`ViZ`8e`@LFFN{
zh93h1mo}pqFQ*P01G_NGJp~4ie1A|PXBA}Cy})pfn?r}4Bj0#(3ztT{5XjOCtPBj&
z;G_jEOu3jqWhul8ZZ=3Ux)h`YTIvfMFfs_jsy(J2kPJ9?bAd88IIprWM1p9L*-X`-
zTw3JH3`=4t1->OxiO*CG%E(|B@F01Tm#Lbcfq{jYgA-hyLrQCHhRJ`pH0m3;85or7
z7#QAgGcarcv4cyBGV{`lL51-GaR!D6W(Ef3&|roiQs78qP<9XXbOF^o(hLj>SQr?T
zopSP%K#C!46~=JcMVy>$3=9mv7>yakz$HC{6Qp_rMLL5i0|SF40|U6-#11O%^da74
zU;-HmNg1F@9@MB}0GY!GF_?jY;Swu|4Js#}vz+E+V+dgdkqj)=ocs*0K`jslXO?(&
zHilDRay6K=W(A3`gGmK283h*CXIaC^#_)-`9z^wlg-Tgu+1ME3xpuL!F<fT`8GV4c
znv;z|gr%C3i{TjCeFiRuTK4-4d<<S}O<Y0@@oc-;xESiV?=!G5>|h7!dJZPnF@wad
zm_Xw5!KS6Nfn<FdzA~^em@$CZ!OXkZ>KQCJ8R{9>80;9nGKev#bGosMG5B+=23gO(
zi%pE-6#Hs6E`}Q%Ad4rkg2>fiwi1|RWxvlL#bCjm$H~TE$GD44ilLr4k5h_4of|~v
zGUsvfF*tLwvavA~vI}!@F-+tJnQ#y6EM8`iBb?cGvDLFNyky$N#>bGt(Zt2Y&<>Us
zVGHMGV{qcQ%D~1D2_`Qwf&4U`t(}dFVJZ{Ip!sa=Y+?+i%&S3h#E=3`0gT{C6JXfP
zmCx<S0OBz+GB7l7<Z|UQurmmOBlk8}E|((%J1A)|2rzWjgSmX5);EIy!!J&dBp-tT
z12dxl*f2*1J_Zv8Mux|XtC$!WHiF3{Fj>R6mWh#JD&s~bLxxI@txSvze;9W%F)}!V
zWsfuNWnyGd<2uO1$RNypiHVUxfN>R6B^$#lhO10$42wB#G1ap%aB|&a3IO#N7}_}W
zx%?Oy86v>EMh<H(kRuYoyf%*S9DWQ;44GhFBL@Sg00R?45t!G;p}^$Fz|2qu<~4HY
zG6^s+Gc-eaZ`oWKSQxsYyq|23m{=I5KzXz3*<UcRGR%Q;SF*olVr5tX=Cw(La(-rF
zV_*T*@eC~tRa{;SoD4g_yf%irY_6atk`gG~8yT{helc+}Xh3=59KV>j7y_WYI<{X-
z+zjPl-b9IL&i_n2AWaO+3?LioPcp)|#~4pDF*EZ)C66&4W8z{Kfb;e+i86~Y^n#6P
z<2cGC%`D0=70heoxWJ{rEXpts%xmM=$l%8y#;^>`Yvef0AiyBTupZ27<LKj5V-{!F
z4(2s-%;kJr&nV7t0L%rsMw?lJ;R}Sv;LB{nEX`n`401sm!&DAiW?6<5Ft3rppJ^(i
z9D|JtM6Qg<iCLau3zX-~<jbtYpr{Iwb7qQUR%Nh(@?x2inAI6lpgdLf4CZ<bhAB|)
z3yyqdO@<3lo*btDgEqq%HIOll44j<I%sLDz>JXkE7c;XSLkyG$3VZ{G7AOxC_=XH?
zpuCUlznF{|u0VO9s4!;u4dy|j!la%-1l%&7$Z(LYirIuA8O#HP1sj7YLk^fXje(K7
zf!UOSK@(*CG=`t7?aby3Hc;Mg);?wn6n&Oxycn>`W(IMFsf?hamyzKpE2v-wk@d(N
z5L-Zik-?rzK!AyXg;PL)nZb|=q;v}gnFi|XGDw2OquD^+X;ns$N(7skp%m0TV*sgS
zWLU!mk_A}_vIWkrXSf13=s379xsVei@d{kxFXjNT9pHvCGC+);#td>+5;I5^A|lU$
zECO;mL^hcXq-HDFuP`$~-pd7d*&%xC(Ou2RfazC=2n*N;{$Rg4g00^Mwg4g<&Bn<P
z$_c8~Lpj+PBpE_ExfnDVLOBH(48f!&m~;e_o?tQ%MAkDzf+&VWhEPsXhD<QK5KLBr
z$xa54aWff0Ii(mH!R(2Q5zHzKJHfIG8ACbE7!ERYvfDANWH`^}%CM4Ak(-TSC8I8*
z7egb1Ih!BDMn*a2Acl)z^*b5exe^&RGDvacF>GXLWXofy=VbiNRLpRaF`uJ`fd_1X
z2tz36QU)FdMMe;r%)N<$hv78qCWecQU%5Uo++>{0^_Af!qXXM-1|9}ePDVx<hL>D&
zj4BMfS*;mG7<3pM7!?^qIb9haGJ<@s$+(=^hf$I7Eo&&F2tyQuHKPoJAGa67N5=Wg
zYzzzQ85Xc+GA?A;!;#Mz$atEgg7F~(2S+{QLxxfYKZb`4T?_&Y4;g;4w=phcFy`oC
zjARsHn#%Z)L5RJc@h9VB)&-0U85S`uWd!+b6C)>+Ir|PqN5)XjlZ=Io){M^?GZ{hQ
zm&w?`D!`D*n8f*(F_UpVg8)M%V-c$#LnmWBNO~i~7xp}cjf^skJWQI58q6|Gnv9~%
zehfPqmvJjGX)?+%dNJ@ZNHWAS@iE9U%wpnWP-K|JB*f6lu#`!NVIr8E2`1MvEM-z)
zsAlMAQG}As3{zP27`PeMGV3u2Gi+nlV~}RJ%B;tr%y5rck3qYh;RCZCgE5%229wTU
z32%mP%z6yLV3BArnase)qQ{WUV8NotP|V=U;sCb55lVurNdU7Gp(IG80nBcMk|2=<
zVD>^N+00Nsh2;R4^8idfgpweokHKsPMv!k9p(IFL0nAo}k{}TWF#7-#NaX`C$-oR^
zD}YG{Fqr@*6&SP_!Wm*2G8v{YtYz525aY`@n{f@}LB{ippBaBLGBF7-X)u{FF)=VQ
zuz*{C_FPk$85meNL8KuQi2TbolbL~GE&DuX28JtKi<uc1jx&J77jmv(p1eZDu3n6R
zmw}N%oPn2ti9v#apMjA<l7XLri9w1%kb#jwnn94Eg<%#0FQXQtF%wGzsE7a+t1z4k
z8h?Rt7#J9wnBIVSj9}+*gDXpKru$GaCQyeM%no5{;sP;PKm&sy1_(Pb?E*KCSU?;o
zc4C4wnV?)KmB$HUu!F|I7#J9m89?O~14Am5X0WkKj*oZAEH21NtaQ#vEG{-OjyGVi
zNiIrFEJ^jrEG|jSOD(cXijOy7@JdfDiT5l?%{62QDJ{rJO)z5cPOS_}%qdL`NX#rs
zFk*1YOfJdH&r2+-OfX`AsWxJ;@y$;u%}KRmC@f7aP4#qPNT2*iRATaf(R9<`%HopL
zTs`OfoSam!-eNs>kd2wi48^H=DS==ODGWiWi75<@DJcvosmb{%lN-cBCJT$3OpX`#
zQnE?T$xO{FvCEE+cS=mo&df`9%S_ElVF*smOJT@OEy>8AyhdEr24tFVYH@L5dMZOk
zVqQv4DvSs5DvXztpAKUdr4|?D=cR<?PyQ=zE8?1$;+a>LpPkC!l$xHI2WC&Ukf@b|
zm=;o5kjmhkpO==IURspOke?R>)?GY#uY@*Z(c}jb;(WfPIVG9NiNz%@sX3|Xn?Fk&
zVdN@KEs2MO@?=A4Z7Fa7fkO@)tPEwKz-0(Z&CQ=&E$uq_qO`kOZgDz8Xi+9Zeo_{L
zV{v6(vU6fiPEulWHbXLuk&~Z3SyRSga*<4+CddLm-(Z*2;*!j~L{RK7Ks<~r;+|UK
zGWoJh{A4FtgYbyl9M_8E)B><t&%Cn4oXiyeg480gW`s;metLLfQ6AW_e!js$sRcQe
zA^8kY`(WIh{B+N}w0wq={K?B@ohOUP$!G*8=HygDLnqY(92G?jMX9;@WpExiNGI#c
zIk1A=I=Mzp#v&dpm<rXM4oaCIZBRx;ZccD&QD$OJW>sntgL`U;YhGzC$j$kam&o}}
z{wr6lVq<3#A77G@S<HZ$=%7iWX!3G-#YCu09;t~%B~Gb{B@F&aS*gh-pb!U9U>7*&
z=jDMo$xu2cKiwoRwS*xgwYVfSFS7(3EH0^OiKRIu44&Y43Q8>oaf(ulC-W#sYQ{s-
zEjYlSOt8r=`N^fZsd*3+oJ)&}CWk60aYH;`6rY@5I=Mu_K;AdMEY&Zyq6Frb5D?or
zKd&S)Gq2b?b@E9C4@T3;4vMCXs*`IJRaq+i81g5_DvD1&q!>S0P*FpI-HyQuG?yV*
z$WY3V3dU9p`V9J$<&_i|Jtsd?a$(a0$;(a-P?8NX4rWMY$YUsBP+%xxNM%T8$YdyH
zC}AjKNMtBs$YjW8$YW4o$Yn@nC}t>TNMuN7NM&F!c4x@Pr(<%Xs&GAnYY>uosSHI7
znGAUh=?n@C84Rfmi3~*yB@9Vm7R>Hqh61pCDGVUhdJG`QU=K0{Ap<j`gdrb~Nreoh
zoM0!HFfhnZc2Jd@oS-&SSrBA#4nqz@K7%3{GB8ZmdY*V+_P6^o!=gXUCXLaPdDP|W
zJ(<}VnOGSZgc{Crv$G1t3MDcLr3z)TD=;w%#mdUCDKH6z^6{}KFbD-QD=;uID=_e}
zFfcOmv9dEU2?a8<GxD)Bu<(HZ3p*1?AtR#<2Lq!}L#trJLv{v6p-7>IR(?^TS|$!r
zp@v2#p@vo=9#(c{4h{}3QK5!<s0heDVFqDF7Ir2kCRPPTCSeA1c1~GVJ{eKLhE8O?
zqJj;*D15l7LJbpz8m2O_C@{#ff_?OsRe_ODmX%w90c;4!d;u^E;gotFh-@ztOcup(
z76p)-6c~gV*c2E+o&tMqs!+pMHU&l*p@ykE>?}eJONAO%3N@@{VpU)eYFNslzzF7V
zglJg^p*DggH-aVC3N>tG1({dKQqRsPRLH`>$S1?5z$nxR3RgyuECUlCA0Gz;lTgD(
zp+G)%b|xVip@xO53QUYL65{L}AYqW5TZIb2%!N#X4Ld<IKMgxU2FvoXvNH-b?B!r*
z5^6Xo)NquOokf<9Pl!WEfSG}TgPWaAmX!|_R(#GNM+-J`vNA9+@$qr7GeZJVj)6&z
zft#HLtPB*Y9NVj6!X!-|baFJ6=D&M9wM>E|Z65D^?v1OoY$k6|vzaWV$z2bw#hKXn
znAwB^nc0Lwnc0LQnc0LmnAv3c1lZ8h023Pr3!6|wD>IuA4>OyP0La}!fuMvI3TB3~
zDKIngfm0M8AE-CM21=5JGF%EQLZw25GD4LyV0EP+EgT?bk`M<d?)f+rm>GpQ_+<Gw
z6qq=`>5WB!k%@x~BwPpzu!Y<ZX2V9IhJ_qpW5I#TC{zfJhK7xNTnbD=4GY1VSs54^
zW%<|`nD~SWCvVUc7YJn0U=Rug5gaTU46=NaZ)<+lV_<+y$b!b{QW+Q+Iy@N|I<y%W
zf`VOw1x2^qIljBtvG@MmTSpB3^iBSw6(}SM8Zig8Y8V(8^g(QeiHc%Oie8h;wWn`Z
YFiK$D%%}5<mC40wv!Ky?#)$^(0GVqv-T(jq

delta 7476
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
XGkr6k-Y-_BC6=27P2Mw3G++k+`V0sS

diff --git a/SallyConnect/obj/Debug/SallyConnect.pdb b/SallyConnect/obj/Debug/SallyConnect.pdb
index 25116f05e19c20881dc74717ac52700bc7d5e3d1..7537996ab4d3eae6bb5f7d1cecb8af104496b094 100644
GIT binary patch
literal 32256
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

literal 30208
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
CXr%Q3

-- 
GitLab