Esempio n. 1
0
        public async void Notify(object sender, EventAddedEventArgs args)
        {
            var @event = args.Event;

            @event.Thing    = _thing;
            @event.Metadata = _descriptor.CreateDescription(@event);

            var webSockets = _thing.AvailableEvent.ContainsKey(@event.Name)
                ? _thing.AvailableEvent[@event.Name].Subscribers
                : null;

            if (webSockets != null && webSockets.Any())
            {
                var message = new Dictionary <string, object>
                {
                    [MESSAGE_TYPE] = MessageType.Event.ToString().ToLower(), [DATA] = @event.Metadata
                };

                await NotifySubscribersAsync(webSockets, message, CancellationToken.None);
            }
        }
        public async void OnEvenAdded(object?sender, EventAddedEventArgs args)
        {
            if (!(sender is Thing thing))
            {
                _logger.LogWarning("The sender is not a Thing, not going to notify.");
                return;
            }

            if (thing.ThingContext.EventsSubscribes[args.EventName].IsEmpty)
            {
                _logger.LogTrace("No subscriber for this event.  [Thing: {thingName}][Event: {eventName}]",
                                 thing.Name, args.EventName);
                return;
            }

            var message = _convert.Serialize(new WebSocketResponse("event",
                                                                   new Dictionary <string, object?>
            {
                [_option.PropertyNamingPolicy.ConvertName(args.EventName)] = args.Event
            }));

            _logger.LogInformation("Going to notify event via Web Socket. [Thing: {thingName}][Event: {eventName}]",
                                   thing.Name, args.EventName);

            foreach (var(_, socket) in thing.ThingContext.EventsSubscribes[args.EventName].ToArray())
            {
                if (socket.State != WebSocketState.Open || socket.CloseStatus.HasValue)
                {
                    _logger.LogInformation("The Web Socket is not open or was requested to close. [Thing: {thingName}][Event: {eventName}]",
                                           thing.Name, args.EventName);
                    return;
                }

                await socket.SendAsync(message, WebSocketMessageType.Text, true, CancellationToken.None)
                .ConfigureAwait(false);
            }
        }
Esempio n. 3
0
        protected void OnEventAdded(EventAddedEventArgs eventAddedEventArgs)
        {
            var temp = EventAdded;

            temp?.Invoke(this, eventAddedEventArgs);
        }
Esempio n. 4
0
 private void DeviceInstanceEventAdded(object sender, EventAddedEventArgs e)
 {
     AddDeviceEvent(e.Event);
 }