183 lines
7.2 KiB
C++
183 lines
7.2 KiB
C++
#include "precompile.h"
|
|
|
|
#include <a8/mutable_xobject.h>
|
|
|
|
#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;
|
|
}
|