93 lines
3.1 KiB
C++
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;
|
|
}
|