public void Same_consumer_will_throw() { Assert.Throws <DuplicateSubscriptionException>(() => { var handler = new StringMessageHandler(); var aggregator = new MessageHub(); aggregator.Subscribe(handler); aggregator.Subscribe(handler); }); }
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); }
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); }
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); }
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); }
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; } }