Files
mir_server/Gateway/common/gate/gate_session.h
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

64 lines
1.6 KiB
C++

#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; //最大网关用户数
static const unsigned int CLOSE_GATE_SESSION = 102;
int gate_idx_; //网关编号
GateUser user_list_[MAX_GATE_USER];
};
#endif