SuperMarioOdysseyOnline/include/nn/account.h

88 lines
2.5 KiB
C++

/**
* @file account.h
* @brief Account service implementation.
*/
#pragma once
#include "os.h"
#include "types.h"
#include "logger.hpp"
namespace nn
{
namespace account
{
// typedef char Nickname[0x21];
// typedef u64 Uid[0x2];
struct Nickname {
char name[0x21] = {};
};
struct Uid {
char data[0x10] = {};
bool operator==(const Uid &rhs) const {
return memcmp(data, rhs.data, 0x10) == 0;
}
Uid& operator=(const Uid& other)
{
memcpy(this->data, other.data, 0x10);
return *this;
}
inline bool isEmpty() const {
return *this == EmptyId;
}
inline void print() const {
Logger::log("Player ID: 0x");
Logger::disableName();
for (size_t i = 0; i < 0x10; i++) { Logger::log("%02X", data[i]); }
Logger::log("\n");
Logger::enableName();
}
inline void print(const char *prefix) const {
Logger::log("%s: 0x", prefix);
Logger::disableName();
for (size_t i = 0; i < 0x10; i++) { Logger::log("%02X", data[i]); }
Logger::log("\n");
Logger::enableName();
}
static const Uid EmptyId;
};
typedef u64 NetworkServiceAccountId;
class AsyncContext;
struct UserHandle;
void Initialize();
Result ListAllUsers(s32 *, nn::account::Uid *, s32 numUsers);
Result OpenUser(nn::account::UserHandle *, nn::account::Uid const &);
Result IsNetworkServiceAccountAvailable(bool *out, nn::account::UserHandle const &);
void CloseUser(nn::account::UserHandle const &);
Result EnsureNetworkServiceAccountAvailable(nn::account::UserHandle const &userHandle);
Result EnsureNetworkServiceAccountIdTokenCacheAsync(nn::account::AsyncContext *, nn::account::UserHandle const &);
Result LoadNetworkServiceAccountIdTokenCache(u64 *, char *, u64, nn::account::UserHandle const &);
Result GetLastOpenedUser(nn::account::Uid *);
Result GetNickname(nn::account::Nickname *nickname, nn::account::Uid const &userID);
class AsyncContext
{
public:
AsyncContext();
Result HasDone(bool *);
Result GetResult();
Result Cancel();
Result GetSystemEvent(nn::os::SystemEvent *);
};
};
};