mirror of
https://github.com/CraftyBoss/SuperMarioOdysseyOnline.git
synced 2024-12-01 07:33:07 +00:00
119 lines
3.9 KiB
C
119 lines
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();
|
||
|
};
|
||
|
};
|
||
|
};
|