예제 #1
0
파일: Exchange.cs 프로젝트: tm011064/Luputa
        /// <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);
                }
            }
        }
예제 #2
0
파일: Exchange.cs 프로젝트: tm011064/Luputa
        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");
                }
            }
        }