#include "precompile.h" #include #include "handlermgr.h" #include "IMListener.h" #include "WSListener.h" #include "app.h" #include "player.h" #include "playermgr.h" #include "groupmgr.h" #include "IMConnMgr.h" #include "synchelper.h" #include "ss_proto.pb.h" #include "cs_proto.pb.h" static void _GMOpsSelfChecking(f8::JsonHttpRequest* request) { request->resp_xobj->SetVal("errcode", 0); request->resp_xobj->SetVal("errmsg", ""); request->resp_xobj->SetVal("healthy", 1); request->resp_xobj->SetVal("max_rundelay", 10); } void HandlerMgr::Init() { RegisterNetMsgHandlers(); RegisterGMMsgHandler("Ops$selfChecking", _GMOpsSelfChecking); } void HandlerMgr::UnInit() { } void HandlerMgr::RegisterNetMsgHandlers() { RegisterNetMsgHandler(&immsghandler, &IMListener::_SS_Ping); RegisterNetMsgHandler(&immsghandler, &SyncHelper::_SS_IM_FriendAgreeResponse); RegisterNetMsgHandler(&immsghandler, &SyncHelper::_SS_IM_FriendDeleteResponse); RegisterNetMsgHandler(&immsghandler, &PlayerMgr::_SS_IM_PushUserOnlineState); RegisterNetMsgHandler(&mscmsghandler, &PlayerMgr::_SS_MS_PushUserList); RegisterNetMsgHandler(&mscmsghandler, &GroupMgr::_SS_MS_LoadGroup); RegisterNetMsgHandler(&mscmsghandler, &GroupMgr::_SS_MS_ForwardGroupCMMsg); RegisterNetMsgHandler(&mscmsghandler, &IMConnMgr::_SS_Pong); RegisterNetMsgHandler(&mscmsghandler, &IMConnMgr::_SS_MS_IMServerList); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_SendChatMsg); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_SendCustomMsg); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_UpdateUserInfo); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_FriendAgreeRequest); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_FriendDeleteRequest); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_FriendApply); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_OnUserOnline); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_OnUserOffline); RegisterNetMsgHandler(&imcmsghandler, &PlayerMgr::_SS_IM_QueryUserOnlineState); RegisterNetMsgHandler(&wsmsghandler, &WSListener::_SS_Ping); RegisterNetMsgHandler(&wsmsghandler, &PlayerMgr::_SS_WSP_SocketDisconnect); RegisterNetMsgHandler(&wsmsghandler, &PlayerMgr::_CMLogin); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMPing); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMUpdateUserInfo); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMUpdateTempCustomData); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMFriendList); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMFriendApply); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMFriendApplyList); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMFriendAgree); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMFriendRefuse); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMFriendDelete); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMFriendAddBlack); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMFriendDeleteBlack); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMQueryUserStatus); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMRecommandFriend); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMSendChatMsg); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMSendCustomMsg); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGroupCreate); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGroupJoin); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGroupAgree); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGroupKick); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGroupQuit); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGroupDismiss); RegisterNetMsgHandler(&wsmsghandler, &Player::_CMGroupRename); } void HandlerMgr::ProcGMMsg(unsigned long saddr, int sockhandle, const std::string& url, const std::string& querystr) { if (url != "/webapp/index.php") { WSListener::Instance()->SendText(sockhandle, a8::HttpResponse(404, "")); return; } a8::HTTPRequest request; a8::ParserUrlQueryString(querystr.c_str(), request); std::string msgname = a8::Get(request, "c").GetString() + "$" + a8::Get(request, "a").GetString(); auto itr = gmhandlers_.find(msgname); if (itr != gmhandlers_.end()) { f8::JsonHttpRequest* request = new f8::JsonHttpRequest; request->saddr = saddr; request->socket_handle = sockhandle; request->query_str = querystr; request->request.ReadFromUrlQueryString(querystr); itr->second(request); if (!request->pending){ std::string response; request->resp_xobj->ToJsonStr(response); WSListener::Instance()->SendText(sockhandle, a8::HttpResponse(response)); delete request; } } else { WSListener::Instance()->SendText(sockhandle, a8::HttpResponse("{}")); } } void HandlerMgr::RegisterGMMsgHandler(const std::string& msgname, void (*handler)(f8::JsonHttpRequest*)) { gmhandlers_[msgname] = handler; }