Ejemplo n.º 1
0
        private async Task ReceiveMessagesFromDeviceAsync(string partition, CancellationToken cancellationToken)
        {
            var eventHubReceiver = eventHubClient.CreateReceiver(PartitionReceiver.DefaultConsumerGroupName, partition, EventPosition.FromEnd());

            while (true)
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    break;
                }
                var eventData = await eventHubReceiver.ReceiveAsync(1);

                if (eventData == null)
                {
                    continue;
                }

                foreach (var d in eventData)
                {
                    var   data = Encoding.UTF8.GetString(d.Body.ToArray());
                    Event ev   = JsonConvert.DeserializeObject <Event>(data);;
                    switch (ev.EventName)
                    {
                    case LockEvent.EventNameConstant:
                        ev = JsonConvert.DeserializeObject <LockEvent>(data);
                        break;

                    case AccessEvent.EventNameConstant:
                        ev = JsonConvert.DeserializeObject <AccessEvent>(data);
                        break;

                    case UnauthorizedAccessEvent.EventNameConstant:
                        ev = JsonConvert.DeserializeObject <UnauthorizedAccessEvent>(data);
                        break;

                    case AlarmEvent.EventNameConstant:
                        ev = JsonConvert.DeserializeObject <AlarmEvent>(data);
                        break;
                    }

                    string deviceId = d.SystemProperties["iothub-connection-device-id"].ToString();

                    var message = $"{deviceId}: {ev.EventName}";

                    var payload = JsonConvert.SerializeObject(new
                    {
                        notification = new
                        {
                            title        = "AccessControl",
                            body         = message,
                            priority     = "10",
                            sound        = "default",
                            time_to_live = "600"
                        },
                        data = new
                        {
                            title = "AccessControl",
                            body  = message,
                            url   = "https://example.com"
                        }
                    });

                    await notificationHubClient.SendFcmNativeNotificationAsync(payload, string.Empty);

                    await hubContext.Clients.All.ReceiveAlarmNotification(new AlarmNotification()
                    {
                        Title = data
                    });

                    Domain.Enums.AccessEvent e = Domain.Enums.AccessEvent.Undefined;

                    if (ev is AccessControl.Messages.Events.LockEvent f)
                    {
                        if (f.LockState == LockState.Locked)
                        {
                            e = Domain.Enums.AccessEvent.Locked;
                        }
                        else
                        {
                            e = Domain.Enums.AccessEvent.Unlocked;
                        }
                    }
                    if (ev is AccessControl.Messages.Events.AlarmEvent g)
                    {
                        if (g.AlarmState == AlarmState.Armed)
                        {
                            e = Domain.Enums.AccessEvent.Armed;
                        }
                        else
                        {
                            e = Domain.Enums.AccessEvent.Disarmed;
                        }
                    }
                    else if (ev is AccessControl.Messages.Events.AccessEvent)
                    {
                        e = Domain.Enums.AccessEvent.Access;
                    }
                    else if (ev is AccessControl.Messages.Events.UnauthorizedAccessEvent)
                    {
                        e = Domain.Enums.AccessEvent.UnauthorizedAccess;
                    }

                    await _accessLogger.LogAsync(null, e, null, string.Empty);
                }
            }
        }
Ejemplo n.º 2
0
        private async Task Do(object ev)
        {
            string deviceId = "test";

            var message = $"{deviceId}: {ev.GetType()}";

            var payload = JsonConvert.SerializeObject(new
            {
                notification = new
                {
                    title        = "AccessControl",
                    body         = message,
                    priority     = "10",
                    sound        = "default",
                    time_to_live = "600"
                },
                data = new
                {
                    title = "AccessControl",
                    body  = message,
                    url   = "https://example.com"
                }
            });

            await _notificationHubClient.SendFcmNativeNotificationAsync(payload, string.Empty);

            await _hubContext.Clients.All.ReceiveAlarmNotification(new AlarmNotification()
            {
                Title = JsonConvert.SerializeObject(ev)
            });

            Domain.Enums.AccessEvent e = Domain.Enums.AccessEvent.Undefined;

            if (ev is AccessControl.Contracts.Events.LockEvent f)
            {
                if (f.LockState == LockState.Locked)
                {
                    e = Domain.Enums.AccessEvent.Locked;
                }
                else
                {
                    e = Domain.Enums.AccessEvent.Unlocked;
                }
            }
            if (ev is AccessControl.Contracts.Events.AlarmEvent g)
            {
                if (g.AlarmState == AlarmState.Armed)
                {
                    e = Domain.Enums.AccessEvent.Armed;
                }
                else
                {
                    e = Domain.Enums.AccessEvent.Disarmed;
                }
            }
            else if (ev is AccessControl.Contracts.Events.AccessEvent)
            {
                e = Domain.Enums.AccessEvent.Access;
            }
            else if (ev is AccessControl.Contracts.Events.UnauthorizedAccessEvent)
            {
                e = Domain.Enums.AccessEvent.UnauthorizedAccess;
            }

            await _accessLogger.LogAsync(null, e, null, string.Empty);
        }