public void When_disposing_one_of_the_hubs() { var hub1 = new MessageHub(); var hub2 = new MessageHub(); var totalMessages = new List <string>(); hub1.RegisterGlobalHandler((type, msg) => totalMessages.Add((string)msg)); hub2.RegisterGlobalHandler((type, msg) => totalMessages.Add((string)msg)); var hub1Messages = new List <string>(); var hub2Messages = new List <string>(); hub1.Subscribe <string>(x => hub1Messages.Add(x)); hub2.Subscribe <string>(x => hub2Messages.Add(x)); hub1.Publish("A"); hub2.Publish("B"); hub2.Publish("C"); hub1.Dispose(); Should.Throw <ObjectDisposedException>(() => hub1.Publish("C")) .Message.ShouldBe("Cannot access a disposed object.\r\nObject name: 'The ThreadLocal object has been disposed.'."); hub2.Publish("D"); totalMessages.ShouldBe(new[] { "A", "B", "C", "D" }); hub1Messages.ShouldBe(new[] { "A" }); hub2Messages.ShouldBe(new[] { "B", "C", "D" }); hub2.Dispose(); }
public void When_using_multiple_hubs() { var hub1 = new MessageHub(); var hub2 = new MessageHub(); var totalMessages = new List <string>(); hub1.RegisterGlobalHandler((type, msg) => totalMessages.Add((string)msg)); hub2.RegisterGlobalHandler((type, msg) => totalMessages.Add((string)msg)); var hub1Messages = new List <string>(); var hub2Messages = new List <string>(); hub1.Subscribe <string>(x => hub1Messages.Add(x)); hub2.Subscribe <string>(x => hub2Messages.Add(x)); hub1.Publish("A"); hub2.Publish("B"); hub2.Publish("C"); totalMessages.ShouldBe(new [] { "A", "B", "C" }); hub1Messages.ShouldBe(new [] { "A" }); hub2Messages.ShouldBe(new [] { "B", "C" }); hub1.Dispose(); hub2.Dispose(); }
public void When_operating_on_a_disposed_hub() { var totalMessages = 0; var hub = new MessageHub(); hub.RegisterGlobalHandler((type, msg) => { type.ShouldBe(typeof(string)); msg.ShouldBeOfType <string>(); Interlocked.Increment(ref totalMessages); }); var queue = new ConcurrentQueue <string>(); Action <string> handler = msg => queue.Enqueue(msg); var token = hub.Subscribe(handler); hub.Dispose(); Should.NotThrow(() => hub.Subscribe(handler)); Should.NotThrow(() => hub.Unsubscribe(token)); Should.NotThrow(() => hub.IsSubscribed(token)); Should.NotThrow(() => hub.ClearSubscriptions()); totalMessages.ShouldBe(0); }
public void CloseServer() { _commState?.Dispose(); _ardServ?.Dispose(); _msgHubLogger?.Dispose(); _msgHub.Dispose(); }
protected override void OnClosing(CancelEventArgs eArgs) { _discoverSvc.Dispose(); _schedulerSvc.Dispose(); _vlcControl.Dispose(); _hub.Dispose(); base.OnClosing(eArgs); }
protected virtual void Dispose(bool disposing) { if (!_disposed) { if (disposing) { // TODO: 释放托管状态(托管对象) _messageHub.Dispose(); } // TODO: 释放未托管的资源(未托管的对象)并替代终结器 // TODO: 将大型字段设置为 null _disposed = true; } }