feat(glue): poll login state in glue manager loop

This commit is contained in:
fallenoak 2023-01-09 18:01:27 -06:00 committed by GitHub
parent 19a7e1997b
commit d689281b6f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 83 additions and 5 deletions

View File

@ -135,6 +135,23 @@ int32_t CGlueMgr::Idle(const void* a1, void* a2) {
// TODO // TODO
switch (CGlueMgr::m_idleState) {
case IDLE_LOGIN_SERVER_LOGIN: {
CGlueMgr::PollLoginServerLogin();
break;
}
case IDLE_ACCOUNT_LOGIN: {
// TODO PollAccountLogin
break;
}
// TODO other idle states
default:
break;
}
return 1; return 1;
} }
@ -199,7 +216,7 @@ void CGlueMgr::LoginServerLogin(const char* accountName, const char* password) {
CGlueMgr::m_lastLoginState = -1; CGlueMgr::m_lastLoginState = -1;
CGlueMgr::m_authenticated = false; CGlueMgr::m_authenticated = false;
CGlueMgr::m_matrixRemaining = 0; CGlueMgr::m_matrixRemaining = 0;
CGlueMgr::m_idleState = IDLE_ACCOUNT_LOGIN; CGlueMgr::m_idleState = IDLE_LOGIN_SERVER_LOGIN;
CGlueMgr::m_showedDisconnect = 0; CGlueMgr::m_showedDisconnect = 0;
char* dest = CGlueMgr::m_accountName; char* dest = CGlueMgr::m_accountName;
@ -227,6 +244,66 @@ void CGlueMgr::QuitGame() {
ClientPostClose(0); ClientPostClose(0);
} }
void CGlueMgr::PollLoginServerLogin() {
if (CGlueMgr::m_loginState != LOGIN_STATE_PIN_WAIT) {
// TODO
// CGlueMgr::DisplayLoginStatus();
}
if (CGlueMgr::m_authenticated) {
CGlueMgr::m_idleState = IDLE_NONE;
CGlueMgr::m_showedDisconnect = 0;
// Sub4D8BA0();
CGlueMgr::m_authenticated = false;
return;
}
switch (CGlueMgr::m_loginState) {
case LOGIN_STATE_FAILED: {
// TODO
break;
}
case LOGIN_STATE_DOWNLOADFILE: {
// TODO
break;
}
case LOGIN_STATE_PIN: {
// TODO
break;
}
case LOGIN_STATE_MATRIX: {
// TODO
break;
}
case LOGIN_STATE_TOKEN: {
// TODO
break;
}
case LOGIN_STATE_CHECKINGVERSIONS: {
uint8_t versionChecksum[20];
// TODO
// uint8_t* versionChallenge = ClientServices::LoginConnection()->GetVersionChallenge();
// ChecksumExecutables(versionChallenge, 16, versionChecksum);
ClientServices::LoginConnection()->ProveVersion(versionChecksum);
break;
}
default:
break;
}
}
void CGlueMgr::Resume() { void CGlueMgr::Resume() {
// TODO // TODO
// CGlueMgr::m_disconnectPending = 0; // CGlueMgr::m_disconnectPending = 0;
@ -393,7 +470,7 @@ void CGlueMgr::StatusDialogClick() {
break; break;
} }
case IDLE_ACCOUNT_LOGIN: { case IDLE_LOGIN_SERVER_LOGIN: {
ClientServices::LoginConnection()->Logoff(); ClientServices::LoginConnection()->Logoff();
CGlueMgr::m_showedDisconnect = 0; CGlueMgr::m_showedDisconnect = 0;
@ -402,7 +479,7 @@ void CGlueMgr::StatusDialogClick() {
break; break;
} }
case IDLE_2: case IDLE_ACCOUNT_LOGIN:
case IDLE_3: { case IDLE_3: {
ClientServices::Connection()->Cancel(2); ClientServices::Connection()->Cancel(2);

View File

@ -12,8 +12,8 @@ class CGlueMgr {
// Types // Types
enum GLUE_IDLE_STATE { enum GLUE_IDLE_STATE {
IDLE_NONE = 0, IDLE_NONE = 0,
IDLE_ACCOUNT_LOGIN = 1, IDLE_LOGIN_SERVER_LOGIN = 1,
IDLE_2 = 2, IDLE_ACCOUNT_LOGIN = 2,
IDLE_3 = 3, IDLE_3 = 3,
IDLE_4 = 4, IDLE_4 = 4,
IDLE_5 = 5, IDLE_5 = 5,
@ -58,6 +58,7 @@ class CGlueMgr {
static void Initialize(); static void Initialize();
static void LoginServerLogin(const char* accountName, const char* password); static void LoginServerLogin(const char* accountName, const char* password);
static void QuitGame(); static void QuitGame();
static void PollLoginServerLogin();
static void Resume(); static void Resume();
static void SetLoginStateAndResult(LOGIN_STATE state, LOGIN_RESULT result, char const* addrStr, char const* stateStr, char const* resultStr, uint8_t flags); static void SetLoginStateAndResult(LOGIN_STATE state, LOGIN_RESULT result, char const* addrStr, char const* stateStr, char const* resultStr, uint8_t flags);
static void SetScreen(const char* screen); static void SetScreen(const char* screen);