public bool LoginPlayer(string username, string password, PlayerConnection connection)
        {
            // Make sure this player isn't already in game.
            if (_players.Values.Any(player => player.Descriptor.Name == username))
            {
                var packet = new Packet(PacketType.LOGIN_FAIL, ChannelType.UNASSIGNED);
                packet.Message.Write("Account already logged in!");
                connection.SendPacket(packet, NetDeliveryMethod.Unreliable);
                connection.Disconnect("byeFelicia");

                return(false);
            }

            // If we've made it this far, we've confirmed that the requested account is not already logged into.
            // Let's make sure the password they provided us is valid.
            var playerDescriptor = _playerDataManager.Load(new PlayerDataLoaderArguments(username));

            if (playerDescriptor == null)
            {
                // The account doesn't exist!
                var packet = new Packet(PacketType.LOGIN_FAIL, ChannelType.UNASSIGNED);
                packet.Message.Write("Account does not exist!");
                connection.SendPacket(packet, NetDeliveryMethod.Unreliable);
                connection.Disconnect("byeFelicia");

                return(false);
            }

            // Check to see whether they were lying about that password...
            if (SecurePasswordHasher.Verify(password, playerDescriptor.Password))
            {
                // Whoa, they weren't lying!
                // Let's go ahead and grant them access.


                // First, we'll add them to the list of online players.
                var player = new Player(playerDescriptor, connection);
                this.AddPlayer(player);


                // Now we'll go ahead and tell their client to make whatever preperations that it needs to.
                // We'll also tell them their super duper unique id.
                var packet = new Packet(PacketType.LOGIN_SUCCESS, ChannelType.UNASSIGNED);
                connection.SendPacket(packet, NetDeliveryMethod.Unreliable);

                this.EventOccured?.Invoke(this, new SubjectEventArgs("playerLogin", new object[] { }));

                return(true);
            }
            else
            {
                var packet = new Packet(PacketType.LOGIN_FAIL, ChannelType.UNASSIGNED);
                packet.Message.Write("Incorrect password!");
                connection.SendPacket(packet, NetDeliveryMethod.Unreliable);
                connection.Disconnect("byeFelicia");

                return(false);
            }
        }
        public bool RegisterPlayer(string username, string password, PlayerConnection connection)
        {
            password = SecurePasswordHasher.Hash(password);

            if (_playerDataManager.Exists(new PlayerDataLoaderArguments(username)))
            {
                var packet = new Packet(PacketType.LOGIN_FAIL, ChannelType.UNASSIGNED);
                packet.Message.Write("Account already exists!");
                connection.SendPacket(packet, NetDeliveryMethod.Unreliable);
                connection.Disconnect("byeFelicia");

                return(false);
            }

            // Create their player.
            var descriptor = PlayerDescriptor.Create(username, password);

            descriptor.MapID = Settings.StartingMap;
            descriptor.Role  = Settings.DefaultRole;
            var player = new Player(descriptor, connection);

            _playerDataManager.Save(player.Descriptor);

            this.AddPlayer(player);

            // Notify them that they successfully registered.
            var successPacket = new Packet(PacketType.REGISTER_SUCCESS, ChannelType.UNASSIGNED);

            player.SendPacket(successPacket, NetDeliveryMethod.Unreliable);

            return(true);
        }
Exemple #3
0
        public bool RegisterPlayer(string username, string password, PlayerConnection connection)
        {
            // Make sure this player isn't already registered.
            if (File.Exists(Constants.FILEPATH_ACCOUNTS + username + ".acc"))
            {
                // Notify the requester that the specified username is already registered.
                var packet = new Packet(PacketType.REGISTRATION_FAIL, ChannelType.UNASSIGNED);
                packet.Message.Write("Account already registered!");
                connection.SendPacket(packet, NetDeliveryMethod.Unreliable);
                connection.Disconnect("byeFelicia");

                this.EventOccured?.Invoke(this, new SubjectEventArgs("playerRegister", new object[] { false }));

                return(false);
            }

            // Create their player.
            var descriptor = PlayerDescriptor.Create(username, password);

            descriptor.MapID = Settings.StartingMap;
            descriptor.Role  = Settings.DefaultRole;
            var player = new Player(descriptor, connection);

            player.Save();

            _players.Add(player.UniqueID, player);

            // Notify them that they successfully registered.
            var successPacket = new Packet(PacketType.REGISTER_SUCCESS, ChannelType.UNASSIGNED);

            player.SendPacket(successPacket, NetDeliveryMethod.Unreliable);

            return(true);
        }