public override Task OnDisconnected(bool stop)
        {
            UserDataDto user;
            var         events = new SignalREventHandlers(Context.QueryString["access_token"]);

            if (_users.Keys.Contains(Context.ConnectionId))
            {
                Groups.Remove(Context.ConnectionId, _users[Context.ConnectionId].GroupName);

                if (_users.TryRemove(Context.ConnectionId, out user))
                {
                    if (!user.GroupName.Contains("PulseServer#"))
                    {
                        ProcessNotification(Context, ProcessType.Disconnected, KioskStatus.offline, user.MachineId, user.SystemName, user.GroupName);
                        Clients.Group(user.GroupName).OnDisconnected(user.MachineId);
                        AsyncHelper.RunSync(() => events.TriggerSystemEventAsync(new SystemEventArgs {
                            Action      = ActionType.Disconnected,
                            Description = "Disconnected",
                            MachineId   = user.MachineId,
                            MachineName = user.SystemName,
                            Status      = SystemEventStatus.Hight,
                        }));
                    }
                }
            }

            return(base.OnDisconnected(false));
        }
        public void SendDeviceControl(string machineId, string controlType)
        {
            var userData = FindUserDataByMachineId(machineId);
            var events   = new SignalREventHandlers(Context.QueryString["access_token"]);

            if (userData != null)
            {
                ProcessDevicesControlMessage(userData.ConnectionId, controlType);
                AsyncHelper.RunSync(() => events.TriggerSystemEventAsync(new SystemEventArgs
                {
                    Action      = controlType == "shutdown" ? ActionType.ShutDown : ActionType.Restart,
                    Description = controlType == "shutdown" ? Enum.GetName(typeof(ActionType), 1) : Enum.GetName(typeof(ActionType), 0),
                    MachineId   = machineId,
                    MachineName = userData.SystemName,
                    Status      = SystemEventStatus.Critical
                }));
            }
        }