Skip to content

Commit

Permalink
Drop sessionID from player info repository
Browse files Browse the repository at this point in the history
Use sessionID locally in Account controller and Login controller
Replace GetMapForWarp with just a single GetMapFromServer function
  • Loading branch information
sorokya committed Mar 27, 2022
1 parent 763a76c commit 3c7929d
Show file tree
Hide file tree
Showing 8 changed files with 46 additions and 56 deletions.
17 changes: 9 additions & 8 deletions EOBot/BotHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ public async Task<AccountReply> CreateAccountAsync(string name, string password)
{
var accountActions = DependencyMaster.TypeRegistry[_botIndex].Resolve<IAccountActions>();
var accParams = new CreateAccountParameters(name, password, password, name, name, name + "@eobot.net");
return await accountActions.CreateAccount(accParams);
var nameResult = await accountActions.CheckAccountNameWithServer(name);
return await accountActions.CreateAccount(accParams, (short)nameResult);
}

public async Task<LoginReply> LoginToAccountAsync(string name, string password)
Expand Down Expand Up @@ -56,7 +57,7 @@ public async Task LoginToCharacterAsync(string name)
await CreateCharacterAsync(name);

var character = characters.Characters.Single(x => string.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase));
await loginActions.RequestCharacterLogin(character);
var sessionID = await loginActions.RequestCharacterLogin(character);

var unableToLoadMap = false;
try
Expand All @@ -71,21 +72,21 @@ public async Task LoginToCharacterAsync(string name)

var fileRequestActions = DependencyMaster.TypeRegistry[_botIndex].Resolve<IFileRequestActions>();
if (unableToLoadMap || fileRequestActions.NeedsFileForLogin(InitFileType.Map, mapStateProvider.CurrentMapID))
await fileRequestActions.GetMapFromServer(mapStateProvider.CurrentMapID);
await fileRequestActions.GetMapFromServer(mapStateProvider.CurrentMapID, sessionID);

if (fileRequestActions.NeedsFileForLogin(InitFileType.Item))
await fileRequestActions.GetItemFileFromServer();
await fileRequestActions.GetItemFileFromServer(sessionID);

if (fileRequestActions.NeedsFileForLogin(InitFileType.Npc))
await fileRequestActions.GetNPCFileFromServer();
await fileRequestActions.GetNPCFileFromServer(sessionID);

if (fileRequestActions.NeedsFileForLogin(InitFileType.Spell))
await fileRequestActions.GetSpellFileFromServer();
await fileRequestActions.GetSpellFileFromServer(sessionID);

if (fileRequestActions.NeedsFileForLogin(InitFileType.Class))
await fileRequestActions.GetClassFileFromServer();
await fileRequestActions.GetClassFileFromServer(sessionID);

await loginActions.CompleteCharacterLogin();
await loginActions.CompleteCharacterLogin(sessionID);
}

public async Task<AccountReply> ChangePasswordAsync(string name, string oldPass, string newPass)
Expand Down
8 changes: 3 additions & 5 deletions EOLib/Domain/Account/AccountActions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,6 @@ public async Task<AccountReply> CheckAccountNameWithServer(string accountName)
var reply = (AccountReply)response.ReadShort();
if (reply >= AccountReply.OK_CodeRange)
{
_playerInfoRepository.SessionID = (short)reply;

// Based on patch: https://github.com/eoserv/eoserv/commit/80dde6d4e7f440a93503aeec79f4a2f5931dc13d
// Account may change sequence start depending on the eoserv build being used
// Official software always updates sequence number
Expand All @@ -90,10 +88,10 @@ public async Task<AccountReply> CheckAccountNameWithServer(string accountName)
return reply;
}

public async Task<AccountReply> CreateAccount(ICreateAccountParameters parameters)
public async Task<AccountReply> CreateAccount(ICreateAccountParameters parameters, short sessionID)
{
var createAccountPacket = new PacketBuilder(PacketFamily.Account, PacketAction.Create)
.AddShort((ushort)_playerInfoRepository.SessionID)
.AddShort((ushort)sessionID)
.AddByte(255)
.AddBreakString(parameters.AccountName)
.AddBreakString(parameters.Password)
Expand Down Expand Up @@ -151,7 +149,7 @@ public interface IAccountActions

Task<AccountReply> CheckAccountNameWithServer(string accountName);

Task<AccountReply> CreateAccount(ICreateAccountParameters parameters);
Task<AccountReply> CreateAccount(ICreateAccountParameters parameters, short sessionID);

Task<AccountReply> ChangePassword(IChangePasswordParameters parameters);
}
Expand Down
12 changes: 6 additions & 6 deletions EOLib/Domain/Login/LoginActions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public async Task<LoginReply> LoginToServer(ILoginParameters parameters)
return data.Response;
}

public async Task RequestCharacterLogin(ICharacter character)
public async Task<short> RequestCharacterLogin(ICharacter character)
{
var packet = new PacketBuilder(PacketFamily.Welcome, PacketAction.Request)
.AddInt(character.ID)
Expand All @@ -113,7 +113,6 @@ public async Task RequestCharacterLogin(ICharacter character)
.WithAdminLevel(data.AdminLevel)
.WithStats(data.CharacterStats);

_playerInfoRepository.SessionID = data.SessionID;
_playerInfoRepository.IsFirstTimePlayer = data.FirstTimePlayer;
_currentMapStateRepository.CurrentMapID = data.MapID;

Expand All @@ -128,12 +127,13 @@ public async Task RequestCharacterLogin(ICharacter character)
_loginFileChecksumRepository.ESFLength = data.EsfLen;
_loginFileChecksumRepository.ECFChecksum = data.EcfRid;
_loginFileChecksumRepository.ECFLength = data.EcfLen;
return data.SessionID;
}

public async Task<CharacterLoginReply> CompleteCharacterLogin()
public async Task<CharacterLoginReply> CompleteCharacterLogin(short sessionID)
{
var packet = new PacketBuilder(PacketFamily.Welcome, PacketAction.Message)
.AddThree((ushort)_playerInfoRepository.SessionID)
.AddThree((ushort)sessionID)
.AddInt(_characterRepository.MainCharacter.ID)
.Build();

Expand Down Expand Up @@ -201,8 +201,8 @@ public interface ILoginActions

Task<LoginReply> LoginToServer(ILoginParameters parameters);

Task RequestCharacterLogin(ICharacter character);
Task<short> RequestCharacterLogin(ICharacter character);

Task<CharacterLoginReply> CompleteCharacterLogin();
Task<CharacterLoginReply> CompleteCharacterLogin(short sessionID);
}
}
7 changes: 0 additions & 7 deletions EOLib/Domain/Login/PlayerInfoRepository.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,6 @@ public interface IPlayerInfoRepository

short PlayerID { get; set; }

short SessionID { get; set; }

bool IsFirstTimePlayer { get; set; }

bool PlayerIsInGame { get; set; }
Expand All @@ -25,8 +23,6 @@ public interface IPlayerInfoProvider

short PlayerID { get; }

short SessionID { get; set; }

bool IsFirstTimePlayer { get; }

bool PlayerIsInGame { get; }
Expand All @@ -41,8 +37,6 @@ public sealed class PlayerInfoRepository : IPlayerInfoRepository, IPlayerInfoPro

public short PlayerID { get; set; }

public short SessionID { get; set; }

public bool IsFirstTimePlayer { get; set; }

public bool PlayerIsInGame { get; set; }
Expand All @@ -52,7 +46,6 @@ public void ResetState()
LoggedInAccountName = "";
PlayerPassword = "";
PlayerID = 0;
SessionID = 0;
IsFirstTimePlayer = false;
PlayerIsInGame = false;
}
Expand Down
36 changes: 14 additions & 22 deletions EOLib/Net/FileTransfer/FileRequestActions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -58,42 +58,36 @@ public bool NeedsMapForWarp(short mapID, byte[] mapRid, int fileSize)
return NeedMap(mapID, expectedChecksum, fileSize);
}

public async Task GetMapFromServer(short mapID)
{
var mapFile = await _fileRequestService.RequestMapFile(mapID, _playerInfoProvider.SessionID);
SaveAndCacheMapFile(mapID, mapFile);
}

public async Task GetMapForWarp(short mapID, short sessionID)
public async Task GetMapFromServer(short mapID, short sessionID)
{
var mapFile = await _fileRequestService.RequestMapFileForWarp(mapID, sessionID);
SaveAndCacheMapFile(mapID, mapFile);
}

public async Task GetItemFileFromServer()
public async Task GetItemFileFromServer(short sessionID)
{
var itemFile = await _fileRequestService.RequestFile<EIFRecord>(InitFileType.Item, _playerInfoProvider.SessionID);
var itemFile = await _fileRequestService.RequestFile<EIFRecord>(InitFileType.Item, sessionID);
_pubFileSaveService.SaveFile(PubFileNameConstants.PathToEIFFile, itemFile, rewriteChecksum: false);
_pubFileRepository.EIFFile = (EIFFile)itemFile;
}

public async Task GetNPCFileFromServer()
public async Task GetNPCFileFromServer(short sessionID)
{
var npcFile = await _fileRequestService.RequestFile<ENFRecord>(InitFileType.Npc, _playerInfoProvider.SessionID);
var npcFile = await _fileRequestService.RequestFile<ENFRecord>(InitFileType.Npc, sessionID);
_pubFileSaveService.SaveFile(PubFileNameConstants.PathToENFFile, npcFile, rewriteChecksum: false);
_pubFileRepository.ENFFile = (ENFFile)npcFile;
}

public async Task GetSpellFileFromServer()
public async Task GetSpellFileFromServer(short sessionID)
{
var spellFile = await _fileRequestService.RequestFile<ESFRecord>(InitFileType.Spell, _playerInfoProvider.SessionID);
var spellFile = await _fileRequestService.RequestFile<ESFRecord>(InitFileType.Spell, sessionID);
_pubFileSaveService.SaveFile(PubFileNameConstants.PathToESFFile, spellFile, rewriteChecksum: false);
_pubFileRepository.ESFFile = (ESFFile)spellFile;
}

public async Task GetClassFileFromServer()
public async Task GetClassFileFromServer(short sessionID)
{
var classFile = await _fileRequestService.RequestFile<ECFRecord>(InitFileType.Class, _playerInfoProvider.SessionID);
var classFile = await _fileRequestService.RequestFile<ECFRecord>(InitFileType.Class, sessionID);
_pubFileSaveService.SaveFile(PubFileNameConstants.PathToECFFile, classFile, rewriteChecksum: false);
_pubFileRepository.ECFFile = (ECFFile)classFile;
}
Expand Down Expand Up @@ -151,16 +145,14 @@ public interface IFileRequestActions

bool NeedsMapForWarp(short mapID, byte[] mapRid, int fileSize);

Task GetMapFromServer(short mapID);

Task GetMapForWarp(short mapID, short sessionID);
Task GetMapFromServer(short mapID, short sessionID);

Task GetItemFileFromServer();
Task GetItemFileFromServer(short sessionID);

Task GetNPCFileFromServer();
Task GetNPCFileFromServer(short sessionID);

Task GetSpellFileFromServer();
Task GetSpellFileFromServer(short sessionID);

Task GetClassFileFromServer();
Task GetClassFileFromServer(short sessionID);
}
}
2 changes: 1 addition & 1 deletion EOLib/PacketHandlers/BeginPlayerWarpHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public override bool HandlePacket(IPacket packet)
catch (IOException) { mapIsDownloaded = false; }

if (!mapIsDownloaded || _fileRequestActions.NeedsMapForWarp(mapID, mapRid, fileSize))
_fileRequestActions.GetMapForWarp(mapID, sessionID).Wait(5000);
_fileRequestActions.GetMapFromServer(mapID, sessionID).Wait(5000);

SendWarpAcceptToServer(mapID, sessionID);
break;
Expand Down
6 changes: 5 additions & 1 deletion EndlessClient/Controllers/AccountController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,11 @@ public async Task CreateAccount(ICreateAccountParameters createAccountParameters
return;

var createAccountOperation = _networkOperationFactory.CreateSafeBlockingOperation(
async () => await _accountActions.CreateAccount(createAccountParameters),
async () =>
{
short sessionID = (short)nameResult;
return await _accountActions.CreateAccount(createAccountParameters, sessionID);
},
SetInitialStateAndShowError,
SetInitialStateAndShowError);
if (!await createAccountOperation.Invoke())
Expand Down
14 changes: 8 additions & 6 deletions EndlessClient/Controllers/LoginController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,8 @@ public async Task LoginToCharacter(ICharacter character)
if (!await requestCharacterLoginOperation.Invoke())
return;

var sessionID = requestCharacterLoginOperation.Result;

var unableToLoadMap = false;
try
{
Expand All @@ -127,47 +129,47 @@ public async Task LoginToCharacter(ICharacter character)
if (unableToLoadMap || _fileRequestActions.NeedsFileForLogin(InitFileType.Map, _currentMapStateProvider.CurrentMapID))
{
gameLoadingDialog.SetState(GameLoadingDialogState.Map);
if (!await SafeGetFile(async () => await _fileRequestActions.GetMapFromServer(_currentMapStateProvider.CurrentMapID)))
if (!await SafeGetFile(async () => await _fileRequestActions.GetMapFromServer(_currentMapStateProvider.CurrentMapID, sessionID)))
return;
await Task.Delay(1000);
}

if (_fileRequestActions.NeedsFileForLogin(InitFileType.Item))
{
gameLoadingDialog.SetState(GameLoadingDialogState.Item);
if (!await SafeGetFile(_fileRequestActions.GetItemFileFromServer))
if (!await SafeGetFile(async () => await _fileRequestActions.GetItemFileFromServer(sessionID)))
return;
await Task.Delay(1000);
}

if (_fileRequestActions.NeedsFileForLogin(InitFileType.Npc))
{
gameLoadingDialog.SetState(GameLoadingDialogState.NPC);
if (!await SafeGetFile(_fileRequestActions.GetNPCFileFromServer))
if (!await SafeGetFile(async () => await _fileRequestActions.GetNPCFileFromServer(sessionID)))
return;
await Task.Delay(1000);
}

if (_fileRequestActions.NeedsFileForLogin(InitFileType.Spell))
{
gameLoadingDialog.SetState(GameLoadingDialogState.Spell);
if (!await SafeGetFile(_fileRequestActions.GetSpellFileFromServer))
if (!await SafeGetFile(async () => await _fileRequestActions.GetSpellFileFromServer(sessionID)))
return;
await Task.Delay(1000);
}

if (_fileRequestActions.NeedsFileForLogin(InitFileType.Class))
{
gameLoadingDialog.SetState(GameLoadingDialogState.Class);
if (!await SafeGetFile(_fileRequestActions.GetClassFileFromServer))
if (!await SafeGetFile(async () => await _fileRequestActions.GetClassFileFromServer(sessionID)))
return;
await Task.Delay(1000);
}

gameLoadingDialog.SetState(GameLoadingDialogState.LoadingGame);

var completeCharacterLoginOperation = _networkOperationFactory.CreateSafeBlockingOperation(
_loginActions.CompleteCharacterLogin,
(async () => await _loginActions.CompleteCharacterLogin(sessionID)),
SetInitialStateAndShowError,
SetInitialStateAndShowError);
if (!await completeCharacterLoginOperation.Invoke())
Expand Down

0 comments on commit 3c7929d

Please sign in to comment.