64 lines
1.6 KiB
C++
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
|