138 lines
2.5 KiB
C++
138 lines
2.5 KiB
C++
|
#include "MsgLoop.h"
|
|||
|
|
|||
|
MsgLoop::MsgLoop()
|
|||
|
{
|
|||
|
HGBase_CreateEvent(HGTRUE, HGFALSE, &m_msgEvent);
|
|||
|
HGBase_CreateLock(&m_msgLock);
|
|||
|
m_bRecvMsg = HGTRUE;
|
|||
|
|
|||
|
m_manager = new Manager(this);
|
|||
|
m_wsServer = new WebServer(this, ServerType_Ws, 1);
|
|||
|
m_httpServer = new WebServer(this, ServerType_Http, 2);
|
|||
|
m_sockIoServer = new WebServer(this, ServerType_SockIo, 3);
|
|||
|
}
|
|||
|
|
|||
|
MsgLoop::~MsgLoop()
|
|||
|
{
|
|||
|
delete m_sockIoServer;
|
|||
|
m_sockIoServer = NULL;
|
|||
|
delete m_httpServer;
|
|||
|
m_httpServer = NULL;
|
|||
|
delete m_wsServer;
|
|||
|
m_wsServer = 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_wsServer->Open(38999);
|
|||
|
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();
|
|||
|
}
|
|||
|
HGBase_LeaveLock(m_msgLock);
|
|||
|
|
|||
|
if (0 != msg.msgId)
|
|||
|
{
|
|||
|
if (0 == msg.svrId)
|
|||
|
{
|
|||
|
assert(0 == msg.usrId);
|
|||
|
if (WEB_MSGID_QUIT == msg.msgId)
|
|||
|
{
|
|||
|
assert(NULL == msg.param);
|
|||
|
m_wsServer->Close();
|
|||
|
m_httpServer->Close();
|
|||
|
m_sockIoServer->Close();
|
|||
|
}
|
|||
|
else if (WEB_MSGID_OPENDEV == msg.msgId)
|
|||
|
{
|
|||
|
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.param);
|
|||
|
CloseDevParam* param = (CloseDevParam*)msg.param;
|
|||
|
m_manager->CloseDev(param);
|
|||
|
delete param;
|
|||
|
}
|
|||
|
else if (WEB_MSGID_STOPSCAN == msg.msgId)
|
|||
|
{
|
|||
|
assert(NULL == msg.param);
|
|||
|
m_manager->StopScan();
|
|||
|
}
|
|||
|
}
|
|||
|
else if (1 == msg.svrId)
|
|||
|
{
|
|||
|
m_wsServer->HandleMsg(&msg);
|
|||
|
}
|
|||
|
else if (2 == msg.svrId)
|
|||
|
{
|
|||
|
m_httpServer->HandleMsg(&msg);
|
|||
|
}
|
|||
|
else if (3 == msg.svrId)
|
|||
|
{
|
|||
|
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;
|
|||
|
}
|