Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
EventProcessor.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6#include "EventProcessor.h"
7
9{
10 // update time
11 m_time += p_time;
12
13 // main event loop
14 EventList::iterator i;
15 while (((i = m_events.begin()) != m_events.end()) && i->first <= m_time)
16 {
17 // get and remove event from queue
18 BasicEvent* Event = i->second;
19 m_events.erase(i);
20
21 if (!Event->to_Abort)
22 {
23 if (Event->Execute(m_time, p_time))
24 {
25 // completely destroy event if it is not re-added
26 delete Event;
27 }
28 }
29 else
30 {
31 Event->Abort(m_time);
32 delete Event;
33 }
34 }
35}
36
38{
39 // prevent event insertions
40 m_aborting = true;
41
42 // first, abort all existing events
43 for (EventList::iterator i = m_events.begin(); i != m_events.end();)
44 {
45 EventList::iterator i_old = i;
46 ++i;
47
48 i_old->second->to_Abort = true;
49 i_old->second->Abort(m_time);
50 if (force || i_old->second->IsDeletable())
51 {
52 delete i_old->second;
53
54 if (!force) // need per-element cleanup
55 m_events.erase(i_old);
56 }
57 }
58
59 // fast clear event list (in force case)
60 if (force)
61 m_events.clear();
62}
63
64void EventProcessor::AddEvent(BasicEvent* Event, uint64 e_time, bool set_addtime)
65{
66 if (set_addtime) Event->m_addTime = m_time;
67 Event->m_execTime = e_time;
68 m_events.insert(std::pair<uint64, BasicEvent*>(e_time, Event));
69}
70
72{
73 return(m_time + t_offset);
74}
75
std::uint32_t uint32
Definition Define.h:77
std::uint64_t uint64
Definition Define.h:76
virtual void Abort(uint64)
virtual bool Execute(uint64, uint32)
uint64 m_addTime
uint64 m_execTime
void AddEvent(BasicEvent *Event, uint64 e_time, bool set_addtime=true)
void KillAllEvents(bool force)
EventList m_events
uint64 CalculateTime(uint64 t_offset) const
void Update(uint32 p_time)