#include "precompile.h" #include #include "handlermgr.h" #include "app.h" #include "IMListener.h" #include "perfmonitor.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", PerfMonitor::Instance()->max_run_delay_time); request->resp_xobj->SetVal("max_timer_idle", PerfMonitor::Instance()->max_timer_idle); } static void _GMOpsReload(f8::JsonHttpRequest* request) { request->resp_xobj->SetVal("errcode", 0); request->resp_xobj->SetVal("errmsg", ""); a8::UdpLog::Instance()->Warning("reload config files", {}); } void HandlerMgr::Init() { RegisterNetMsgHandlers(); RegisterGMMsgHandler("Ops@selfChecking", _GMOpsSelfChecking); RegisterGMMsgHandler("Ops@reload", _GMOpsReload); } void HandlerMgr::UnInit() { } void HandlerMgr::RegisterNetMsgHandlers() { } void HandlerMgr::ProcGMMsg(unsigned long saddr, int sockhandle, const std::string& url, const std::string& querystr) { if (url != "/webapp/index.php") { IMListener::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); IMListener::Instance()->SendText(sockhandle, a8::HttpResponse(response)); delete request; } } else { IMListener::Instance()->SendText(sockhandle, a8::HttpResponse("{}")); } } void HandlerMgr::RegisterGMMsgHandler(const std::string& msgname, void (*handler)(f8::JsonHttpRequest*)) { gmhandlers_[msgname] = handler; }