コード例 #1
0
        /// <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.");
            }
        }
コード例 #2
0
        /// <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;
            }
        }