Beispiel #1
0
        public override Task OnDisconnectedAsync(Exception exception)
        {
            try
            {
                if (Device != null)
                {
                    _dataService.DeviceDisconnected(Device.ID);

                    Device.IsOnline = false;

                    var userIDs = _circuitManager.Connections.Select(x => x.User.Id);

                    var filteredUserIDs = _dataService.FilterUsersByDevicePermission(userIDs, Device.ID);

                    var connections = _circuitManager.Connections
                                      .Where(x => x.User.OrganizationID == Device.OrganizationID &&
                                             filteredUserIDs.Contains(x.User.Id));

                    foreach (var connection in connections)
                    {
                        connection.InvokeCircuitEvent(CircuitEventName.DeviceWentOffline, Device);
                    }
                }
                return(base.OnDisconnectedAsync(exception));
            }
            finally
            {
                ServiceConnections.TryRemove(Context.ConnectionId, out _);
            }
        }
Beispiel #2
0
        public override async Task OnDisconnectedAsync(Exception exception)
        {
            if (Device != null)
            {
                DataService.DeviceDisconnected(Device.ID);
                await this.Groups.RemoveFromGroupAsync(this.Context.ConnectionId, Device.OrganizationID);

                Device.IsOnline = false;
                await BrowserHub.Clients.Group(Device.OrganizationID).SendAsync("DeviceWentOffline", Device);

                while (!ServiceConnections.TryRemove(Context.ConnectionId, out var device))
                {
                    await Task.Delay(1000);
                }
            }

            await base.OnDisconnectedAsync(exception);
        }
Beispiel #3
0
        public override async Task OnDisconnectedAsync(Exception exception)
        {
            try
            {
                if (Device != null)
                {
                    DataService.DeviceDisconnected(Device.ID);

                    Device.IsOnline = false;

                    var connectionIds = BrowserHub.ConnectionIdToUserLookup
                                        .Where(x => x.Value.OrganizationID == Device.OrganizationID)
                                        .Select(x => x.Key)
                                        .ToList();

                    await BrowserHubContext.Clients.Clients(connectionIds).SendAsync("DeviceWentOffline", Device);
                }
            }
            finally
            {
                ServiceConnections.TryRemove(Context.ConnectionId, out _);
                await base.OnDisconnectedAsync(exception);
            }
        }