protected virtual void WriteShutdownInfo(ShutdownInfo command, StompFrameStream ss) { ss.WriteCommand(command, "DISCONNECT"); System.Diagnostics.Debug.Assert(!command.ResponseRequired); ss.Flush(); }
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(); } } }