#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 { public: enum { HID = HID_PlayerMgr }; private: PlayerMgr() {}; friend class a8::Singleton; 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 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 socket_hash_; std::map accountid_hash_; std::map> pending_socket_hash_; std::map pending_account_hash_; std::map watch_players_; };