예제 #1
0
 public void Same_consumer_will_throw()
 {
     Assert.Throws <DuplicateSubscriptionException>(() =>
     {
         var handler    = new StringMessageHandler();
         var aggregator = new MessageHub();
         aggregator.Subscribe(handler);
         aggregator.Subscribe(handler);
     });
 }
예제 #2
0
        public void Two_identical_handlers()
        {
            var hub = new MessageHub();
            var h1  = new StringMessageHandler();
            var h2  = new StringMessageHandler();

            hub.Subscribe(h1);
            hub.Subscribe(h2);
            var result = hub.Publish(new StringMessage("value"));

            Assert.True(h1.Handled == 1);
            Assert.True(h2.Handled == 1);
            Assert.True(result);
        }
예제 #3
0
        public void Two_handlers_for_the_same_event_type()
        {
            var hub = new MessageHub();
            var h1  = new StringMessageHandler();
            var h2  = new StringMessageHandler2();

            hub.Subscribe(h1);
            hub.Subscribe(h2);
            var result = hub.Publish(new StringMessage("value"));

            Assert.True(h1.Handled == 1);
            Assert.True(h2.Handled == 1);
            Assert.True(result);
        }
예제 #4
0
        private static IHandler <string> GetChainOfResponsibility()
        {
            // smallMessageHandler, mediumMessageHandler, largeMessageHandler - группа объектов, каждый их которых должен обработать сообщение
            IHandler <string> smallMessageHandler  = new StringMessageHandler(message => message.Length < 10);
            IHandler <string> mediumMessageHandler =
                new StringMessageHandler(message => message.Length >= 10 && message.Length < 20);
            IHandler <string> largeMessageHandler = new StringMessageHandler(message => message.Length >= 20);

            // создаем из объектов цепочку
            smallMessageHandler.SetNextHandler(mediumMessageHandler);
            mediumMessageHandler.SetNextHandler(largeMessageHandler);

            // получаем цепочку
            var chainOrResponsibility = smallMessageHandler;

            return(chainOrResponsibility);
        }
예제 #5
0
        public void Multiple_subscriptions_of_the_same_kind_dont_duplicate()
        {
            var handler1 = new StringMessageHandler();
            var handler2 = new StringMessageHandler();
            var handled  = 0;

            var aggregator = new MessageHub();

            aggregator.Subscribe(handler1);
            aggregator.Subscribe <StringMessage>(e => handled++);
            aggregator.Subscribe(handler2);

            var sent = aggregator.Publish(new StringMessage {
                Text = "Foo"
            });

            Assert.True(sent);
            Assert.Equal(1, handler1.Handled);
            Assert.Equal(1, handled);
            Assert.Equal(1, handler2.Handled);
        }
예제 #6
0
        protected virtual void Update()
        {
            while (_messageQueue.Count > 0)
            {
                var message = _messageQueue.Dequeue();

                if (logEventsInEditor && Debug.isDebugBuild)
                {
                    Debug.Log($"Message received: {message}");
                }

                _stringMessageHandler?.Invoke(message);

                StringMessageHandler?.Invoke(message);
            }

            if (Time.time > _keepAliveNextTick)
            {
                Send("ping");

                _keepAliveNextTick = Time.time + keepAliveTimeout;
            }
        }