コード例 #1
0
        /// <inheritdoc/>
        public Task HandleAsync(ApplicationEventModel eventData)
        {
            var arguments = new object[] { eventData.ToApiModel() };

            return(_callback.BroadcastAsync(
                       EventTargets.ApplicationEventTarget, arguments));
        }
コード例 #2
0
 /// <summary>
 /// Convert to api model
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public static ApplicationEventApiModel ToApiModel(
     this ApplicationEventModel model)
 {
     return(new ApplicationEventApiModel {
         EventType = (ApplicationEventType)model.EventType,
         Application = model.Application.Map <ApplicationInfoApiModel>()
     });
 }
コード例 #3
0
 /// <summary>
 /// Convert to api model
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public static ApplicationEventApiModel ToApiModel(
     this ApplicationEventModel model)
 {
     return(new ApplicationEventApiModel {
         EventType = (ApplicationEventType)model.EventType,
         Id = model.Id,
         Application = model.Application.ToApiModel()
     });
 }
コード例 #4
0
        public async Task TestPublishApplicationEventAndReceiveMultipleAsync(int total)
        {
            var bus    = _factory.Resolve <IEventBus>();
            var client = _factory.Resolve <IRegistryServiceEvents>();

            var expected = new ApplicationEventModel {
                Application = new ApplicationInfoModel {
                    SiteId          = "TestSigfsdfg  ff",
                    ApplicationType = IIoT.OpcUa.Core.Models.ApplicationType.Client,
                    NotSeenSince    = DateTime.UtcNow,
                    Capabilities    = new HashSet <string> {
                        "ag", "sadf", ""
                    },
                }
            };
            var result  = new TaskCompletionSource <bool>();
            var counter = 0;

            await using (await client.SubscribeApplicationEventsAsync(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);
            }
        }
コード例 #5
0
        public async Task TestPublishApplicationEventAndReceiveAsync()
        {
            var bus    = _factory.Resolve <IEventBus>();
            var client = _factory.Resolve <IRegistryServiceEvents>();

            var expected = new ApplicationEventModel {
                Application = new ApplicationInfoModel {
                    SiteId          = "TestSigfsdfg  ff",
                    ApplicationType = IIoT.OpcUa.Core.Models.ApplicationType.Client,
                    NotSeenSince    = DateTime.UtcNow,
                    Capabilities    = new HashSet <string> {
                        "ag", "sadf", ""
                    },
                }
            };
            var result = new TaskCompletionSource <ApplicationEventApiModel>();

            await using (await client.SubscribeApplicationEventsAsync(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?.Application);
                Assert.Equal(expected.Application.NotSeenSince, received.Application.NotSeenSince);
                Assert.Equal(expected.Application.SiteId, received.Application.SiteId);
                Assert.True(expected.Application.Capabilities
                            .SequenceEqualsSafe(received.Application.Capabilities));
                Assert.Equal(expected.Application.ApplicationType,
                             (IIoT.OpcUa.Core.Models.ApplicationType)received.Application.ApplicationType);
            }
        }