#include "precompile.h" #include #include "handlermgr.h" #include "ApiListener.h" #include "ordermgr.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); } static void _GMPayGetOrderId(f8::JsonHttpRequest* request) { int errcode = 0; std::string errmsg = ""; #if 0 int seqid = OrderMgr::Instance()->AddOrder( "", request->request.Get("accountid").GetString(), request->request.Get("roleid").GetString(), request->request.Get("rolename").GetString(), "", "", 0, request->request.Get("itemid").GetInt(), request->request.Get("price").GetInt(), request->request.Get("sp_orderid").GetString() ); AddOrderResult addresult; if (OrderMgr::Instance()->WaitForAddOrderFinished(seqid, addresult, 20)) { if (addresult.isok) { request->resp_xobj->SetVal("orderid", addresult.orderinfo.orderid); request->resp_xobj->SetVal("itemid", addresult.orderinfo.itemid); request->resp_xobj->SetVal("price", addresult.orderinfo.price); request->resp_xobj->SetVal("roleid", addresult.orderinfo.roleid); request->resp_xobj->SetVal("channel", addresult.orderinfo.channel); #if 0 request->resp_xobj->SetVal("PartnerUserID", addresult.orderinfo.sp_accountid); request->resp_xobj->SetVal("PrivateInfo", ""); request->resp_xobj->SetVal("ProductName", addresult.orderinfo.itemname); request->resp_xobj->SetVal("ProductMemo", addresult.orderinfo.itemmemo); request->resp_xobj->SetVal("Channel", addresult.orderinfo.channel); #endif } else { errcode = 1; errmsg = "道具id不存在"; } } else { errcode = 2; errmsg = "Fail"; } #endif OrderInfo orderinfo; if (OrderMgr::Instance()->AddNewOrder( request->request.Get("accountid").GetString(), request->request.Get("serverid").GetInt(), request->request.Get("roleid").GetString(), request->request.Get("rolename").GetString(), request->request.Get("itemid").GetInt(), request->request.Get("price").GetInt(), request->request.Get("sp_orderid").GetString(), orderinfo )) { request->resp_xobj->SetVal("orderid", orderinfo.orderid); request->resp_xobj->SetVal("itemid", orderinfo.itemid); request->resp_xobj->SetVal("price", orderinfo.price); request->resp_xobj->SetVal("roleid", orderinfo.roleid); request->resp_xobj->SetVal("channel", orderinfo.channel); } else { errcode = 1; errmsg = "Fail"; } request->resp_xobj->SetVal("errcode", errcode); request->resp_xobj->SetVal("errmsg", errmsg); } static void _GMPayNotify(f8::JsonHttpRequest* request) { int errcode = 0; std::string errmsg = ""; #if 0 int seqid = OrderMgr::Instance()->AddPayNotify( request->request.Get("pay_type").GetInt(), request->request.Get("accountid").GetString(), request->request.Get("roleid").GetString(), request->request.Get("rolename").GetString(), 0, request->request.Get("itemid").GetInt(), "", request->request.Get("orderid").GetString(), request->request.Get("sp_orderid").GetString(), request->request.Get("fee").GetDouble(), request->request.Get("payresult").GetInt() ); int result = 1; if (OrderMgr::Instance()->WaitForPayNotifyFinished(seqid, result, 20)) { if (result == 0) { } else { errcode = 1; errmsg = "failed"; } } else { errcode = 2; errmsg = "failed"; } #endif int result = 1; OrderMgr::Instance()->AddNewPayNotify( request->request.Get("pay_type").GetInt(), request->request.Get("orderid").GetString(), request->request.Get("payresult").GetInt(), result ); if (result != 0) { errcode = 1; errmsg = "failed"; } request->resp_xobj->SetVal("errcode", errcode); request->resp_xobj->SetVal("errmsg", errmsg); } void HandlerMgr::Init() { RegisterNetMsgHandlers(); RegisterGMMsgHandler("Ops$selfChecking", _GMOpsSelfChecking); RegisterGMMsgHandler("Pay$getOrderId", _GMPayGetOrderId); RegisterGMMsgHandler("Pay$payNotify", _GMPayNotify); } 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") { ApiListener::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); ApiListener::Instance()->SendText(sockhandle, a8::HttpResponse(response)); delete request; } } else { ApiListener::Instance()->SendText(sockhandle, a8::HttpResponse("{}")); } } void HandlerMgr::RegisterGMMsgHandler(const std::string& msgname, void (*handler)(f8::JsonHttpRequest*)) { gmhandlers_[msgname] = handler; }