relation/server/imserver/handlermgr.cc
aozhiwei e838a3fc09 1
2020-06-30 14:14:54 +08:00

132 lines
5.1 KiB
C++

#include "precompile.h"
#include <a8/mutable_xobject.h>
#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;
}