#include "precompile.h" #include #include #include #include #include "handlermgr.h" #include "player.h" #include "app.h" #include "GGListener.h" #include "cs_proto.pb.h" #include "ss_proto.pb.h" static void _GMOpsSelfChecking(std::shared_ptr request) { request->GetResp()->SetVal("errcode", 0); request->GetResp()->SetVal("errmsg", ""); request->GetResp()->SetVal("healthy", 1); } void HandlerMgr::Init() { RegisterNetMsgHandlers(); RegisterGMMsgHandler("Ops@selfChecking", _GMOpsSelfChecking); f8::MsgQueue::Instance()->RegisterCallBack ( IM_ExecGM, [] (const a8::Args& args) { int socket_handle = args.Get(0); std::string url = args.Get(1); std::string query_str = args.Get(2); unsigned long saddr = args.Get(3); HandlerMgr::Instance()->ProcGMMsg ( saddr, socket_handle, url, query_str ); }); } void HandlerMgr::UnInit() { } void HandlerMgr::RegisterNetMsgHandlers() { RegisterNetMsgHandler(&gsmsghandler, &Player::_SMKcpHandshake); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMPing); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMRpcError); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMReconnect); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMWatchWar); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMLeave); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMJoinedNotify); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMMapInfo); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMUpdate); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMRollMsg); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMVoiceNotify); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMDisconnectNotify); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMGameOver); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMDebugMsg); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMUiUpdate); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMGameStart); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMSysPiaoMsg); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMShowCountdown); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMShowTeamUI); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMGetItemNotify); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMPvePassWave); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMTeamMarkTargetPosList); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMDebugCmd); RegisterNetMsgHandler(&gsmsghandler, &Player::_SMNewBieEnd); } void HandlerMgr::ProcGMMsg(unsigned long saddr, int sockhandle, const std::string& url, const std::string& querystr) { if (url != "/webapp/index.php") { 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()) { auto request = std::make_shared ( saddr, url, querystr, [sockhandle] (const a8::Args& args) { std::string data = args.Get(0); GGListener::Instance()->SendText(sockhandle, data); }); itr->second(request); } else { GGListener::Instance()->SendText(sockhandle, a8::HttpResponse("{}")); } } void HandlerMgr::RegisterGMMsgHandler(const std::string& msgname, void (*handler)(std::shared_ptr)) { gmhandlers_[msgname] = handler; }