diff --git a/server/wsproxy/CMakeLists.txt b/server/wsproxy/CMakeLists.txt index f54c1b0..6ae4022 100644 --- a/server/wsproxy/CMakeLists.txt +++ b/server/wsproxy/CMakeLists.txt @@ -13,6 +13,7 @@ include_directories( /usr/include/python3.4m /usr/include/hiredis ../../third_party + . ) link_directories( diff --git a/server/wsproxy/GCListener.cc b/server/wsproxy/GCListener.cc index 1041fef..ed32398 100644 --- a/server/wsproxy/GCListener.cc +++ b/server/wsproxy/GCListener.cc @@ -21,10 +21,10 @@ public: //packagelen + msgid + magiccode + msgbody //2 + 2 + 4+ xx + \0 + xx bool warning = false; - while (buflen - offset >= sizeof(PackHead)) { - PackHead* p = (PackHead*)&buf[offset]; - if (p->magic_code == MAGIC_CODE) { - if (buflen - offset < sizeof(PackHead) + p->packlen) { + while (buflen - offset >= sizeof(f8::PackHead)) { + f8::PackHead* p = (f8::PackHead*)&buf[offset]; + if (p->magic_code == f8::MAGIC_CODE) { + if (buflen - offset < sizeof(f8::PackHead) + p->packlen) { break; } App::Instance()->AddSocketMsg(SF_Client, @@ -32,9 +32,9 @@ public: saddr, p->msgid, p->seqid, - &buf[offset + sizeof(PackHead)], + &buf[offset + sizeof(f8::PackHead)], p->packlen); - offset += sizeof(PackHead) + p->packlen; + offset += sizeof(f8::PackHead) + p->packlen; } else { warning = true; offset++; @@ -54,7 +54,8 @@ public: a8::XParams() .SetSender(socket_handle) .SetParam1(url) - .SetParam2(querystr)); + .SetParam2(querystr) + .SetParam3(saddr)); } virtual void OnDisConnect() override @@ -94,20 +95,20 @@ void GCListener::UnInit() tcp_listener_ = nullptr; } -void GCListener::ForwardTargetConnMsg(MsgHdr& hdr) +void GCListener::ForwardTargetConnMsg(f8::MsgHdr& hdr) { - char* buff = (char*)malloc(sizeof(PackHead) + hdr.buflen); - PackHead* head = (PackHead*)buff; + char* buff = (char*)malloc(sizeof(f8::PackHead) + hdr.buflen); + f8::PackHead* head = (f8::PackHead*)buff; head->packlen = hdr.buflen; head->msgid = hdr.msgid; head->seqid = hdr.seqid; - head->magic_code = MAGIC_CODE; + head->magic_code = f8::MAGIC_CODE; head->rpc_error_code = 0; if (hdr.buflen > 0) { - memmove(buff + sizeof(PackHead), hdr.buf, hdr.buflen); + memmove(buff + sizeof(f8::PackHead), hdr.buf, hdr.buflen); } - tcp_listener_->SendClientMsg(hdr.socket_handle, buff, sizeof(PackHead) + head->packlen); + tcp_listener_->SendClientMsg(hdr.socket_handle, buff, sizeof(f8::PackHead) + head->packlen); free(buff); } diff --git a/server/wsproxy/GCListener.h b/server/wsproxy/GCListener.h index 6d197b1..6ad5d28 100644 --- a/server/wsproxy/GCListener.h +++ b/server/wsproxy/GCListener.h @@ -22,11 +22,11 @@ class GCListener : public a8::Singleton template void SendMsg(unsigned short socket_handle, T& msg) { - static int msgid = ::Net_GetMessageId(msg); - Net_SendMsg(tcp_listener_, socket_handle, 0, msgid, msg); + static int msgid = f8::Net_GetMessageId(msg); + f8::Net_SendMsg(tcp_listener_, socket_handle, 0, msgid, msg); } - void ForwardTargetConnMsg(MsgHdr& hdr); + void ForwardTargetConnMsg(f8::MsgHdr& hdr); void SendText(unsigned short sockhandle, const std::string& text); void ForceCloseClient(unsigned short sockhandle); diff --git a/server/wsproxy/app.cc b/server/wsproxy/app.cc index c0f3e3b..18fe64b 100644 --- a/server/wsproxy/app.cc +++ b/server/wsproxy/app.cc @@ -278,7 +278,7 @@ void App::DispatchMsg() msg_mutex_->unlock(); } - MsgHdr hdr; + f8::MsgHdr hdr; while (work_node_) { MsgNode *pdelnode = work_node_; work_node_ = pdelnode->next; @@ -316,7 +316,7 @@ void App::DispatchMsg() } } -void App::ProcessClientMsg(MsgHdr& hdr) +void App::ProcessClientMsg(f8::MsgHdr& hdr) { if (hdr.msgid < 100) { return; @@ -346,7 +346,7 @@ void App::ProcessClientMsg(MsgHdr& hdr) } } -void App::ProcessTargetServerMsg(MsgHdr& hdr) +void App::ProcessTargetServerMsg(f8::MsgHdr& hdr) { if (hdr.msgid < 100) { return; @@ -382,7 +382,8 @@ void App::ProcessIMMsg() break; case IM_ExecGM: { - HandlerMgr::Instance()->ProcGMMsg(pdelnode->params.sender, + HandlerMgr::Instance()->ProcGMMsg(pdelnode->params.param3, + pdelnode->params.sender, pdelnode->params.param1.GetString(), pdelnode->params.param2.GetString() ); diff --git a/server/wsproxy/app.h b/server/wsproxy/app.h index 7201637..e8c4563 100644 --- a/server/wsproxy/app.h +++ b/server/wsproxy/app.h @@ -41,8 +41,8 @@ private: void DispatchMsg(); void ProcessIMMsg(); - void ProcessClientMsg(MsgHdr& hdr); - void ProcessTargetServerMsg(MsgHdr& hdr); + void ProcessClientMsg(f8::MsgHdr& hdr); + void ProcessTargetServerMsg(f8::MsgHdr& hdr); void InitLog(); void UnInitLog(); diff --git a/server/wsproxy/handlermgr.cc b/server/wsproxy/handlermgr.cc index 4f8c7c5..9ba10e8 100644 --- a/server/wsproxy/handlermgr.cc +++ b/server/wsproxy/handlermgr.cc @@ -6,17 +6,26 @@ #include "GCListener.h" -void _GMAppEcho(a8::HTTPRequest& request, a8::MutableXObject* xobj) +static void _GMAppEcho(f8::JsonHttpRequest* request) { - xobj->SetVal("error_code", 1); - xobj->SetVal("error_msg", ""); - xobj->SetVal("error_msg", a8::Get(request, "msg")); + request->resp_xobj->SetVal("error_code", 1); + request->resp_xobj->SetVal("error_msg", ""); + request->resp_xobj->SetVal("error_msg", request->request.Get("msg")); +} + +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("app$echo", _GMAppEcho); + RegisterGMMsgHandler("App$echo", _GMAppEcho); + RegisterGMMsgHandler("Ops$selfChecking", _GMOpsSelfChecking); } void HandlerMgr::UnInit() @@ -27,9 +36,10 @@ void HandlerMgr::RegisterNetMsgHandlers() { } -void HandlerMgr::ProcGMMsg(int sockhandle, const std::string& url, const std::string& querystr) +void HandlerMgr::ProcGMMsg(unsigned long saddr, int sockhandle, + const std::string& url, const std::string& querystr) { - if (url != "/index.php") { + if (url != "/webapp/index.php") { GCListener::Instance()->SendText(sockhandle, a8::HttpResponse(404, "")); return; } @@ -37,24 +47,30 @@ void HandlerMgr::ProcGMMsg(int sockhandle, const std::string& url, const std::st a8::HTTPRequest request; a8::ParserUrlQueryString(querystr.c_str(), request); - std::string msgname = a8::Get(request, "c").GetString() + "$" + a8::Get(request, "a").GetString(); + 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); + f8::JsonHttpRequest* request = new f8::JsonHttpRequest; + request->saddr = saddr; + request->socket_handle = sockhandle; + request->query_str = querystr; + request->request.ReadFromUrlQueryString(querystr); + itr->second(request); - std::string response; - xobj->ToJsonStr(response); - GCListener::Instance()->SendText(sockhandle, a8::HttpResponse(response)); + if (!request->pending){ + std::string response; + request->resp_xobj->ToJsonStr(response); + GCListener::Instance()->SendText(sockhandle, a8::HttpResponse(response)); - delete xobj; + delete request; + } } else { GCListener::Instance()->SendText(sockhandle, a8::HttpResponse("{}")); } } void HandlerMgr::RegisterGMMsgHandler(const std::string& msgname, - void (*handler)(a8::HTTPRequest&, a8::MutableXObject*)) + void (*handler)(f8::JsonHttpRequest*)) { gmhandlers_[msgname] = handler; } diff --git a/server/wsproxy/handlermgr.h b/server/wsproxy/handlermgr.h index 279bbfe..4e92981 100644 --- a/server/wsproxy/handlermgr.h +++ b/server/wsproxy/handlermgr.h @@ -21,16 +21,17 @@ class HandlerMgr : public a8::Singleton void Init(); void UnInit(); - NetMsgHandlerObject gcmsghandler; - NetMsgHandlerObject rsmsghandler; - NetMsgHandlerObject gsmsghandler; + f8::NetMsgHandlerObject gcmsghandler; + f8::NetMsgHandlerObject rsmsghandler; + f8::NetMsgHandlerObject gsmsghandler; - void ProcGMMsg(int sockhandle, const std::string& url, const std::string& quyerstr); + void ProcGMMsg(unsigned long saddr, int sockhandle, + const std::string& url, const std::string& querystr); private: void RegisterNetMsgHandlers(); void RegisterGMMsgHandler(const std::string& msgname, - void (*)(a8::HTTPRequest&, a8::MutableXObject*)); + void (*)(f8::JsonHttpRequest*)); - std::map gmhandlers_; + std::map gmhandlers_; }; diff --git a/server/wsproxy/precompile.h b/server/wsproxy/precompile.h index da4d743..094c183 100644 --- a/server/wsproxy/precompile.h +++ b/server/wsproxy/precompile.h @@ -15,4 +15,6 @@ namespace google } } +#include "framework/cpp/types.h" +#include "framework/cpp/utils.h" #include "framework/cpp/protoutils.h" diff --git a/server/wsproxy/target_conn.cc b/server/wsproxy/target_conn.cc index 82e4228..2322f9d 100644 --- a/server/wsproxy/target_conn.cc +++ b/server/wsproxy/target_conn.cc @@ -64,14 +64,14 @@ bool TargetConn::Connected() return tcp_client_->Connected(); } -void TargetConn::ForwardClientMsg(MsgHdr& hdr) +void TargetConn::ForwardClientMsg(f8::MsgHdr& hdr) { - char* buff = (char*)malloc(sizeof(WSProxyPackHead_C) + hdr.buflen); - WSProxyPackHead_C* head = (WSProxyPackHead_C*)buff; + char* buff = (char*)malloc(sizeof(f8::WSProxyPackHead_C) + hdr.buflen); + f8::WSProxyPackHead_C* head = (f8::WSProxyPackHead_C*)buff; head->packlen = hdr.buflen; head->msgid = hdr.msgid; head->seqid = hdr.seqid; - head->magic_code = MAGIC_CODE; + head->magic_code = f8::MAGIC_CODE; #if 0 head->rpc_error_code = 0; #endif @@ -79,10 +79,10 @@ void TargetConn::ForwardClientMsg(MsgHdr& hdr) head->ip_saddr = hdr.ip_saddr; if (hdr.buflen > 0) { - memmove(buff + sizeof(WSProxyPackHead_C), hdr.buf, hdr.buflen); + memmove(buff + sizeof(f8::WSProxyPackHead_C), hdr.buf, hdr.buflen); } - tcp_client_->SendBuff(buff, sizeof(WSProxyPackHead_C) + head->packlen); + tcp_client_->SendBuff(buff, sizeof(f8::WSProxyPackHead_C) + head->packlen); free(buff); } @@ -123,10 +123,10 @@ void TargetConn::on_socketread(a8::TcpClient* sender, char* buf, unsigned int le bool warning = false; unsigned int offset = 0; - while (recv_bufflen_ - offset >= sizeof(WSProxyPackHead_S)) { - WSProxyPackHead_S* p = (WSProxyPackHead_S*) &recv_buff_[offset]; - if (p->magic_code == MAGIC_CODE) { - if (recv_bufflen_ - offset < sizeof(PackHead) + p->packlen) { + while (recv_bufflen_ - offset >= sizeof(f8::WSProxyPackHead_S)) { + f8::WSProxyPackHead_S* p = (f8::WSProxyPackHead_S*) &recv_buff_[offset]; + if (p->magic_code == f8::MAGIC_CODE) { + if (recv_bufflen_ - offset < sizeof(f8::PackHead) + p->packlen) { break; } App::Instance()->AddSocketMsg(SF_TargetServer, @@ -134,9 +134,9 @@ void TargetConn::on_socketread(a8::TcpClient* sender, char* buf, unsigned int le instance_id, p->msgid, p->seqid, - &recv_buff_[offset + sizeof(WSProxyPackHead_S)], + &recv_buff_[offset + sizeof(f8::WSProxyPackHead_S)], p->packlen); - offset += sizeof(PackHead) + p->packlen; + offset += sizeof(f8::PackHead) + p->packlen; } else { warning = true; offset++; diff --git a/server/wsproxy/target_conn.h b/server/wsproxy/target_conn.h index 9f08a98..3660e38 100644 --- a/server/wsproxy/target_conn.h +++ b/server/wsproxy/target_conn.h @@ -28,15 +28,15 @@ class TargetConn template void SendMsg(T& msg) { - static int msgid = ::Net_GetMessageId(msg); + static int msgid = f8::Net_GetMessageId(msg); #if 1 - Net_SendProxyCMsg(tcp_client_, msgid, msg); + f8::Net_SendProxyCMsg(tcp_client_, msgid, msg); #else - Net_SendMsg(tcp_client_, 0, msgid, msg); + f8::Net_SendMsg(tcp_client_, 0, msgid, msg); #endif } - void ForwardClientMsg(MsgHdr& hdr); + void ForwardClientMsg(f8::MsgHdr& hdr); private: void on_error(a8::TcpClient* sender, int errorId); diff --git a/third_party/a8engine b/third_party/a8engine index 5255275..58c8211 160000 --- a/third_party/a8engine +++ b/third_party/a8engine @@ -1 +1 @@ -Subproject commit 52552756404c7047c4438cf11425299c88cb74a7 +Subproject commit 58c82113e3ab51acaf44fda66efd30f8e326e394 diff --git a/third_party/framework b/third_party/framework index 2dafab9..6614d92 160000 --- a/third_party/framework +++ b/third_party/framework @@ -1 +1 @@ -Subproject commit 2dafab9662fe759a442a7ef11ead0bf5885b433f +Subproject commit 6614d9299ac02b3f8b12f0921a660341a7a7ccfe