public static void Subscribe(Guid connectionId, string channel, string group) { lock (((IDictionary) Subscribers).SyncRoot) { var subscription = new Subscription(channel, @group); if (!Subscribers.ContainsKey(subscription)) { Subscribers[subscription] = new List<Guid>(); } Subscribers[subscription].Add(connectionId); } }
public static void Publish(Message message) { lock (((IDictionary)Subscribers).SyncRoot) { List<Guid> subscribingConnections; var subscription = new Subscription(message.Channel, message.Group); if (Subscribers.TryGetValue(subscription, out subscribingConnections)) { foreach (var connection in subscribingConnections) { AddToMessageQueue(connection, message); } } } }
public static void Unsubscribe(Guid connectionId, string channel, string group) { lock (((IDictionary)Subscribers).SyncRoot) { var subscription = new Subscription(channel, @group); if (Subscribers.ContainsKey(subscription)) { Subscribers[subscription].Remove(connectionId); } } }