public async Task TestPublishDiscovererEventAndReceiveMultipleAsync(int total) { var bus = _factory.Resolve <IEventBus>(); var client = _factory.Resolve <IRegistryServiceEvents>(); var expected = new DiscovererEventModel { Discoverer = new DiscovererModel { SiteId = "TestSite", LogLevel = IIoT.OpcUa.Registry.Models.TraceLogLevel.Verbose } }; var result = new TaskCompletionSource <bool>(); var counter = 0; await using (await client.SubscribeDiscovererEventsAsync(ev => { counter++; if (counter == total) { result.SetResult(true); } return(Task.CompletedTask); })) { for (var i = 0; i < total; i++) { await bus.PublishAsync(expected); } await Task.WhenAny(result.Task, Task.Delay(1000)); Assert.True(result.Task.IsCompleted); } }
/// <inheritdoc/> public Task HandleAsync(DiscovererEventModel eventData) { var arguments = new object[] { eventData.ToApiModel() }; return(_callback.BroadcastAsync( EventTargets.DiscovererEventTarget, arguments)); }
/// <summary> /// Convert to api model /// </summary> /// <param name="model"></param> /// <returns></returns> public static DiscovererEventApiModel ToApiModel( this DiscovererEventModel model) { return(new DiscovererEventApiModel { EventType = (DiscovererEventType)model.EventType, Id = model.Id, Discoverer = model.Discoverer.ToApiModel() }); }
public async Task TestPublishDiscovererEventAndReceiveAsync() { var bus = _factory.Resolve <IEventBus>(); var client = _factory.Resolve <IRegistryServiceEvents>(); var expected = new DiscovererEventModel { Discoverer = new DiscovererModel { SiteId = "TestSite4", Connected = true, Discovery = IIoT.OpcUa.Registry.Models.DiscoveryMode.Local, DiscoveryConfig = new DiscoveryConfigModel { IdleTimeBetweenScans = TimeSpan.FromSeconds(5) }, LogLevel = IIoT.OpcUa.Registry.Models.TraceLogLevel.Verbose } }; var result = new TaskCompletionSource <DiscovererEventApiModel>(); await using (await client.SubscribeDiscovererEventsAsync(ev => { result.SetResult(ev); return(Task.CompletedTask); })) { await bus.PublishAsync(expected); await Task.WhenAny(result.Task, Task.Delay(1000)); Assert.True(result.Task.IsCompleted); var received = result.Task.Result; Assert.NotNull(received?.Discoverer?.DiscoveryConfig); Assert.Equal(true, received?.Discoverer?.Connected); Assert.Equal(TimeSpan.FromSeconds(5), expected.Discoverer.DiscoveryConfig.IdleTimeBetweenScans); Assert.Equal(expected.Discoverer.SiteId, received.Discoverer.SiteId); Assert.Equal(expected.Discoverer.LogLevel, (IIoT.OpcUa.Registry.Models.TraceLogLevel)received.Discoverer.LogLevel); } }