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); }
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); }