ksys: Add Account

This commit is contained in:
Léo Lam 2020-09-25 00:26:36 +02:00
parent 72d100323c
commit 89137d9834
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
5 changed files with 91 additions and 9 deletions

View File

@ -71165,14 +71165,14 @@
0x0000007100d0d730,sub_7100D0D730,8,
0x0000007100d0d738,_ZN2nn3nex20PseudoGlobalVariableINS0_38SecureConnectionServiceDDLDeclarationsEE13ResetContextsEv,140,
0x0000007100d0d7c4,sub_7100D0D7C4,196,
0x0000007100d0d888,sub_7100D0D888,100,
0x0000007100d0d8ec,sub_7100D0D8EC,108,
0x0000007100d0d958,Account::createInstance,156,
0x0000007100d0d9f4,sub_7100D0D9F4,80,
0x0000007100d0da44,sub_7100D0DA44,68,
0x0000007100d0da88,Account::init,96,
0x0000007100d0dae8,Account::__auto0,8,
0x0000007100d0daf0,Account::getUserId,28,
0x0000007100d0d888,sub_7100D0D888,100,_ZN4ksys7Account18SingletonDisposer_D2Ev
0x0000007100d0d8ec,sub_7100D0D8EC,108,_ZN4ksys7Account18SingletonDisposer_D0Ev
0x0000007100d0d958,Account::createInstance,156,_ZN4ksys7Account14createInstanceEPN4sead4HeapE
0x0000007100d0d9f4,sub_7100D0D9F4,80,_ZN4ksys7AccountD1Ev
0x0000007100d0da44,sub_7100D0DA44,68,_ZN4ksys7AccountD0Ev
0x0000007100d0da88,Account::init,96,_ZN4ksys7Account4initEPN4sead4HeapE
0x0000007100d0dae8,Account::__auto0,8,_ZNK4ksys7Account13getUserHandleEv
0x0000007100d0daf0,Account::getUserId,28,_ZNK4ksys7Account9getUserIdEPN2nn7account3UidE
0x0000007100d0db0c,ActorAccessor::ctorCopy,144,_ZN4ksys3act20ActorConstDataAccess12acquireActorERKNS0_24ActorLinkConstDataAccessE
0x0000007100d0db9c,ActorAccessor::hasActor,16,_ZNK4ksys3act20ActorConstDataAccess7hasProcEPNS0_8BaseProcE
0x0000007100d0dbac,act::fieldx8IsEqualToActorFieldx60,144,_ZNK4ksys3act20ActorConstDataAccess7hasProcERKNS0_12BaseProcLinkE

Can't render this file because it is too large.

@ -1 +1 @@
Subproject commit 33613dbdf486d04637351600cfe9eeb434b364a8
Subproject commit 3765a6afa665dc9e787a50e46e70614a0b88ff4f

View File

@ -0,0 +1,43 @@
#include "KingSystem/System/Account.h"
#include <nn/account.h>
namespace ksys {
SEAD_SINGLETON_DISPOSER_IMPL(Account)
Account::~Account() {
if (mFlags.isOn(Flag::HasUserHandle)) {
if (mUserHandle) {
delete mUserHandle;
mUserHandle = nullptr;
}
mFlags.reset(Flag::HasUserHandle);
}
}
void Account::init(sead::Heap* heap) {
mUserHandle = new (heap) nn::account::UserHandle{};
nn::account::Initialize();
if (mFlags.isOff(Flag::HasOpenedUserSuccessfully)) {
const auto result = nn::account::OpenPreselectedUser(mUserHandle);
if (result.IsSuccess())
mFlags.set(Flag::HasOpenedUserSuccessfully);
}
mFlags.set(Flag::HasUserHandle);
}
nn::account::UserHandle* Account::getUserHandle() const {
return mUserHandle;
}
void Account::getUserId(nn::account::Uid* uid) const {
if (mUserHandle)
nn::account::GetUserId(uid, *mUserHandle);
else
*uid = {};
}
} // namespace ksys

View File

@ -0,0 +1,37 @@
#pragma once
#include <heap/seadDisposer.h>
#include <prim/seadTypedBitFlag.h>
#include "KingSystem/Utils/Types.h"
namespace nn::account {
class Uid;
class UserHandle;
} // namespace nn::account
namespace ksys {
class Account {
SEAD_SINGLETON_DISPOSER(Account)
Account() = default;
virtual ~Account();
public:
void init(sead::Heap* heap);
nn::account::UserHandle* getUserHandle() const;
void getUserId(nn::account::Uid* uid) const;
private:
enum class Flag : u8 {
HasUserHandle = 0x1,
HasOpenedUserSuccessfully = 0x2,
};
void* _28 = nullptr;
sead::TypedBitFlag<Flag> mFlags;
nn::account::UserHandle* mUserHandle = nullptr;
};
KSYS_CHECK_SIZE_NX150(Account, 0x40);
} // namespace ksys

View File

@ -1,4 +1,6 @@
target_sources(uking PRIVATE
Account.cpp
Account.h
OverlayArena.cpp
OverlayArena.h
OverlayArenaSystem.cpp