game2006/server/gameserver/playermgr.h
aozhiwei 4628973216 1
2022-12-18 11:42:56 +08:00

48 lines
1.1 KiB
C++

#pragma once
#include <a8/singleton.h>
namespace cs
{
class CMJoin;
}
namespace ss
{
class SS_WSP_SocketDisconnect;
class SS_Ping;
}
class Player;
class PlayerMgr : public a8::Singleton<PlayerMgr>
{
public:
enum { HID = HID_PlayerMgr };
private:
PlayerMgr() {};
friend class a8::Singleton<PlayerMgr>;
public:
void Init();
void UnInit();
void _SS_WSP_SocketDisconnect(f8::MsgHdr& hdr, const ss::SS_WSP_SocketDisconnect& msg);
void _SS_Ping(f8::MsgHdr& hdr, const ss::SS_Ping& msg);
int OnlineNum();
Player* GetPlayerBySocket(int socket);
Player* CreatePlayerByCMJoin(Player* hum, long ip_saddr, int socket, const cs::CMJoin& msg);
void RemovePlayerBySocket(int socket_handle);
size_t GetAccountNum() { return account_num_hash_.size(); }
void IncAccountNum(const std::string& account_id);
void DecAccountNum(const std::string& account_id);
void ReBindSocket(Player* hum);
private:
void OnClientDisconnect(int gg_socket);
private:
std::map<int, Player*> socket_hash_;
std::map<std::string, int> account_num_hash_;
};