forked from lfeng1420/BrickGame
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEventEngine.cpp
91 lines (74 loc) · 2 KB
/
EventEngine.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include "stdafx.h"
#include "EventEngine.h"
// Global variable
CEventEngine g_oEventEngine;
bool CEventEngine::Create()
{
return true;
}
void CEventEngine::FireEvent(int nEventID, const char* pContext, int nLen)
{
// Get handlers
TMap_EventHandlerList::iterator itHandlerList = m_mapEventHandlerList.find(nEventID);
if (itHandlerList == m_mapEventHandlerList.end())
{
return;
}
// Trigger event
const TList_EventHandler& lsEventHandler = itHandlerList->second;
TList_EventHandler::const_iterator itHandler = lsEventHandler.cbegin();
for ( ; itHandler != lsEventHandler.cend(); )
{
TList_EventHandler::const_iterator itTempHandler = itHandler++;
(*itTempHandler)->OnEvent(nEventID, pContext, nLen);
}
}
bool CEventEngine::FireVote(int nEventID, char* pContext, int nLen)
{
// Get handlers
TMap_EventHandlerList::iterator itHandlerList = m_mapEventHandlerList.find(nEventID);
if (itHandlerList == m_mapEventHandlerList.end())
{
return false;
}
// Trigger event
const TList_EventHandler& lsEventHandler = itHandlerList->second;
FOREACH_IN_CONST_CONTAINER (TList_EventHandler, lsEventHandler, itHandler)
{
if (!(*itHandler)->OnVote(nEventID, pContext, nLen))
{
return false;
}
}
return true;
}
void CEventEngine::AddHandler(int nEventID, IEventHandler* pHandler)
{
if (pHandler == nullptr)
{
return;
}
m_mapEventHandlerList[nEventID].push_back(pHandler);
}
void CEventEngine::RemoveHandler(IEventHandler* pHandler)
{
if (pHandler == nullptr)
{
return;
}
TMap_EventHandlerList::iterator itHandlerList = m_mapEventHandlerList.begin();
for (; itHandlerList != m_mapEventHandlerList.end(); ++itHandlerList)
{
TList_EventHandler& lsEventHandler = itHandlerList->second;
TList_EventHandler::iterator itHandler = lsEventHandler.begin();
for (; itHandler != lsEventHandler.end(); )
{
if (*itHandler == pHandler)
{
itHandler = lsEventHandler.erase(itHandler);
continue;
}
++itHandler;
}
}
}