public async Task TestPublishPublisherEventAndReceiveMultipleAsync(int total) { var bus = _factory.Resolve <IEventBus>(); var client = _factory.Resolve <IRegistryServiceEvents>(); var expected = new PublisherEventModel { Publisher = new PublisherModel { SiteId = "TestSite", LogLevel = IIoT.OpcUa.Registry.Models.TraceLogLevel.Verbose } }; var result = new TaskCompletionSource <bool>(); var counter = 0; await using (await client.SubscribePublisherEventsAsync(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(PublisherEventModel eventData) { var arguments = new object[] { eventData.ToApiModel() }; return(_callback.BroadcastAsync( EventTargets.PublisherEventTarget, arguments)); }
/// <summary> /// Convert to api model /// </summary> /// <param name="model"></param> /// <returns></returns> public static PublisherEventApiModel ToApiModel( this PublisherEventModel model) { return(new PublisherEventApiModel { EventType = (PublisherEventType)model.EventType, Id = model.Id, Publisher = model.Publisher.ToApiModel() }); }
public async Task TestPublishPublisherEventAndReceiveAsync() { var bus = _factory.Resolve <IEventBus>(); var client = _factory.Resolve <IRegistryServiceEvents>(); var expected = new PublisherEventModel { Publisher = new PublisherModel { SiteId = "TestSite", Connected = null, Configuration = new PublisherConfigModel { HeartbeatInterval = TimeSpan.FromSeconds(5) }, LogLevel = IIoT.OpcUa.Registry.Models.TraceLogLevel.Verbose } }; var result = new TaskCompletionSource <PublisherEventApiModel>(); await using (await client.SubscribePublisherEventsAsync(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?.Publisher?.Configuration); Assert.Null(received?.Publisher?.Connected); Assert.Equal(TimeSpan.FromSeconds(5), expected.Publisher.Configuration.HeartbeatInterval); Assert.Equal(expected.Publisher.SiteId, received.Publisher.SiteId); Assert.Equal(expected.Publisher.LogLevel, (IIoT.OpcUa.Registry.Models.TraceLogLevel)received.Publisher.LogLevel); } }