123 lines
4.9 KiB
C++
123 lines
4.9 KiB
C++
#pragma once
|
|
|
|
namespace cs
|
|
{
|
|
class CMLoginOld;
|
|
class CMLogin;
|
|
}
|
|
|
|
namespace ss
|
|
{
|
|
class SS_WSP_SocketDisconnect;
|
|
class SS_MS_PushUserList;
|
|
class SS_IM_SendChatMsg;
|
|
class SS_IM_ReadMsgAndOpenChatNotify;
|
|
class SS_IM_CloseChatNotify;
|
|
class SS_IM_SendCustomMsg;
|
|
class SS_IM_UpdateUserInfo;
|
|
class SS_IM_FriendAgreeRequest;
|
|
class SS_IM_FriendDeleteRequest;
|
|
class SS_IM_FriendApply;
|
|
class SS_IM_OnUserOnline;
|
|
class SS_IM_OnUserOffline;
|
|
class SS_IM_QueryUserOnlineState;
|
|
class SS_IM_PushUserOnlineState;
|
|
class SS_IM_RandomUsersRequest;
|
|
class SS_IM_RandomUsersResponse;
|
|
class SS_IM_GuildMemberQuitRequest;
|
|
class SS_IM_GuildMemberQuitResponse;
|
|
class SS_IM_GuildMemberUpdateRequest;
|
|
class SS_IM_GuildMemberUpdateResponse;
|
|
class SS_GS_QueryGuildUserOnlineState;
|
|
class SS_GS_PushGuildRedPoint;
|
|
class SS_GS_ApplyChangeRequest;
|
|
}
|
|
|
|
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_MS_PushUserList(f8::MsgHdr& hdr, const ss::SS_MS_PushUserList& msg);
|
|
void _SS_IM_SendChatMsg(f8::MsgHdr& hdr, const ss::SS_IM_SendChatMsg& msg);
|
|
void _SS_IM_SendCustomMsg(f8::MsgHdr& hdr, const ss::SS_IM_SendCustomMsg& msg);
|
|
void _SS_IM_FriendAgreeRequest(f8::MsgHdr& hdr, const ss::SS_IM_FriendAgreeRequest& msg);
|
|
void _SS_IM_FriendDeleteRequest(f8::MsgHdr& hdr, const ss::SS_IM_FriendDeleteRequest& msg);
|
|
void _SS_IM_FriendApply(f8::MsgHdr& hdr, const ss::SS_IM_FriendApply& msg);
|
|
void _SS_IM_OnUserOnline(f8::MsgHdr& hdr, const ss::SS_IM_OnUserOnline& msg);
|
|
void _SS_IM_OnUserOffline(f8::MsgHdr& hdr, const ss::SS_IM_OnUserOffline& msg);
|
|
void _SS_IM_QueryUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_QueryUserOnlineState& msg);
|
|
void _SS_IM_PushUserOnlineState(f8::MsgHdr& hdr, const ss::SS_IM_PushUserOnlineState& msg);
|
|
void _SS_IM_RandomUsersRequest(f8::MsgHdr& hdr, const ss::SS_IM_RandomUsersRequest& msg);
|
|
void _SS_IM_RandomUsersResponse(f8::MsgHdr& hdr, const ss::SS_IM_RandomUsersResponse& msg);
|
|
void _SS_IM_GuildMemberQuitRequest(f8::MsgHdr& hdr, const ss::SS_IM_GuildMemberQuitRequest& msg);
|
|
void _SS_IM_GuildMemberUpdateRequest(f8::MsgHdr& hdr, const ss::SS_IM_GuildMemberUpdateRequest& msg);
|
|
|
|
void _SS_IM_UpdateUserInfo(f8::MsgHdr& hdr, const ss::SS_IM_UpdateUserInfo& msg);
|
|
|
|
void _SS_GS_QueryGuildUserOnlineState(f8::MsgHdr& hdr, const ss::SS_GS_QueryGuildUserOnlineState& msg);
|
|
void _SS_GS_PushGuildRedPoint(f8::MsgHdr& hdr, const ss::SS_GS_PushGuildRedPoint& msg);
|
|
void _SS_GS_ApplyChangeRequest(f8::MsgHdr& hdr, const ss::SS_GS_ApplyChangeRequest& msg);
|
|
|
|
void _CMLoginOld(f8::MsgHdr& hdr, const cs::CMLoginOld& msg);
|
|
void _CMLogin(f8::MsgHdr& hdr, const cs::CMLogin& msg);
|
|
|
|
Player* GetPlayerBySocket(int socket);
|
|
Player* GetPlayerByAccountId(const std::string& account_id);
|
|
void ReBindSocket(int socket_handle, Player* hum);
|
|
void OnWSProxyDisconnect(a8::XParams& param);
|
|
void WatchPlayer(Friend* friend_data);
|
|
void UnWatchPlayer(Friend* friend_data);
|
|
int OnlineNum();
|
|
int WatchPlayerNum();
|
|
void Update(long long tick);
|
|
void TraversePlayer(std::function<void (Player*)> callback);
|
|
|
|
private:
|
|
void OnClientDisconnect(a8::XParams& param);
|
|
void RemovePlayerBySocket(int socket_handle);
|
|
f8::MsgHdr* GetHdrBySocket(int socket_handle);
|
|
f8::MsgHdr* GetHdrByAccountId(const std::string& account_id);
|
|
void AsyncLogin1(const cs::CMLogin& msg);
|
|
void AsyncLogin2(const cs::CMLogin& msg);
|
|
void AsyncLoginOnOk(const std::string& account_id,
|
|
const std::string& session_id,
|
|
const std::string& nickname,
|
|
const std::string& avatar_url,
|
|
int sex,
|
|
int data_version1,
|
|
const std::string& friend_data,
|
|
long long user_value1,
|
|
long long user_value2,
|
|
long long user_value3,
|
|
long long guild_id,
|
|
int guild_job,
|
|
int vip_lv,
|
|
int head,
|
|
int contribute);
|
|
void AsyncLoginOnError(const std::string& account_id,
|
|
int step,
|
|
int error_code,
|
|
const std::string& error_msg);
|
|
void OnClientSocketDisconnect(int socket_handle);
|
|
|
|
private:
|
|
std::map<int, Player*> socket_hash_;
|
|
std::map<std::string, Player*> accountid_hash_;
|
|
|
|
std::map<int, std::tuple<std::string, f8::MsgHdr*>> pending_socket_hash_;
|
|
std::map<std::string, f8::MsgHdr*> pending_account_hash_;
|
|
|
|
std::map<std::string, list_head> watch_players_;
|
|
};
|