/// <summary> /// Processes the messages received from the event client. /// </summary> /// <param name="message">Message received from the client.</param> private void ProcessMessage(string message) { // Turn the message into an xml document. XmlDocument document = new XmlDocument(); document.LoadXml(message); // Find out what type of request message was sent. if (IProcEventRegistration.IsValidRequest(document)) { IProcEventRegistration er = new IProcEventRegistration(document); // Make sure that the host address is loopback for now. if (!IPAddress.IsLoopback(er.RemoteAddress)) { log.Error(String.Format("An invalid address was specified in the registration message {0}.", er.RemoteAddress)); eventSocket.Shutdown(SocketShutdown.Both); eventSocket.Close(); subscriberTable.Remove(port); } // See if the client is registering or deregistering. if (er.Registering) { // Create the event subscribers. simiasNodeEventSubscriber = new EventSubscriber(); simiasSyncEventSubscriber = new SyncEventSubscriber(); simiasNotifyEventSubscriber = new NotifyEventSubscriber(); log.Debug("Client {0}:{1} has registered for interprocess events", er.RemoteAddress, er.Port); } else { DisposeSubscribers(); log.Debug("Client {0}:{1} has deregistered for interprocess events", er.RemoteAddress, er.Port); } } else if (IProcEventListener.IsValidRequest(document)) { // Make sure that registration has occurred. if ((simiasNodeEventSubscriber == null) || (simiasSyncEventSubscriber == null) || (simiasNodeEventSubscriber == null)) { log.Error("Client must be registered before subscribing for events."); throw new SimiasException("Client must be registered before subscribing for events."); } IProcEventListener el = new IProcEventListener(document); ProcessEventListener(el); } else { log.Debug("{0} : An invalid request message was received.", port); throw new SimiasException("An invalid request message was received."); } }
/// <summary> /// Disposes the event subscribers. /// </summary> private void DisposeSubscribers() { log.Debug("{0} : Disposing all subscribers.", port); if (simiasNodeEventSubscriber != null) { simiasNodeEventSubscriber.Dispose(); simiasNodeEventSubscriber = null; } if (simiasSyncEventSubscriber != null) { simiasSyncEventSubscriber.Dispose(); simiasSyncEventSubscriber = null; } if (simiasNotifyEventSubscriber != null) { simiasNotifyEventSubscriber.Dispose(); simiasNotifyEventSubscriber = null; } }