Exemplo n.º 1
0
        public async Task <IUser> Login(string username, string hashedPassword)
        {
            methodCallCounter();
            return(await Task.Factory.StartNew(() => {
                if (!PlayerClients.ContainsKey(username))
                {
                    // TODO Verify user creds from DB here
                    UserData userData = new UserData()
                    {
                        userName = username,
                        password = hashedPassword
                    };
                    if (UserDB.loginUser(userData))
                    {
                        Console.WriteLine($"++ {username} logged in");
                        IUser newUser = new User(username, Context.ConnectionId, hashedPassword);
                        bool added = PlayerClients.TryAdd(username, newUser);

                        if (!added)
                        {
                            return null;
                        }
                        // Keeps username in shared state until client logs out
                        Clients.CallerState.UserName = username;

                        // Accounces to all other connected clients that *username* has joined
                        Clients.Others.announceClientLoggedIn(username);

                        // Creates the basic opponent layout
                        PlayerDTO newPlayer = PlayerDTOFactory.GetPlayerDTO(newUser);
                        if (Opponents.TryAdd(newPlayer.Name, newPlayer))
                        {
                            Clients.Others.opponentJoined(newPlayer);
                            return newUser;
                        }
                    } /*else {
                       * // Handle what to send back to denied client
                       * Clients.Caller.AccessDenied("No way Jose!");
                       * }*/
                }
                return null;
            }));
        }