/// <summary> /// Subscribes a client to a specified routing key. Messages for this routing key will only be received once the client has subscribed /// </summary> /// <param name="routingKey">The routing key.</param> public void Subscribe(string routingKey) { lock (_AccessLock) { if (!_RoutedMessageHandlers.ContainsKey(routingKey)) { _RoutedMessageHandlers[routingKey] = new RoutedMessageHandler(routingKey); } if (_RoutedMessageHandlers.ContainsKey(routingKey)) { IChannelMessageHandler channelMessageHandler = OperationContext.Current.GetCallbackChannel <IChannelMessageHandler>(); _Log.Info("Successfully subscribed client " + ((IClientChannel)channelMessageHandler).LocalAddress.Uri.ToString() + " to routing key " + routingKey); _RoutedMessageHandlers[routingKey].AddChannelMessageHandler(channelMessageHandler); } } }
private void Disconnect(IChannelMessageHandler channelMessageHandler) { if (channelMessageHandler != null) { lock (_AccessLock) { if (!_ConnectedEndpoints.Contains(channelMessageHandler)) { return; } _Log.Info("Disconnecting client " + ((IClientChannel)channelMessageHandler).LocalAddress.Uri.ToString()); foreach (RoutedMessageHandler RoutedMessageHandler in _RoutedMessageHandlers.Values) { RoutedMessageHandler.RemoveChannelMessageHandler(channelMessageHandler); } _ConnectedEndpoints.Remove(channelMessageHandler); _Log.Info("Client " + ((IClientChannel)channelMessageHandler).LocalAddress.Uri.ToString() + " disconnected"); } } }