2022-05-03 10:25:52 +00:00
|
|
|
|
#include "MsgLoop.h"
|
|
|
|
|
|
|
|
|
|
MsgLoop::MsgLoop()
|
|
|
|
|
{
|
|
|
|
|
HGBase_CreateEvent(HGTRUE, HGFALSE, &m_msgEvent);
|
|
|
|
|
HGBase_CreateLock(&m_msgLock);
|
|
|
|
|
m_bRecvMsg = HGTRUE;
|
|
|
|
|
|
2022-05-09 10:58:09 +00:00
|
|
|
|
if (1) // 使用旧协议
|
|
|
|
|
{
|
|
|
|
|
m_manager = new Manager(this);
|
|
|
|
|
m_httpServer = new WebServer(this, ServerType_Http);
|
|
|
|
|
m_sockIoServer = new WebServer(this, ServerType_SockIo);
|
|
|
|
|
m_wsServer = NULL;
|
|
|
|
|
}
|
|
|
|
|
else // 使用新协议
|
|
|
|
|
{
|
|
|
|
|
m_manager = NULL;
|
|
|
|
|
m_httpServer = NULL;
|
|
|
|
|
m_sockIoServer = NULL;
|
|
|
|
|
m_wsServer = new WebServer(this, ServerType_Ws);
|
|
|
|
|
}
|
2022-05-03 10:25:52 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MsgLoop::~MsgLoop()
|
|
|
|
|
{
|
2022-05-09 10:58:09 +00:00
|
|
|
|
if (NULL != m_wsServer)
|
|
|
|
|
{
|
|
|
|
|
delete m_wsServer;
|
|
|
|
|
m_wsServer = NULL;
|
|
|
|
|
}
|
|
|
|
|
if (NULL != m_sockIoServer)
|
|
|
|
|
{
|
|
|
|
|
delete m_sockIoServer;
|
|
|
|
|
m_sockIoServer = NULL;
|
|
|
|
|
}
|
|
|
|
|
if (NULL != m_httpServer)
|
|
|
|
|
{
|
|
|
|
|
delete m_httpServer;
|
|
|
|
|
m_httpServer = NULL;
|
|
|
|
|
}
|
|
|
|
|
if (NULL != m_manager)
|
|
|
|
|
{
|
|
|
|
|
delete m_manager;
|
|
|
|
|
m_manager = NULL;
|
|
|
|
|
}
|
2022-05-03 10:25:52 +00:00
|
|
|
|
|
|
|
|
|
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()
|
|
|
|
|
{
|
2022-05-09 10:58:09 +00:00
|
|
|
|
if (NULL != m_httpServer)
|
|
|
|
|
m_httpServer->Open(18999);
|
|
|
|
|
if (NULL != m_sockIoServer)
|
|
|
|
|
m_sockIoServer->Open(28999);
|
|
|
|
|
if (NULL != m_wsServer)
|
|
|
|
|
m_wsServer->Open(38999);
|
2022-05-03 10:25:52 +00:00
|
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
}
|
|
|
|
|
HGBase_LeaveLock(m_msgLock);
|
|
|
|
|
|
|
|
|
|
if (0 != msg.msgId)
|
|
|
|
|
{
|
2022-05-09 10:58:09 +00:00
|
|
|
|
if (0 == msg.svrType)
|
2022-05-03 10:25:52 +00:00
|
|
|
|
{
|
|
|
|
|
assert(0 == msg.usrId);
|
|
|
|
|
if (WEB_MSGID_QUIT == msg.msgId)
|
|
|
|
|
{
|
|
|
|
|
assert(NULL == msg.param);
|
2022-05-09 10:58:09 +00:00
|
|
|
|
|
|
|
|
|
if (NULL != m_wsServer)
|
|
|
|
|
m_wsServer->Close();
|
|
|
|
|
if (NULL != m_sockIoServer)
|
|
|
|
|
m_sockIoServer->Close();
|
|
|
|
|
if (NULL != m_httpServer)
|
|
|
|
|
m_httpServer->Close();
|
2022-05-03 10:25:52 +00:00
|
|
|
|
}
|
|
|
|
|
else if (WEB_MSGID_OPENDEV == msg.msgId)
|
|
|
|
|
{
|
|
|
|
|
assert(NULL != msg.param);
|
|
|
|
|
OpenDevParam* param = (OpenDevParam*)msg.param;
|
2022-05-09 10:58:09 +00:00
|
|
|
|
if (NULL != m_manager)
|
|
|
|
|
m_manager->OpenDev(param);
|
2022-05-03 10:25:52 +00:00
|
|
|
|
delete param;
|
|
|
|
|
}
|
|
|
|
|
else if (WEB_MSGID_CLOSEDEV == msg.msgId)
|
|
|
|
|
{
|
|
|
|
|
assert(NULL != msg.param);
|
|
|
|
|
CloseDevParam* param = (CloseDevParam*)msg.param;
|
2022-05-09 10:58:09 +00:00
|
|
|
|
if (NULL != m_manager)
|
|
|
|
|
m_manager->CloseDev(param);
|
2022-05-03 10:25:52 +00:00
|
|
|
|
delete param;
|
|
|
|
|
}
|
2022-05-09 10:58:09 +00:00
|
|
|
|
else if (WEB_MSGID_SCANFINISH == msg.msgId)
|
2022-05-03 10:25:52 +00:00
|
|
|
|
{
|
|
|
|
|
assert(NULL == msg.param);
|
2022-05-09 10:58:09 +00:00
|
|
|
|
if (NULL != m_manager)
|
|
|
|
|
m_manager->ScanFinish();
|
2022-05-03 10:25:52 +00:00
|
|
|
|
}
|
|
|
|
|
}
|
2022-05-09 10:58:09 +00:00
|
|
|
|
else if (ServerType_Ws == msg.svrType)
|
2022-05-03 10:25:52 +00:00
|
|
|
|
{
|
2022-05-09 10:58:09 +00:00
|
|
|
|
assert(NULL != m_wsServer);
|
2022-05-03 10:25:52 +00:00
|
|
|
|
m_wsServer->HandleMsg(&msg);
|
|
|
|
|
}
|
2022-05-09 10:58:09 +00:00
|
|
|
|
else if (ServerType_Http == msg.svrType)
|
2022-05-03 10:25:52 +00:00
|
|
|
|
{
|
2022-05-09 10:58:09 +00:00
|
|
|
|
assert(NULL != m_httpServer);
|
2022-05-03 10:25:52 +00:00
|
|
|
|
m_httpServer->HandleMsg(&msg);
|
|
|
|
|
}
|
2022-05-09 10:58:09 +00:00
|
|
|
|
else if (ServerType_SockIo == msg.svrType)
|
2022-05-03 10:25:52 +00:00
|
|
|
|
{
|
2022-05-09 10:58:09 +00:00
|
|
|
|
assert(NULL != m_sockIoServer);
|
2022-05-03 10:25:52 +00:00
|
|
|
|
m_sockIoServer->HandleMsg(&msg);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
HGBase_EnterLock(m_msgLock);
|
|
|
|
|
if (m_listMsg.empty())
|
|
|
|
|
{
|
|
|
|
|
HGBase_ResetEvent(m_msgEvent);
|
|
|
|
|
}
|
|
|
|
|
HGBase_LeaveLock(m_msgLock);
|
|
|
|
|
|
|
|
|
|
if (WEB_MSGID_QUIT == msg.msgId)
|
|
|
|
|
{
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Manager* MsgLoop::GetManager()
|
|
|
|
|
{
|
|
|
|
|
return m_manager;
|
|
|
|
|
}
|