#include "precompile.h" #include #include "handlermgr.h" #include "GGListener.h" #include "metamgr.h" #include "app.h" #include "player.h" #include "playermgr.h" #include "roommgr.h" #include "cs_proto.pb.h" #include "ss_proto.pb.h" #include "jsondatamgr.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("servicing", App::Instance()->servicing ? 1 : 0); request->resp_xobj->SetVal("max_rundelay", App::Instance()->perf.max_run_delay_time); request->resp_xobj->SetVal("max_timer_idle", App::Instance()->perf.max_timer_idle); } static void _GMOpsReload(f8::JsonHttpRequest* request) { MetaMgr::Instance()->Reload(); request->resp_xobj->SetVal("errcode", 0); request->resp_xobj->SetVal("errmsg", ""); JsonDataMgr::Instance()->Reload(); a8::UdpLog::Instance()->Info("reload config files", {}); } static void _GMOpsStopService(f8::JsonHttpRequest* request) { request->resp_xobj->SetVal("errcode", 0); request->resp_xobj->SetVal("errmsg", ""); App::Instance()->servicing = false; } static void _GMOpsStartService(f8::JsonHttpRequest* request) { request->resp_xobj->SetVal("errcode", 0); request->resp_xobj->SetVal("errmsg", ""); App::Instance()->servicing = true; } static void _GMOpsServerInfo(f8::JsonHttpRequest* request) { request->resp_xobj->SetVal("errcode", 0); request->resp_xobj->SetVal("errmsg", ""); request->resp_xobj->SetVal("node_id", App::Instance()->node_id); request->resp_xobj->SetVal("instance_id", App::Instance()->instance_id); } static void _GMStatGetRealTimeOnline(f8::JsonHttpRequest* request) { request->resp_xobj->SetVal("errcode", 0); request->resp_xobj->SetVal("errmsg", ""); request->resp_xobj->SetVal("num", App::Instance()->perf.entity_num[ET_Player]); request->resp_xobj->SetVal("room_num", RoomMgr::Instance()->RoomNum()); } void HandlerMgr::Init() { RegisterNetMsgHandlers(); RegisterGMMsgHandler("Ops@selfChecking", _GMOpsSelfChecking); RegisterGMMsgHandler("Ops@reload", _GMOpsReload); RegisterGMMsgHandler("Ops@stopService", _GMOpsStopService); RegisterGMMsgHandler("Ops@startService", _GMOpsStartService); RegisterGMMsgHandler("Ops@serverInfo", _GMOpsServerInfo); RegisterGMMsgHandler("Stat@getRealTimeOnline", _GMStatGetRealTimeOnline); } void HandlerMgr::UnInit() { } void HandlerMgr::RegisterNetMsgHandlers() { RegisterNetMsgHandler(&ggmsghandler, &PlayerMgr::_SS_WSP_SocketDisconnect); RegisterNetMsgHandler(&ggmsghandler, &PlayerMgr::_SS_Ping); RegisterNetMsgHandler(&ggmsghandler, &RoomMgr::_CMJoin); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMMove); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMEmote); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMVoice); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMGameOver); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMWatchWar); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMLeave); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMRevive); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMCancelRevive); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMAdStart); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMAdCancel); RegisterNetMsgHandler(&ggmsghandler, &Player::_CMAdEnd); } void HandlerMgr::ProcGMMsg(unsigned long saddr, int sockhandle, const std::string& url, const std::string& querystr) { if (url != "/webapp/index.php") { GGListener::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); request->resp_xobj->SetVal("errcode", 0); request->resp_xobj->SetVal("errmsg", ""); itr->second(request); if (!request->pending){ std::string response; request->resp_xobj->ToJsonStr(response); GGListener::Instance()->SendText(sockhandle, a8::HttpResponse(response)); delete request; } } else { GGListener::Instance()->SendText(sockhandle, a8::HttpResponse("{}")); } } void HandlerMgr::RegisterGMMsgHandler(const std::string& msgname, void (*handler)(f8::JsonHttpRequest*)) { gmhandlers_[msgname] = handler; }