wsproxy/server/wsproxy/handlermgr.cc
2018-08-03 19:05:53 +08:00

93 lines
3.1 KiB
C++

#include "precompile.h"
#include <a8/mutable_xobject.h>
#include "vs_proto.pb.h"
#include "vs_msgid.pb.h"
namespace cs = kingsomevs;
#include "handlermgr.h"
#include "player.h"
#include "playermgr.h"
#include "roomsvrmgr.h"
#include "GCListener.h"
void _GMAppEcho(a8::HTTPRequest& request, a8::MutableXObject* xobj)
{
xobj->SetVal("error_code", 1);
xobj->SetVal("error_msg", "");
xobj->SetVal("error_msg", a8::Get(request, "msg"));
}
void HandlerMgr::Init()
{
RegisterNetMsgHandlers();
RegisterGMMsgHandler("app$echo", _GMAppEcho);
}
void HandlerMgr::UnInit()
{
}
void HandlerMgr::RegisterNetMsgHandlers()
{
RegisterNetMsgHandler(&gcmsghandler, &PlayerMgr::_CMLogin);
RegisterNetMsgHandler(&gcmsghandler, &PlayerMgr::_CMReConnect);
RegisterNetMsgHandler(&rsmsghandler, &GCListener::_SS_RS_ForwardClientMsg);
RegisterNetMsgHandler(&rsmsghandler, &RoomSvrMgr::_SS_Pong);
RegisterNetMsgHandler(&rsmsghandler, &RoomSvrMgr::_SS_RS_JoinRandomRoom);
RegisterNetMsgHandler(&rsmsghandler, &RoomSvrMgr::_SS_RS_CreateRandomRoom);
RegisterNetMsgHandler(&rsmsghandler, &RoomSvrMgr::_SS_RS_UpdateMatchInfo);
RegisterNetMsgHandler(&rsmsghandler, &PlayerMgr::_SS_RS_ReConnect);
RegisterNetMsgHandler(&gcmsghandler, &Player::_CMPing);
RegisterNetMsgHandler(&gcmsghandler, &Player::_CMCreateRoom);
RegisterNetMsgHandler(&gcmsghandler, &Player::_CMJoinRandomRoom);
RegisterNetMsgHandler(&gcmsghandler, &Player::_CMJoinRoom);
RegisterNetMsgHandler(&gcmsghandler, &Player::_CMLeaveRoom);
RegisterNetMsgHandler(&gsmsghandler, &Player::_SMCreateRoom);
RegisterNetMsgHandler(&gsmsghandler, &Player::_SMJoinRandomRoom);
RegisterNetMsgHandler(&gsmsghandler, &Player::_SMJoinRoom);
RegisterNetMsgHandler(&gsmsghandler, &Player::_SMKickPlayer);
RegisterNetMsgHandler(&gsmsghandler, &Player::_SMLeaveRoom);
RegisterNetMsgHandler(&gsmsghandler, &Player::_SMRoomKickPlayerNotify);
RegisterNetMsgHandler(&gsmsghandler, &Player::_SMRoomPeerLeaveNotify);
RegisterNetMsgHandler(&gsmsghandler, &Player::_SMRoomDisbandNotify);
}
void HandlerMgr::ProcGMMsg(int sockhandle, const std::string& url, const std::string& querystr)
{
if (url != "/index.php") {
GCListener::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()) {
a8::MutableXObject* xobj = a8::MutableXObject::NewObject();
itr->second(request, xobj);
std::string response;
xobj->ToJsonStr(response);
GCListener::Instance()->SendText(sockhandle, a8::HttpResponse(response));
delete xobj;
} else {
GCListener::Instance()->SendText(sockhandle, a8::HttpResponse("{}"));
}
}
void HandlerMgr::RegisterGMMsgHandler(const std::string& msgname,
void (*handler)(a8::HTTPRequest&, a8::MutableXObject*))
{
gmhandlers_[msgname] = handler;
}