Ejemplo n.º 1
0
 protected virtual void WriteShutdownInfo(ShutdownInfo command, StompFrameStream ss)
 {
     ss.WriteCommand(command, "DISCONNECT");
     System.Diagnostics.Debug.Assert(!command.ResponseRequired);
     ss.Flush();
 }
Ejemplo n.º 2
0
        protected virtual void WriteRemoveInfo(RemoveInfo command, StompFrameStream ss)
        {
            object id = command.ObjectId;

            if (id is ConsumerId)
            {
                ConsumerId consumerId = id as ConsumerId;
                ss.WriteCommand(command, "UNSUBSCRIBE");
                ss.WriteHeader("id", StompHelper.ToStomp(consumerId));
                ss.Flush();
                consumers.Remove(consumerId);
            }
            else if (id is SessionId)
            {
                // When a session is removed, it needs to remove it's consumers too.
                // Find all the consumer that were part of the session.
                SessionId sessionId = (SessionId)id;
                ArrayList matches   = new ArrayList();
                foreach (DictionaryEntry entry in consumers)
                {
                    ConsumerId t = (ConsumerId)entry.Key;
                    if (sessionId.ConnectionId == t.ConnectionId && sessionId.Value == t.SessionId)
                    {
                        matches.Add(t);
                    }
                }

                bool unsubscribedConsumer = false;

                // Un-subscribe them.
                foreach (ConsumerId consumerId in matches)
                {
                    ss.WriteCommand(command, "UNSUBSCRIBE");
                    ss.WriteHeader("id", StompHelper.ToStomp(consumerId));
                    ss.Flush();
                    consumers.Remove(consumerId);
                    unsubscribedConsumer = true;
                }

                if (!unsubscribedConsumer && command.ResponseRequired)
                {
                    ss.WriteCommand(command, "UNSUBSCRIBE", true);
                    ss.WriteHeader("id", sessionId);
                    ss.Flush();
                }
            }
            else if (id is ProducerId)
            {
                if (command.ResponseRequired)
                {
                    ss.WriteCommand(command, "UNSUBSCRIBE", true);
                    ss.WriteHeader("id", id);
                    ss.Flush();
                }
            }
            else if (id is ConnectionId)
            {
                if (command.ResponseRequired)
                {
                    ss.WriteCommand(command, "UNSUBSCRIBE", true);
                    ss.WriteHeader("id", id);
                    ss.Flush();
                }
            }
        }