From 77afae2c9ed01fddd873e0e8be142afa6a9c6a4c Mon Sep 17 00:00:00 2001 From: luoliangyi <87842688@qq.com> Date: Sat, 21 May 2022 18:09:34 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E7=90=86websdk=EF=BC=8C=E5=B0=86?= =?UTF-8?q?=E6=B6=88=E6=81=AF=E5=BE=AA=E7=8E=AF=E7=8B=AC=E7=AB=8B=E6=88=90?= =?UTF-8?q?=E9=80=9A=E7=94=A8=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/base/HGMsgPump.cpp | 59 +++++++ modules/base/HGMsgPump.h | 28 ++++ modules/base/HGMsgPumpImpl.cpp | 102 ++++++++++++ modules/base/HGMsgPumpImpl.h | 28 ++++ sdk/webservice/1.0/HttpServer.cpp | 4 +- sdk/webservice/1.0/HttpServer.h | 4 +- sdk/webservice/1.0/HttpUser.cpp | 82 ++++------ sdk/webservice/1.0/HttpUser.h | 9 +- sdk/webservice/1.0/Manager.cpp | 37 ++--- sdk/webservice/1.0/Manager.h | 8 +- sdk/webservice/1.0/MsgLoop.cpp | 181 --------------------- sdk/webservice/1.0/MsgLoop.h | 34 ---- sdk/webservice/1.0/MsgPumpCallback_1_0.cpp | 6 + sdk/webservice/1.0/MsgPumpCallback_1_0.h | 8 + sdk/webservice/1.0/{WebMsg.h => Msg_1_0.h} | 106 ++++++------ sdk/webservice/1.0/SockIoServer.cpp | 4 +- sdk/webservice/1.0/SockIoServer.h | 4 +- sdk/webservice/1.0/SockIoUser.cpp | 153 +++++++---------- sdk/webservice/1.0/SockIoUser.h | 10 +- sdk/webservice/1.0/WebServer.cpp | 58 ++++--- sdk/webservice/1.0/WebServer.h | 20 ++- sdk/webservice/1.0/WebUser.cpp | 26 ++- sdk/webservice/1.0/WebUser.h | 14 +- sdk/webservice/main.cpp | 30 +++- 24 files changed, 509 insertions(+), 506 deletions(-) create mode 100644 modules/base/HGMsgPump.cpp create mode 100644 modules/base/HGMsgPump.h create mode 100644 modules/base/HGMsgPumpImpl.cpp create mode 100644 modules/base/HGMsgPumpImpl.h delete mode 100644 sdk/webservice/1.0/MsgLoop.cpp delete mode 100644 sdk/webservice/1.0/MsgLoop.h create mode 100644 sdk/webservice/1.0/MsgPumpCallback_1_0.cpp create mode 100644 sdk/webservice/1.0/MsgPumpCallback_1_0.h rename sdk/webservice/1.0/{WebMsg.h => Msg_1_0.h} (51%) diff --git a/modules/base/HGMsgPump.cpp b/modules/base/HGMsgPump.cpp new file mode 100644 index 00000000..89fa4771 --- /dev/null +++ b/modules/base/HGMsgPump.cpp @@ -0,0 +1,59 @@ +#include "HGMsgPump.h" +#include "HGMsgPumpImpl.h" + +HGResult HGAPI HGBase_CreateMsgPump(HGMsgPump* msgPump) +{ + if (NULL == msgPump) + { + return HGBASE_ERR_INVALIDARG; + } + + HGMsgPumpImpl* msgPumpImpl = new HGMsgPumpImpl; + *msgPump = (HGMsgPump)msgPumpImpl; + return HGBASE_ERR_OK; +} + +HGResult HGAPI HGBase_DestroyMsgPump(HGMsgPump msgPump) +{ + if (NULL == msgPump) + { + return HGBASE_ERR_INVALIDARG; + } + + HGMsgPumpImpl* msgPumpImpl = (HGMsgPumpImpl*)msgPump; + delete msgPumpImpl; + return HGBASE_ERR_OK; +} + +HGResult HGAPI HGBase_RunMsgPump(HGMsgPump msgPump, HGMsgPumpFunc func, HGPointer param) +{ + if (NULL == msgPump) + { + return HGBASE_ERR_INVALIDARG; + } + + HGMsgPumpImpl* msgPumpImpl = (HGMsgPumpImpl*)msgPump; + return msgPumpImpl->Run(func, param); +} + +HGResult HGAPI HGBase_PostPumpMessage(HGMsgPump msgPump, const HGMsg* msg) +{ + if (NULL == msgPump) + { + return HGBASE_ERR_INVALIDARG; + } + + HGMsgPumpImpl* msgPumpImpl = (HGMsgPumpImpl*)msgPump; + return msgPumpImpl->PostMessage(msg); +} + +HGResult HGAPI HGBase_ExitMsgPump(HGMsgPump msgPump) +{ + if (NULL == msgPump) + { + return HGBASE_ERR_INVALIDARG; + } + + HGMsgPumpImpl* msgPumpImpl = (HGMsgPumpImpl*)msgPump; + return msgPumpImpl->Exit(); +} \ No newline at end of file diff --git a/modules/base/HGMsgPump.h b/modules/base/HGMsgPump.h new file mode 100644 index 00000000..a62f3ab9 --- /dev/null +++ b/modules/base/HGMsgPump.h @@ -0,0 +1,28 @@ +#ifndef __HGMSGPUMP_H__ +#define __HGMSGPUMP_H__ + +#include "HGDef.h" +#include "HGBaseErr.h" + +HG_DECLARE_HANDLE(HGMsgPump); + +/* 消息结构体, 可以自定义 */ +typedef struct +{ + HGUInt id; /* 消息ID, 不能为0 */ + HGPointer data; /* 携带的数据 */ +}HGMsg; + +typedef void (*HGMsgPumpFunc)(HGMsgPump msgPump, const HGMsg* msg, HGPointer param); + +HGEXPORT HGResult HGAPI HGBase_CreateMsgPump(HGMsgPump *msgPump); + +HGEXPORT HGResult HGAPI HGBase_DestroyMsgPump(HGMsgPump msgPump); + +HGEXPORT HGResult HGAPI HGBase_RunMsgPump(HGMsgPump msgPump, HGMsgPumpFunc func, HGPointer param); + +HGEXPORT HGResult HGAPI HGBase_PostPumpMessage(HGMsgPump msgPump, const HGMsg *msg); + +HGEXPORT HGResult HGAPI HGBase_ExitMsgPump(HGMsgPump msgPump); + +#endif /* __HGMSGPUMP_H__ */ \ No newline at end of file diff --git a/modules/base/HGMsgPumpImpl.cpp b/modules/base/HGMsgPumpImpl.cpp new file mode 100644 index 00000000..876e0903 --- /dev/null +++ b/modules/base/HGMsgPumpImpl.cpp @@ -0,0 +1,102 @@ +#include "HGMsgPumpImpl.h" + +HGMsgPumpImpl::HGMsgPumpImpl() +{ + HGBase_CreateEvent(HGTRUE, HGFALSE, &m_msgEvent); + HGBase_CreateLock(&m_msgLock); + m_bRecvMsg = HGTRUE; +} + +HGMsgPumpImpl::~HGMsgPumpImpl() +{ + HGBase_DestroyLock(m_msgLock); + m_msgLock = NULL; + HGBase_DestroyEvent(m_msgEvent); + m_msgEvent = NULL; +} + +HGResult HGMsgPumpImpl::Run(HGMsgPumpFunc func, HGPointer param) +{ + if (NULL == func) + { + return HGBASE_ERR_INVALIDARG; + } + + while (1) + { + HGBase_WaitEvent(m_msgEvent); + + HGMsg msg = { 0 }; + bool getMsg = false; + + HGBase_EnterLock(m_msgLock); + if (!m_listMsg.empty()) + { + msg = m_listMsg.front(); + m_listMsg.pop_front(); + getMsg = true; + } + if (m_listMsg.empty()) + { + HGBase_ResetEvent(m_msgEvent); + } + HGBase_LeaveLock(m_msgLock); + + if (!getMsg) + { + continue; + } + + if (0 == msg.id) + { + assert(NULL == msg.data); + break; + } + else + { + func((HGMsgPump)this, &msg, param); + } + } + + return HGBASE_ERR_OK; +} + +HGResult HGMsgPumpImpl::PostMessage(const HGMsg* msg) +{ + if (NULL == msg || 0 == msg->id) + { + return HGBASE_ERR_INVALIDARG; + } + + HGResult ret = HGBASE_ERR_FAIL; + HGBase_EnterLock(m_msgLock); + if (m_bRecvMsg) + { + m_listMsg.push_back(*msg); + HGBase_SetEvent(m_msgEvent); + ret = HGBASE_ERR_OK; + } + HGBase_LeaveLock(m_msgLock); + + return ret; +} + +HGResult HGMsgPumpImpl::Exit() +{ + HGMsg msg; + msg.data = 0; + msg.data = NULL; + + HGResult ret = HGBASE_ERR_FAIL; + HGBase_EnterLock(m_msgLock); + if (m_bRecvMsg) + { + m_listMsg.push_back(msg); + HGBase_SetEvent(m_msgEvent); + m_bRecvMsg = HGFALSE; + ret = HGBASE_ERR_OK; + } + HGBase_LeaveLock(m_msgLock); + + return ret; +} \ No newline at end of file diff --git a/modules/base/HGMsgPumpImpl.h b/modules/base/HGMsgPumpImpl.h new file mode 100644 index 00000000..52628ab9 --- /dev/null +++ b/modules/base/HGMsgPumpImpl.h @@ -0,0 +1,28 @@ +#ifndef __HGMSGPUMPIMPL_H__ +#define __HGMSGPUMPIMPL_H__ + +#include "HGDef.h" +#include "HGInc.h" +#include "HGEvent.h" +#include "HGLock.h" +#include "HGMsgPump.h" +#include + +class HGMsgPumpImpl +{ +public: + HGMsgPumpImpl(); + ~HGMsgPumpImpl(); + + HGResult Run(HGMsgPumpFunc func, HGPointer param); + HGResult PostMessage(const HGMsg* msg); + HGResult Exit(); + +private: + HGEvent m_msgEvent; + HGLock m_msgLock; + HGBool m_bRecvMsg; + std::list m_listMsg; +}; + +#endif /* __HGMSGPUMPIMPL_H__ */ \ No newline at end of file diff --git a/sdk/webservice/1.0/HttpServer.cpp b/sdk/webservice/1.0/HttpServer.cpp index 6b7f706b..59966a4e 100644 --- a/sdk/webservice/1.0/HttpServer.cpp +++ b/sdk/webservice/1.0/HttpServer.cpp @@ -2,8 +2,8 @@ #include "HttpUser.h" #include "base/HGInfo.h" -HttpServer::HttpServer(class MsgLoop* loop, class Manager* manager) - : WebServer(loop, manager) +HttpServer::HttpServer(HGMsgPump msgPump, class Manager* manager) + : WebServer(msgPump, manager) { } diff --git a/sdk/webservice/1.0/HttpServer.h b/sdk/webservice/1.0/HttpServer.h index 0408c996..c482ef1a 100644 --- a/sdk/webservice/1.0/HttpServer.h +++ b/sdk/webservice/1.0/HttpServer.h @@ -2,12 +2,12 @@ #define __HTTPSERVER_H__ #include "WebServer.h" -#include "WebMsg.h" +#include "Msg_1_0.h" class HttpServer : public WebServer { public: - HttpServer(class MsgLoop *loop, class Manager *manager); + HttpServer(HGMsgPump msgPump, class Manager *manager); virtual ~HttpServer(); void Connect(const ConnectParam *param); diff --git a/sdk/webservice/1.0/HttpUser.cpp b/sdk/webservice/1.0/HttpUser.cpp index 9b42e0cb..d4079118 100644 --- a/sdk/webservice/1.0/HttpUser.cpp +++ b/sdk/webservice/1.0/HttpUser.cpp @@ -1,5 +1,5 @@ 锘#include "HttpUser.h" -#include "MsgLoop.h" +#include "WebServer.h" #include "Manager.h" #include "base/HGInfo.h" #include "cJSON.h" @@ -101,9 +101,9 @@ static std::string GetJsonStringValue(cJSON* json, const std::string& key) } #if defined(HG_CMP_MSC) -HttpUser::HttpUser(class WebServer* server, HGUInt id, const char* ip, uint16_t port, SOCKET sockConn) +HttpUser::HttpUser(WebServer* server, HGUInt id, const char* ip, uint16_t port, SOCKET sockConn) #else -HttpUser::HttpUser(class WebServer* server, HGUInt id, const char* ip, uint16_t port, int sockConn) +HttpUser::HttpUser(WebServer* server, HGUInt id, const char* ip, uint16_t port, int sockConn) #endif : WebUser(server, id, ip, port, sockConn) { @@ -715,6 +715,32 @@ void HttpUser::HandleCmd(const HttpCmdParam* param) } } +void HttpUser::PostCmdMsg(const HttpHead& headInfo, const HGByte* data, HGUInt dataSize) +{ + HttpCmdParam* param = new HttpCmdParam; + param->svr = m_server; + param->usrId = m_id; + param->head = headInfo; + param->data = NULL; + param->size = 0; + if (0 != dataSize) + { + param->data = new HGByte[dataSize]; + param->size = dataSize; + memcpy(param->data, data, dataSize); + } + + HGMsg msg; + msg.id = MSGID_HTTP_COMMAND; + msg.data = param; + if (HGBASE_ERR_OK != HGBase_PostPumpMessage(m_server->GetMsgPump(), &msg)) + { + delete[] param->data; + param->size = 0; + delete param; + } +} + void HttpUser::ThreadFunc() { HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "HttpUser::ThreadFunc"); @@ -741,12 +767,7 @@ void HttpUser::ThreadFunc() if (len <= 0) { // 杩欓噷璺冲嚭锛屽彲鑳芥槸鏈嶅姟鍣ㄥ叧闂簡socketConn锛屾垨鑰呭鎴风鍏抽棴浜唖ocket锛屾垨鑰呯綉缁滄柇寮 - WebMsg msg; - msg.msgId = WEB_MSGID_DISCONNET; - msg.svr = m_server; - msg.usrId = m_id; - msg.param = NULL; - GetLoop()->Send(&msg); + PostDisConnectMsg(); break; } else @@ -783,12 +804,7 @@ void HttpUser::ThreadFunc() headDataTailLen = 0; if (!headInfo.Parse(headData.c_str())) { - WebMsg msg; - msg.msgId = WEB_MSGID_DISCONNET; - msg.svr = m_server; - msg.usrId = m_id; - msg.param = NULL; - GetLoop()->Send(&msg); + PostDisConnectMsg(); break; } @@ -803,22 +819,7 @@ void HttpUser::ThreadFunc() } else { - HttpCmdParam* param = new HttpCmdParam; - param->head = headInfo; - param->data = NULL; - param->size = 0; - - WebMsg msg; - msg.msgId = WEB_MSGID_COMMAND; - msg.svr = m_server; - msg.usrId = m_id; - msg.param = param; - bool b = GetLoop()->Send(&msg); - if (!b) - { - delete param; - } - + PostCmdMsg(headInfo, NULL, 0); headInfo.Clear(); } } @@ -829,24 +830,7 @@ void HttpUser::ThreadFunc() ++getDataSize; if (getDataSize == dataSize) { - HttpCmdParam* param = new HttpCmdParam; - param->head = headInfo; - param->data = new HGByte [dataSize]; - param->size = dataSize; - memcpy(param->data, data, dataSize); - - WebMsg msg; - msg.msgId = WEB_MSGID_COMMAND; - msg.svr = m_server; - msg.usrId = m_id; - msg.param = param; - bool b = GetLoop()->Send(&msg); - if (!b) - { - delete[] param->data; - param->size = 0; - delete param; - } + PostCmdMsg(headInfo, data, dataSize); delete [] data; data = NULL; diff --git a/sdk/webservice/1.0/HttpUser.h b/sdk/webservice/1.0/HttpUser.h index 399117f7..80e93011 100644 --- a/sdk/webservice/1.0/HttpUser.h +++ b/sdk/webservice/1.0/HttpUser.h @@ -2,21 +2,24 @@ #define __HTTPUSER_H__ #include "WebUser.h" -#include "WebMsg.h" +#include "Msg_1_0.h" + +class WebServer; class HttpUser : public WebUser { public: #if defined(HG_CMP_MSC) - HttpUser(class WebServer* server, HGUInt id, const char* ip, uint16_t port, SOCKET sockConn); + HttpUser(WebServer* server, HGUInt id, const char* ip, uint16_t port, SOCKET sockConn); #else - HttpUser(class WebServer* server, HGUInt id, const char* ip, uint16_t port, int sockConn); + HttpUser(WebServer* server, HGUInt id, const char* ip, uint16_t port, int sockConn); #endif virtual ~HttpUser(); void HandleCmd(const HttpCmdParam* param); protected: + void PostCmdMsg(const HttpHead& headInfo, const HGByte *data, HGUInt dataSize); virtual void ThreadFunc(); private: diff --git a/sdk/webservice/1.0/Manager.cpp b/sdk/webservice/1.0/Manager.cpp index 8916be8b..1be346e8 100644 --- a/sdk/webservice/1.0/Manager.cpp +++ b/sdk/webservice/1.0/Manager.cpp @@ -1,5 +1,4 @@ 锘#include "Manager.h" -#include "MsgLoop.h" #include "base/HGBuffer.h" #include "base/HGBase64.h" #include "base/HGUtility.h" @@ -137,9 +136,9 @@ void DevParam::Save(const std::string& cfgPath) HGBase_SetProfileInt(cfgPath.c_str(), "devParam", "ftpMode", ftpMode); } -Manager::Manager(class MsgLoop* loop) +Manager::Manager(HGMsgPump msgPump) { - m_loop = loop; + m_msgPump = msgPump; HGBase_CreateLock(&m_lock); m_devName.clear(); m_devHandle = NULL; @@ -1894,13 +1893,10 @@ int Manager::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i OpenDevParam* openDevParam = new OpenDevParam; openDevParam->devName = sane_dev->name; - WebMsg msg; - msg.msgId = WEB_MSGID_OPENDEV; - msg.svr = NULL; - msg.usrId = 0; - msg.param = openDevParam; - bool b = p->m_loop->Send(&msg); - if (!b) + HGMsg msg; + msg.id = MSGID_OPEN_DEVICE; + msg.data = openDevParam; + if (HGBASE_ERR_OK != HGBase_PostPumpMessage(p->m_msgPump, &msg)) { delete openDevParam; } @@ -1919,13 +1915,10 @@ int Manager::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i CloseDevParam* closeDevParam = new CloseDevParam; closeDevParam->devName = sane_dev->name; - WebMsg msg; - msg.msgId = WEB_MSGID_CLOSEDEV; - msg.svr = NULL; - msg.usrId = 0; - msg.param = closeDevParam; - bool b = p->m_loop->Send(&msg); - if (!b) + HGMsg msg; + msg.id = MSGID_CLOSE_DEVICE; + msg.data = closeDevParam; + if (HGBASE_ERR_OK != HGBase_PostPumpMessage(p->m_msgPump, &msg)) { delete closeDevParam; } @@ -2060,12 +2053,10 @@ int Manager::sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned i p->m_scanEvent(SCANEVENT_FINISH, (void*)data, (void*)0, p->m_scanParam); HGBase_LeaveLock(p->m_lock); - WebMsg msg; - msg.msgId = WEB_MSGID_SCANFINISH; - msg.svr = NULL; - msg.usrId = 0; - msg.param = NULL; - p->m_loop->Send(&msg); + HGMsg msg; + msg.id = MSGID_SCAN_FINISH; + msg.data = NULL; + HGBase_PostPumpMessage(p->m_msgPump, &msg); } break; } diff --git a/sdk/webservice/1.0/Manager.h b/sdk/webservice/1.0/Manager.h index 387ad849..74684bfb 100644 --- a/sdk/webservice/1.0/Manager.h +++ b/sdk/webservice/1.0/Manager.h @@ -5,10 +5,10 @@ #include "base/HGInc.h" #include "base/HGLock.h" #include "base/HGImage.h" +#include "base/HGMsgPump.h" #include "sane/sane_ex.h" #include "sane/sane_option_definitions.h" -#include "WebMsg.h" -#include +#include "Msg_1_0.h" #include #define SCANEVENT_ARRIVE 1L @@ -86,7 +86,7 @@ typedef void (*ScanEvent)(HGUInt event, void *value1, void *value2, void *param) class Manager { public: - Manager(class MsgLoop* loop); + Manager(HGMsgPump msgPump); ~Manager(); // 鎵撳紑璁惧 @@ -175,7 +175,7 @@ private: static int sane_ex_callback(SANE_Handle hdev, int code, void* data, unsigned int* len, void* param); private: - class MsgLoop* m_loop; + HGMsgPump m_msgPump; HGLock m_lock; std::string m_devName; SANE_Handle m_devHandle; diff --git a/sdk/webservice/1.0/MsgLoop.cpp b/sdk/webservice/1.0/MsgLoop.cpp deleted file mode 100644 index 52026a24..00000000 --- a/sdk/webservice/1.0/MsgLoop.cpp +++ /dev/null @@ -1,181 +0,0 @@ -锘#include "MsgLoop.h" - -MsgLoop::MsgLoop() -{ - HGBase_CreateEvent(HGTRUE, HGFALSE, &m_msgEvent); - HGBase_CreateLock(&m_msgLock); - m_bRecvMsg = HGTRUE; - - m_manager = new Manager(this); - m_httpServer = new HttpServer(this, m_manager); - m_sockIoServer = new SockIoServer(this, m_manager); -} - -MsgLoop::~MsgLoop() -{ - delete m_httpServer; - m_httpServer = NULL; - delete m_sockIoServer; - m_sockIoServer = NULL; - delete m_manager; - m_manager = NULL; - - HGBase_DestroyLock(m_msgLock); - m_msgLock = NULL; - HGBase_DestroyEvent(m_msgEvent); - m_msgEvent = NULL; -} - -bool MsgLoop::Send(const WebMsg* msg) -{ - if (NULL == msg) - { - return false; - } - - bool ret = false; - HGBase_EnterLock(m_msgLock); - if (m_bRecvMsg) - { - m_listMsg.push_back(*msg); - HGBase_SetEvent(m_msgEvent); - - if (WEB_MSGID_QUIT == msg->msgId) - m_bRecvMsg = HGFALSE; - ret = true; - } - HGBase_LeaveLock(m_msgLock); - - return ret; -} - -void MsgLoop::Loop() -{ - m_httpServer->Open(18999); - m_sockIoServer->Open(28999); - - while (1) - { - HGBase_WaitEvent(m_msgEvent); - - WebMsg msg = { 0 }; - HGBase_EnterLock(m_msgLock); - if (!m_listMsg.empty()) - { - msg = m_listMsg.front(); - m_listMsg.pop_front(); - } - if (m_listMsg.empty()) - { - HGBase_ResetEvent(m_msgEvent); - } - HGBase_LeaveLock(m_msgLock); - - if (0 == msg.msgId) - { - continue; - } - - if (WEB_MSGID_QUIT == msg.msgId) - { - assert(NULL == msg.svr); - assert(0 == msg.usrId); - assert(NULL == msg.param); - - break; - } - else if (WEB_MSGID_CONNET == msg.msgId) - { - assert(NULL != msg.svr); - assert(0 == msg.usrId); - assert(NULL != msg.param); - - ConnectParam* param = (ConnectParam*)msg.param; - if (msg.svr == m_httpServer) - m_httpServer->Connect(param); - else if (msg.svr == m_sockIoServer) - m_sockIoServer->Connect(param); - delete param; - } - else if (WEB_MSGID_DISCONNET == msg.msgId) - { - assert(NULL != msg.svr); - assert(0 != msg.usrId); - assert(NULL == msg.param); - - if (msg.svr == m_httpServer) - m_httpServer->DisConnect(msg.usrId); - else if (msg.svr == m_sockIoServer) - m_sockIoServer->DisConnect(msg.usrId); - } - else if (WEB_MSGID_COMMAND == msg.msgId) - { - assert(NULL != msg.svr); - assert(0 != msg.usrId); - assert(NULL != msg.param); - - if (msg.svr == m_httpServer) - { - HttpCmdParam* param = (HttpCmdParam*)msg.param; - m_httpServer->Command(msg.usrId, param); - delete[] param->data; - param->size = 0; - delete param; - } - else if (msg.svr == m_sockIoServer) - { - SockIoCmdParam* param = (SockIoCmdParam*)msg.param; - m_sockIoServer->Command(msg.usrId, param); - delete[] param->data; - param->size = 0; - delete param; - } - } - else if (WEB_MSGID_EVENT == msg.msgId) - { - assert(NULL != msg.svr); - assert(0 != msg.usrId); - assert(NULL != msg.param); - - if (msg.svr == m_sockIoServer) - { - SockIoEvtParam* param = (SockIoEvtParam*)msg.param; - m_sockIoServer->Event(msg.usrId, param); - delete[] param->data; - param->size = 0; - delete param; - } - } - else if (WEB_MSGID_OPENDEV == msg.msgId) - { - assert(NULL == msg.svr); - assert(0 == msg.usrId); - assert(NULL != msg.param); - - OpenDevParam* param = (OpenDevParam*)msg.param; - m_manager->OpenDev(param); - delete param; - } - else if (WEB_MSGID_CLOSEDEV == msg.msgId) - { - assert(NULL == msg.svr); - assert(0 == msg.usrId); - assert(NULL != msg.param); - - CloseDevParam* param = (CloseDevParam*)msg.param; - m_manager->CloseDev(param); - delete param; - } - else if (WEB_MSGID_SCANFINISH == msg.msgId) - { - assert(NULL == msg.svr); - assert(0 == msg.usrId); - assert(NULL == msg.param); - - m_manager->ScanFinish(); - } - } - - m_httpServer->Close(); - m_sockIoServer->Close(); -} diff --git a/sdk/webservice/1.0/MsgLoop.h b/sdk/webservice/1.0/MsgLoop.h deleted file mode 100644 index 4af7c783..00000000 --- a/sdk/webservice/1.0/MsgLoop.h +++ /dev/null @@ -1,34 +0,0 @@ -锘#ifndef __MSGLOOP_H__ -#define __MSGLOOP_H__ - -#include "base/HGDef.h" -#include "base/HGInc.h" -#include "base/HGEvent.h" -#include "base/HGLock.h" -#include "WebMsg.h" -#include "Manager.h" -#include "HttpServer.h" -#include "SockIoServer.h" -#include - -class MsgLoop -{ -public: - MsgLoop(); - ~MsgLoop(); - - bool Send(const WebMsg* msg); - void Loop(); - -private: - HGEvent m_msgEvent; - HGLock m_msgLock; - HGBool m_bRecvMsg; - std::list m_listMsg; - - Manager *m_manager; - HttpServer *m_httpServer; - SockIoServer *m_sockIoServer; -}; - -#endif /* __MSGLOOP_H__ */ diff --git a/sdk/webservice/1.0/MsgPumpCallback_1_0.cpp b/sdk/webservice/1.0/MsgPumpCallback_1_0.cpp new file mode 100644 index 00000000..bd7081aa --- /dev/null +++ b/sdk/webservice/1.0/MsgPumpCallback_1_0.cpp @@ -0,0 +1,6 @@ +#include "MsgPumpCallback_1_0.h" + +void HGMsgPumpCallback(HGMsgPump msgPump, const HGMsg* msg, HGPointer param) +{ + // 处理 +} \ No newline at end of file diff --git a/sdk/webservice/1.0/MsgPumpCallback_1_0.h b/sdk/webservice/1.0/MsgPumpCallback_1_0.h new file mode 100644 index 00000000..5500cd6d --- /dev/null +++ b/sdk/webservice/1.0/MsgPumpCallback_1_0.h @@ -0,0 +1,8 @@ +#ifndef __MSGPUMPCALLBACK_1_0_H__ +#define __MSGPUMPCALLBACK_1_0_H__ + +#include "base/HGMsgPump.h" + +void HGMsgPumpCallback(HGMsgPump msgPump, const HGMsg* msg, HGPointer param); + +#endif /* __MSGPUMPCALLBACK_1_0_H__ */ \ No newline at end of file diff --git a/sdk/webservice/1.0/WebMsg.h b/sdk/webservice/1.0/Msg_1_0.h similarity index 51% rename from sdk/webservice/1.0/WebMsg.h rename to sdk/webservice/1.0/Msg_1_0.h index 9a7fdb55..433dfe33 100644 --- a/sdk/webservice/1.0/WebMsg.h +++ b/sdk/webservice/1.0/Msg_1_0.h @@ -1,60 +1,19 @@ -锘#ifndef __WEBMSG_H__ -#define __WEBMSG_H__ +#ifndef __MSG_1_0_H__ +#define __MSG_1_0_H__ #include "base/HGDef.h" #include "base/HGInc.h" #include "HttpHead.h" #include -enum WebMsgId -{ - WEB_MSGID_QUIT = 1, - WEB_MSGID_CONNET, - WEB_MSGID_DISCONNET, - WEB_MSGID_COMMAND, - WEB_MSGID_EVENT, - WEB_MSGID_OPENDEV, - WEB_MSGID_CLOSEDEV, - WEB_MSGID_SCANFINISH -}; - -struct WebMsg -{ - HGUInt msgId; /* WEB_MSGID_** */ - HGPointer svr; /* server */ - HGUInt usrId; /* usrId */ - HGPointer param; /* param */ -}; - -struct ConnectParam -{ - HGChar ip[16]; - HGUShort port; -#if defined(HG_CMP_MSC) - SOCKET socket; -#else - int socket; -#endif -}; - -struct HttpCmdParam -{ - HttpHead head; - HGByte* data; - HGUInt size; -}; - -struct SockIoCmdParam -{ - HGByte* data; - HGUInt size; -}; - -struct SockIoEvtParam -{ - HGByte* data; - HGUInt size; -}; +#define MSGID_OPEN_DEVICE 1L +#define MSGID_CLOSE_DEVICE 2L +#define MSGID_SCAN_FINISH 3L +#define MSGID_CONNECT 4L +#define MSGID_DISCONNECT 5L +#define MSGID_HTTP_COMMAND 6L +#define MSGID_SOCKIO_COMMAND 7L +#define MSGID_SOCKIO_EVENT 8L struct OpenDevParam { @@ -66,4 +25,47 @@ struct CloseDevParam std::string devName; }; -#endif /* __WEBMSG_H__ */ \ No newline at end of file +struct ConnectParam +{ + HGPointer svr; + HGChar ip[16]; + HGUShort port; +#if defined(HG_CMP_MSC) + SOCKET socket; +#else + int socket; +#endif +}; + +struct DisConnectParam +{ + HGPointer svr; + HGUInt usrId; +}; + +struct HttpCmdParam +{ + HGPointer svr; + HGUInt usrId; + HttpHead head; + HGByte* data; + HGUInt size; +}; + +struct SockIoCmdParam +{ + HGPointer svr; + HGUInt usrId; + HGByte* data; + HGUInt size; +}; + +struct SockIoEvtParam +{ + HGPointer svr; + HGUInt usrId; + HGByte* data; + HGUInt size; +}; + +#endif /* __MSG_1_0_H__ */ \ No newline at end of file diff --git a/sdk/webservice/1.0/SockIoServer.cpp b/sdk/webservice/1.0/SockIoServer.cpp index 30786e7f..8655ba28 100644 --- a/sdk/webservice/1.0/SockIoServer.cpp +++ b/sdk/webservice/1.0/SockIoServer.cpp @@ -2,8 +2,8 @@ #include "SockIoUser.h" #include "base/HGInfo.h" -SockIoServer::SockIoServer(class MsgLoop* loop, class Manager* manager) - : WebServer(loop, manager) +SockIoServer::SockIoServer(HGMsgPump msgPump, class Manager* manager) + : WebServer(msgPump, manager) { } diff --git a/sdk/webservice/1.0/SockIoServer.h b/sdk/webservice/1.0/SockIoServer.h index 53c6817d..eddfe454 100644 --- a/sdk/webservice/1.0/SockIoServer.h +++ b/sdk/webservice/1.0/SockIoServer.h @@ -2,12 +2,12 @@ #define __SOCKIOSERVER_H__ #include "WebServer.h" -#include "WebMsg.h" +#include "Msg_1_0.h" class SockIoServer : public WebServer { public: - SockIoServer(class MsgLoop *loop, class Manager *manager); + SockIoServer(HGMsgPump msgPump, class Manager *manager); virtual ~SockIoServer(); void Connect(const ConnectParam *param); diff --git a/sdk/webservice/1.0/SockIoUser.cpp b/sdk/webservice/1.0/SockIoUser.cpp index fa8379b1..ad7dd69c 100644 --- a/sdk/webservice/1.0/SockIoUser.cpp +++ b/sdk/webservice/1.0/SockIoUser.cpp @@ -1,5 +1,5 @@ 锘#include "SockIoUser.h" -#include "MsgLoop.h" +#include "WebServer.h" #include "Manager.h" #include "base/HGInfo.h" #include "base/HGUtility.h" @@ -8,9 +8,9 @@ #include "cJSON.h" #if defined(HG_CMP_MSC) -SockIoUser::SockIoUser(class SockIoServer* server, HGUInt id, const char* ip, uint16_t port, SOCKET sockConn) +SockIoUser::SockIoUser(WebServer* server, HGUInt id, const char* ip, uint16_t port, SOCKET sockConn) #else -SockIoUser::SockIoUser(class SockIoServer* server, HGUInt id, const char* ip, uint16_t port, int sockConn) +SockIoUser::SockIoUser(WebServer* server, HGUInt id, const char* ip, uint16_t port, int sockConn) #endif : WebUser(server, id, ip, port, sockConn) { @@ -74,6 +74,46 @@ void SockIoUser::HandleEvent(const SockIoEvtParam* param) SendResponse(param->data, param->size, HGTRUE); } +void SockIoUser::PostCmdMsg(const HGByte* data, HGUInt dataSize) +{ + SockIoCmdParam* param = new SockIoCmdParam; + param->svr = m_server; + param->usrId = m_id; + param->data = new HGByte[dataSize]; + param->size = dataSize; + memcpy(param->data, data, dataSize); + + HGMsg msg; + msg.id = MSGID_SOCKIO_COMMAND; + msg.data = param; + if (HGBASE_ERR_OK != HGBase_PostPumpMessage(m_server->GetMsgPump(), &msg)) + { + delete[] param->data; + param->size = 0; + delete param; + } +} + +void SockIoUser::PostEventMsg(const HGByte* data, HGUInt dataSize) +{ + SockIoEvtParam* param = new SockIoEvtParam; + param->svr = m_server; + param->usrId = m_id; + param->data = new HGByte[dataSize]; + param->size = dataSize; + memcpy(param->data, data, dataSize); + + HGMsg msg; + msg.id = MSGID_SOCKIO_EVENT; + msg.data = param; + if (HGBASE_ERR_OK != HGBase_PostPumpMessage(m_server->GetMsgPump(), &msg)) + { + delete[] param->data; + param->size = 0; + delete param; + } +} + void SockIoUser::ThreadFunc() { HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "SockIoUser::ThreadFunc"); @@ -106,12 +146,7 @@ void SockIoUser::ThreadFunc() if (len <= 0) { // 杩欓噷璺冲嚭锛屽彲鑳芥槸鏈嶅姟鍣ㄥ叧闂簡socketConn锛屾垨鑰呭鎴风鍏抽棴浜唖ocket锛屾垨鑰呯綉缁滄柇寮 - WebMsg msg; - msg.msgId = WEB_MSGID_DISCONNET; - msg.svr = m_server; - msg.usrId = m_id; - msg.param = NULL; - GetLoop()->Send(&msg); + PostDisConnectMsg(); break; } else @@ -151,12 +186,7 @@ void SockIoUser::ThreadFunc() if (!shakeRet) { - WebMsg msg; - msg.msgId = WEB_MSGID_DISCONNET; - msg.svr = m_server; - msg.usrId = m_id; - msg.param = NULL; - GetLoop()->Send(&msg); + PostDisConnectMsg(); break; } @@ -179,12 +209,7 @@ void SockIoUser::ThreadFunc() { if ((0x80 | 0x08) == headData[0]) // 鏂紑杩炴帴 { - WebMsg msg; - msg.msgId = WEB_MSGID_DISCONNET; - msg.svr = m_server; - msg.usrId = m_id; - msg.param = NULL; - GetLoop()->Send(&msg); + PostDisConnectMsg(); break; } else if ((0x80 | 0x09) == headData[0]) // PING甯 @@ -211,12 +236,7 @@ void SockIoUser::ThreadFunc() } else // 甯ч敊璇紝鏂紑杩炴帴 { - WebMsg msg; - msg.msgId = WEB_MSGID_DISCONNET; - msg.svr = m_server; - msg.usrId = m_id; - msg.param = NULL; - GetLoop()->Send(&msg); + PostDisConnectMsg(); break; } } @@ -224,12 +244,7 @@ void SockIoUser::ThreadFunc() { if (0 == (headData[1] & 0x80)) // 蹇呴』缁忚繃鎺╃爜澶勭悊 { - WebMsg msg; - msg.msgId = WEB_MSGID_DISCONNET; - msg.svr = m_server; - msg.usrId = m_id; - msg.param = NULL; - GetLoop()->Send(&msg); + PostDisConnectMsg(); break; } @@ -237,12 +252,7 @@ void SockIoUser::ThreadFunc() { if (0x80 != headData[1]) { - WebMsg msg; - msg.msgId = WEB_MSGID_DISCONNET; - msg.svr = m_server; - msg.usrId = m_id; - msg.param = NULL; - GetLoop()->Send(&msg); + PostDisConnectMsg(); break; } } @@ -250,12 +260,7 @@ void SockIoUser::ThreadFunc() { if (0x80 != headData[1]) { - WebMsg msg; - msg.msgId = WEB_MSGID_DISCONNET; - msg.svr = m_server; - msg.usrId = m_id; - msg.param = NULL; - GetLoop()->Send(&msg); + PostDisConnectMsg(); break; } } @@ -268,12 +273,7 @@ void SockIoUser::ThreadFunc() if (0 == nCmdSize) { - WebMsg msg; - msg.msgId = WEB_MSGID_DISCONNET; - msg.svr = m_server; - msg.usrId = m_id; - msg.param = NULL; - GetLoop()->Send(&msg); + PostDisConnectMsg(); break; } @@ -303,12 +303,7 @@ void SockIoUser::ThreadFunc() if (0 == nCmdSize) { - WebMsg msg; - msg.msgId = WEB_MSGID_DISCONNET; - msg.svr = m_server; - msg.usrId = m_id; - msg.param = NULL; - GetLoop()->Send(&msg); + PostDisConnectMsg(); break; } @@ -342,12 +337,7 @@ void SockIoUser::ThreadFunc() if ((0 != nCmdSizeHigh) || (0 == nCmdSize)) { - WebMsg msg; - msg.msgId = WEB_MSGID_DISCONNET; - msg.svr = m_server; - msg.usrId = m_id; - msg.param = NULL; - GetLoop()->Send(&msg); + PostDisConnectMsg(); break; } @@ -403,23 +393,7 @@ void SockIoUser::ThreadFunc() } else { - SockIoCmdParam* param = new SockIoCmdParam; - param->data = new HGByte[vAllData.size()]; - param->size = (HGUInt)vAllData.size(); - memcpy(param->data, &vAllData[0], vAllData.size()); - - WebMsg msg; - msg.msgId = WEB_MSGID_COMMAND; - msg.svr = m_server; - msg.usrId = m_id; - msg.param = param; - bool b = GetLoop()->Send(&msg); - if (!b) - { - delete[] param->data; - param->size = 0; - delete param; - } + PostCmdMsg(&vAllData[0], vAllData.size()); } bHandle = false; @@ -479,24 +453,7 @@ void SockIoUser::ScanCallback(HGUInt event, void* value1, void* value2, void* pa if (NULL != resp) { - SockIoEvtParam* param = new SockIoEvtParam; - param->data = new HGByte[strlen(resp)]; - param->size = (HGUInt)strlen(resp); - memcpy(param->data, resp, strlen(resp)); - - WebMsg msg; - msg.msgId = WEB_MSGID_EVENT; - msg.svr = p->m_server; - msg.usrId = p->m_id; - msg.param = param; - bool b = p->GetLoop()->Send(&msg); - if (!b) - { - delete[] param->data; - param->size = 0; - delete param; - } - + p->PostEventMsg((const HGByte*)resp, strlen(resp)); delete[] resp; } } diff --git a/sdk/webservice/1.0/SockIoUser.h b/sdk/webservice/1.0/SockIoUser.h index 3f940e5b..5232a889 100644 --- a/sdk/webservice/1.0/SockIoUser.h +++ b/sdk/webservice/1.0/SockIoUser.h @@ -2,15 +2,17 @@ #define __SOCKIOUSER_H__ #include "WebUser.h" -#include "WebMsg.h" +#include "Msg_1_0.h" + +class WebServer; class SockIoUser : public WebUser { public: #if defined(HG_CMP_MSC) - SockIoUser(class SockIoServer* server, HGUInt id, const char* ip, uint16_t port, SOCKET sockConn); + SockIoUser(WebServer* server, HGUInt id, const char* ip, uint16_t port, SOCKET sockConn); #else - SockIoUser(class SockIoServer* server, HGUInt id, const char* ip, uint16_t port, int sockConn); + SockIoUser(WebServer* server, HGUInt id, const char* ip, uint16_t port, int sockConn); #endif virtual ~SockIoUser(); @@ -18,6 +20,8 @@ public: void HandleEvent(const SockIoEvtParam* param); protected: + void PostCmdMsg(const HGByte* data, HGUInt dataSize); + void PostEventMsg(const HGByte* data, HGUInt dataSize); virtual void ThreadFunc(); private: diff --git a/sdk/webservice/1.0/WebServer.cpp b/sdk/webservice/1.0/WebServer.cpp index b41bb232..f989853c 100644 --- a/sdk/webservice/1.0/WebServer.cpp +++ b/sdk/webservice/1.0/WebServer.cpp @@ -1,11 +1,10 @@ #include "WebServer.h" #include "WebUser.h" -#include "MsgLoop.h" #include "base/HGInfo.h" -WebServer::WebServer(class MsgLoop* loop, class Manager* manager) +WebServer::WebServer(HGMsgPump msgPump, Manager* manager) { - m_loop = loop; + m_msgPump = msgPump; m_manager = manager; m_currUserId = 1; @@ -22,12 +21,12 @@ WebServer::~WebServer() } -class MsgLoop* WebServer::GetLoop() +HGMsgPump WebServer::GetMsgPump() { - return m_loop; + return m_msgPump; } -class Manager* WebServer::GetManager() +Manager* WebServer::GetManager() { return m_manager; } @@ -143,6 +142,32 @@ void WebServer::DisConnect(HGUInt usrId) } } +#if defined(HG_CMP_MSC) +void WebServer::PostConnectMsg(const char* ip, uint16_t port, SOCKET sockConn) +#else +void WebServer::PostConnectMsg(const char* ip, uint16_t port, int sockConn) +#endif +{ + ConnectParam* param = new ConnectParam; + param->svr = this; + strcpy(param->ip, ip); + param->port = port; + param->socket = sockConn; + + HGMsg msg; + msg.id = MSGID_CONNECT; + msg.data = param; + if (HGBASE_ERR_OK != HGBase_PostPumpMessage(m_msgPump, &msg)) + { +#if defined(HG_CMP_MSC) + closesocket(param->socket); +#else + close(param->socket); +#endif + delete param; + } +} + int WebServer::GetUserIndex(HGUInt id) { int nIndex = -1; @@ -180,25 +205,6 @@ void WebServer::ThreadFunc(HGThread thread, HGPointer param) break; } - ConnectParam* param = new ConnectParam; - strcpy(param->ip, inet_ntoa(addrClient.sin_addr)); - param->port = ntohs(addrClient.sin_port); - param->socket = socketConn; - - WebMsg msg; - msg.msgId = WEB_MSGID_CONNET; - msg.svr = p; - msg.usrId = 0; - msg.param = param; - bool b = p->m_loop->Send(&msg); - if (!b) - { - delete msg.param; -#if defined(HG_CMP_MSC) - closesocket(socketConn); -#else - close(socketConn); -#endif - } + p->PostConnectMsg(inet_ntoa(addrClient.sin_addr), ntohs(addrClient.sin_port), socketConn); } } \ No newline at end of file diff --git a/sdk/webservice/1.0/WebServer.h b/sdk/webservice/1.0/WebServer.h index a0e7b765..6c1df4d5 100644 --- a/sdk/webservice/1.0/WebServer.h +++ b/sdk/webservice/1.0/WebServer.h @@ -4,17 +4,20 @@ #include "base/HGDef.h" #include "base/HGInc.h" #include "base/HGThread.h" -#include "WebMsg.h" +#include "base/HGMsgPump.h" +#include "Msg_1_0.h" #include +class Manager; + class WebServer { public: - WebServer(class MsgLoop* loop, class Manager* manager); + WebServer(HGMsgPump msgPump, Manager* manager); virtual ~WebServer(); - class MsgLoop* GetLoop(); - class Manager* GetManager(); + HGMsgPump GetMsgPump(); + Manager* GetManager(); bool Open(HGUShort port); bool Close(); @@ -23,12 +26,17 @@ public: void DisConnect(HGUInt usrId); protected: +#if defined(HG_CMP_MSC) + void PostConnectMsg(const char* ip, uint16_t port, SOCKET sockConn); +#else + void PostConnectMsg(const char* ip, uint16_t port, int sockConn); +#endif int GetUserIndex(HGUInt id); static void ThreadFunc(HGThread thread, HGPointer param); protected: - class MsgLoop* m_loop; - class Manager* m_manager; + HGMsgPump m_msgPump; + Manager* m_manager; HGUInt m_currUserId; #if defined(HG_CMP_MSC) diff --git a/sdk/webservice/1.0/WebUser.cpp b/sdk/webservice/1.0/WebUser.cpp index db36712d..9f0c3f60 100644 --- a/sdk/webservice/1.0/WebUser.cpp +++ b/sdk/webservice/1.0/WebUser.cpp @@ -3,9 +3,9 @@ #include "base/HGInfo.h" #if defined(HG_CMP_MSC) -WebUser::WebUser(class WebServer* server, HGUInt id, const char* ip, uint16_t port, SOCKET sockConn) +WebUser::WebUser(WebServer* server, HGUInt id, const char* ip, uint16_t port, SOCKET sockConn) #else -WebUser::WebUser(class WebServer* server, HGUInt id, const char* ip, uint16_t port, int sockConn) +WebUser::WebUser(WebServer* server, HGUInt id, const char* ip, uint16_t port, int sockConn) #endif { m_server = server; @@ -48,16 +48,26 @@ HGUInt WebUser::GetId() return m_id; } -class MsgLoop* WebUser::GetLoop() -{ - return m_server->GetLoop(); -} - -class Manager* WebUser::GetManager() +Manager* WebUser::GetManager() { return m_server->GetManager(); } +void WebUser::PostDisConnectMsg() +{ + DisConnectParam* param = new DisConnectParam; + param->svr = m_server; + param->usrId = m_id; + + HGMsg msg; + msg.id = MSGID_DISCONNECT; + msg.data = param; + if (HGBASE_ERR_OK != HGBase_PostPumpMessage(m_server->GetMsgPump(), &msg)) + { + delete param; + } +} + void WebUser::ThreadFunc() { HGBase_WriteInfo(HGBASE_INFOTYPE_DESC, "WebUser::ThreadFunc"); diff --git a/sdk/webservice/1.0/WebUser.h b/sdk/webservice/1.0/WebUser.h index 6ec7381b..9dcf15af 100644 --- a/sdk/webservice/1.0/WebUser.h +++ b/sdk/webservice/1.0/WebUser.h @@ -5,30 +5,34 @@ #include "base/HGInc.h" #include "base/HGLock.h" #include "base/HGThread.h" +#include "base/HGMsgPump.h" + +class WebServer; +class Manager; class WebUser { public: #if defined(HG_CMP_MSC) - WebUser(class WebServer* server, HGUInt id, const char* ip, uint16_t port, SOCKET sockConn); + WebUser(WebServer* server, HGUInt id, const char* ip, uint16_t port, SOCKET sockConn); #else - WebUser(class WebServer* server, HGUInt id, const char* ip, uint16_t port, int sockConn); + WebUser(WebServer* server, HGUInt id, const char* ip, uint16_t port, int sockConn); #endif virtual ~WebUser(); void Open(); HGUInt GetId(); - class MsgLoop* GetLoop(); - class Manager* GetManager(); + Manager* GetManager(); protected: + void PostDisConnectMsg(); virtual void ThreadFunc(); private: static void ThreadFunc(HGThread thread, HGPointer param); protected: - class WebServer* m_server; + WebServer* m_server; HGLock m_cs; HGUInt m_id; char m_ip[16]; diff --git a/sdk/webservice/main.cpp b/sdk/webservice/main.cpp index 907a0898..d88be18b 100644 --- a/sdk/webservice/main.cpp +++ b/sdk/webservice/main.cpp @@ -2,13 +2,16 @@ #include "base/HGInc.h" #include "base/HGThread.h" #include "base/HGUtility.h" -#include "1.0/MsgLoop.h" -#include "2.0/MsgPump.h" +#include "base/HGMsgPump.h" +#include "1.0/Manager.h" +#include "1.0/HttpServer.h" +#include "1.0/SockIoServer.h" +#include "1.0/MsgPumpCallback_1_0.h" static void ThreadFunc(HGThread thread, HGPointer param) { (void)thread; - (void)param; + HGMsgPump msgPump = (HGMsgPump)param; HGChar cfgPath[256]; HGBase_GetConfigPath(cfgPath, 256); @@ -18,8 +21,17 @@ static void ThreadFunc(HGThread thread, HGPointer param) HGBase_GetProfileInt(cfgPath, "version", "verNum", 2, &verNum); if (1 == verNum) // 浣跨敤1.0鐗堟湰鎺ュ彛 { - MsgLoop loop; - loop.Loop(); + Manager manager(msgPump); + HttpServer httpServer(msgPump, &manager); + SockIoServer sockIoServer(msgPump, &manager); + + httpServer.Open(18999); + sockIoServer.Open(28999); + + HGBase_RunMsgPump(msgPump, HGMsgPumpCallback, NULL); + + sockIoServer.Close(); + httpServer.Close(); } else // 浣跨敤2.0鐗堟湰鎺ュ彛 { @@ -39,11 +51,17 @@ int main() assert(0 == ret); #endif + HGMsgPump msgPump = NULL; + HGBase_CreateMsgPump(&msgPump); + HGThread thread = NULL; - HGBase_OpenThread(ThreadFunc, NULL, &thread); + HGBase_OpenThread(ThreadFunc, msgPump, &thread); HGBase_CloseThread(thread); thread = NULL; + HGBase_DestroyMsgPump(msgPump); + msgPump = NULL; + #if defined(HG_CMP_MSC) WSACleanup(); #endif