Files
mir_server/Gateway/common/gate/gate_session.h

64 lines
1.6 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#ifndef _GATE_CONNECTION_H_
#define _GATE_CONNECTION_H_
class GateManager;
class GateUser;
using namespace container;
class GateSession
: public NetSession
{
friend class GateManager;
public:
typedef NetSession Inherited;
public:
DataPacket& AllocGateSendPacket(uint16_t cmd, NetId& netid);
DataPacket& AllocGateSendPacket(NetId& netid);
inline void PostCloseUser(NetId& netid, int accountId, const char* reason, int p1 = 0, int p2 = 0)
{
OutputMsg(rmError, "GateSession::PostCloseUser %s:%d:%d", reason ? reason : "", p1, p2);
PostMsg(CLOSE_GATE_SESSION, LOINT32(netid.socket_), HIINT32(netid.socket_), MAKEINT32(netid.index_, netid.gate_id_), accountId);
}
GateUser* GetUser(NetId& netid);
protected:
virtual void OnOpenUser(GateUser* user);
virtual void OnCloseUser(GateUser* user, const char* reason);
virtual bool OnValidateRegData(const SrvDef::PSERVER_REGDATA regData);
protected:
void Disconnected();
void OnRecvSysMsg(unsigned int msg, size_t p1, size_t p2, size_t p3, size_t p4);
virtual void OnRecv(const uint16_t cmd, char* buf, int size);
NetId* OpenNewUser(NetId& netid, const char* addr);
bool CloseUser(NetId& netid, const char* reason);
void CloseAllUser();
virtual void OnRecv(NetId& netid, char* buf, int size) = 0;
void SendGateCloseUser(NetId& netid);
void FreeBuffers();
public:
GateSession(const char* name);
~GateSession();
protected:
static const int MAX_GATE_USER = 8192; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD><C3BB><EFBFBD>
static const unsigned int CLOSE_GATE_SESSION = 102;
int gate_idx_; //<2F><><EFBFBD>ر<EFBFBD><D8B1><EFBFBD>
GateUser user_list_[MAX_GATE_USER];
};
#endif