Пример #1
0
        public void Subscribe <T>(EventHandlers.EventHandler <T> eventHandler) where T : Event
        {
            if (!connection.IsConnected)
            {
                connection.TryConnect();
            }

            var name = typeof(T).FullName;

            if (handlers.ContainsKey(name))
            {
                handlers[name].Add(eventHandler);
            }
            else
            {
                policy.Execute(() =>
                {
                    using (var channel = connection.CreateModel())
                    {
                        channel.QueueBind(queue: queueName, exchange: exchangeName, routingKey: name);
                        handlers.Add(name, new List <IEventHandler>());
                        handlers[name].Add(eventHandler);
                        eventTypes.Add(typeof(T));
                    }
                });
            }
        }
Пример #2
0
        public void Unsubscribe <T>(EventHandlers.EventHandler <T> eventHandler) where T : Event
        {
            if (!connection.IsConnected)
            {
                connection.TryConnect();
            }

            var name = typeof(T).FullName;

            if (handlers.ContainsKey(name) && handlers[name].Contains(eventHandler))
            {
                handlers[name].Remove(eventHandler);
            }
        }