139 lines
4.7 KiB
C++
139 lines
4.7 KiB
C++
#include "precompile.h"
|
|
|
|
#include <a8/mutable_xobject.h>
|
|
|
|
#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();
|
|
RoomMgr::Instance()->InstallReportStateTimer();
|
|
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, &RoomMgr::_CMReconnect);
|
|
|
|
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);
|
|
}
|
|
|
|
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;
|
|
}
|