SuperMarioOdysseyOnline/include/nn/nex/client.h
2022-06-16 14:33:18 -07:00

119 lines
No EOL
3.9 KiB
C++

/**
* @file client.h
* @brief Client implementations for NEX.
*/
#pragma once
#include "system.h"
namespace nn
{
namespace nex
{
class Credentials;
class EndPoint;
class Message;
class ProtocolCallContext;
class ProtocolRequestBrokerInterface;
class Protocol : public nn::nex::SystemComponent
{
public:
enum _Command
{
Response,
Request
};
enum _Type
{
Client, // implemented in nn::nex::ClientProtocol
Server // implemented in nn::nex::ServerProtocol
};
Protocol(u32);
virtual ~Protocol();
virtual char* GetType() const;
virtual bool IsAKindOf(char const *) const;
virtual void EnforceDeclareSysComponentMacro();
virtual bool BeginInitialization();
virtual bool BeginTermination();
virtual nn::nex::Protocol::_Type GetProtocolType() const = 0;
virtual void EndPointDisconnected(nn::nex::EndPoint *);
virtual void FaultDetected(nn::nex::EndPoint *, u32);
virtual nn::nex::Protocol* Clone() const;
virtual bool Reload();
nn::nex::EndPoint* GetOutgoingConnection() const;
void SetIncomingConnection(nn::nex::EndPoint *);
void SetProtocolID(u16);
void AddMethodID(nn::nex::Message *, u32);
void CopyMembers(nn::nex::Protocol const *);
void AssociateProtocolRequestBroker(nn::nex::ProtocolRequestBrokerInterface *);
void ClearFlag(u32 newFlag);
static void ExtractProtocolKey(nn::nex::Message *, nn::nex::Protocol::_Command &, u16 &);
static bool IsOldRVDDLVersion(nn::nex::EndPoint *);
u16 mProtocolID; // _48
u16 _4A;
u32 _4C;
nn::nex::EndPoint* mOutgoingConnection; // _50
nn::nex::ProtocolRequestBrokerInterface* mBrokerInterface; // _58
u32 mFlags; // _60
u32 _64;
nn::nex::EndPoint* mIncomingConnection; // _68
u32 mUseLoopback; // _70 (boolean)
u32 _74;
u64 _78;
u32 _80;
u32 _84;
};
class ClientProtocol : public nn::nex::Protocol
{
public:
ClientProtocol(u32);
virtual ~ClientProtocol();
virtual char* GetType() const;
virtual bool IsAKindOf(char const *) const;
virtual void EnforceDeclareSysComponentMacro();
virtual nn::nex::Protocol::_Type GetProtocolType() const = 0;
virtual void ExtractCallSpecificResults(nn::nex::Message *, nn::nex::ProtocolCallContext *) = 0;
virtual nn::nex::ClientProtocol* CreateResponder() const = 0;
virtual void SetDefaultCredentials(nn::nex::Credentials *);
bool SendOverLocalLoopback(nn::nex::ProtocolCallContext *, nn::nex::Message *);
bool SendRMCMessage(nn::nex::ProtocolCallContext *, nn::nex::Message *);
void ProcessResponse(nn::nex::Message *, nn::nex::EndPoint *);
nn::nex::Credentials* mCredentials; // _88
};
class ServerProtocol : public nn::nex::Protocol
{
public:
ServerProtocol(u32);
virtual ~ServerProtocol();
virtual char* GetType() const;
virtual bool IsAKindOf(char const *) const;
virtual void EnforceDeclareSysComponentMacro();
virtual nn::nex::Protocol::_Type GetProtocolType() const = 0;
virtual void DispatchProtocolMessage(nn::nex::Message *, nn::nex::Message *, bool *, nn::nex::EndPoint *) = 0;
virtual void DispatchProtocolMessageWithAttemptCount(u64, nn::nex::Message *, nn::nex::Message *, bool *, int *, nn::nex::EndPoint *);
virtual bool UseAttemptCountMethod();
};
};
};