public async Task <bool> AssociateUserToSession(Guid userID, Guid sessionID, bool admin)
        {
            Console.WriteLine(String.Format("TRY Assosiating session {0} to user {1}", sessionID, userID));

            if (UserSessions.TryGetValue(userID, out Guid oldSessionID))
            {
                SessionSockets.Remove(oldSessionID, out _);//remove stale socket - TODO check
            }

            UserSessions.AddOrUpdate(userID, sessionID, (key, _) => sessionID);
            if (admin)
            {
                AdminSessions.AddOrUpdate(userID, sessionID, (key, _) => sessionID);
            }

            if (!SessionSockets.TryGetValue(sessionID, out WebSocket socket))
            {
                Console.WriteLine(String.Format("No websocket for session {0} to user {1}", sessionID, userID));
                return(false);// no socket assigned to session
            }

            if (UserPending.GetValueOrDefault(userID, false))
            {
                byte[] msg = Encoding.UTF8.GetBytes("Alert");
                ArraySegment <byte> buffer = new ArraySegment <byte>(msg, 0, msg.Length);
                await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);

                UserPending.TryUpdate(userID, false, true);
            }
            Console.WriteLine(string.Format("DONE Assosiating session {0} to user {1}", sessionID, userID));
            return(true);
        }
 public bool DisassociateUser(Guid userID)
 {
     if (!UserSessions.TryRemove(userID, out Guid found))
     {
         return(false);// No session associated
     }
     AdminSessions.TryRemove(userID, out _);
     SessionSockets.TryRemove(found, out _);//remove stale socket - TODO check
     Console.WriteLine(string.Format("Dissacociated user {0}", userID));
     return(true);
 }