362c1f4c3b5ce9e3fce11167a51fbe4cdb2174de
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

src/noarch/CallMgr.cpp   1) /* Blinker
Stefan Schuermans update copyright header

Stefan Schuermans authored 5 years ago

src/common/CallMgr.cpp   2)    Copyright 2011-2019 Stefan Schuermans <stefan@blinkenarea.org>
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

src/noarch/CallMgr.cpp   3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
src/noarch/CallMgr.cpp   4)    a blinkenarea.org project */
src/noarch/CallMgr.cpp   5) 
src/noarch/CallMgr.cpp   6) #include <map>
src/noarch/CallMgr.cpp   7) #include <set>
src/noarch/CallMgr.cpp   8) 
src/noarch/CallMgr.cpp   9) #include "CallMgr.h"
Stefan Schuermans extended call manager to su...

Stefan Schuermans authored 13 years ago

src/noarch/CallMgr.cpp  10) #include "Io.h"
src/noarch/CallMgr.cpp  11) #include "IoCallee.h"
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

src/noarch/CallMgr.cpp  12) #include "Time.h"
src/noarch/CallMgr.cpp  13) #include "TimeCallee.h"
src/noarch/CallMgr.cpp  14) 
src/noarch/CallMgr.cpp  15) namespace Blinker {
src/noarch/CallMgr.cpp  16) 
src/noarch/CallMgr.cpp  17) /// constructor
src/noarch/CallMgr.cpp  18) CallMgr::CallMgr()
src/noarch/CallMgr.cpp  19) {
src/noarch/CallMgr.cpp  20) }
src/noarch/CallMgr.cpp  21) 
src/noarch/CallMgr.cpp  22) /// destructor
src/noarch/CallMgr.cpp  23) CallMgr::~CallMgr()
src/noarch/CallMgr.cpp  24) {
src/noarch/CallMgr.cpp  25) }
src/noarch/CallMgr.cpp  26) 
Stefan Schuermans extended call manager to su...

Stefan Schuermans authored 13 years ago

src/noarch/CallMgr.cpp  27) /**
src/noarch/CallMgr.cpp  28)  * @brief cancel callback at read I/O event
src/noarch/CallMgr.cpp  29)  * @param[in] callee whom not to call
src/noarch/CallMgr.cpp  30)  * @param[in] io I/O object not to monitor for readability any more
src/noarch/CallMgr.cpp  31)  */
src/noarch/CallMgr.cpp  32) void CallMgr::cancelIoReadCall(IoCallee *callee, Io *io)
src/noarch/CallMgr.cpp  33) {
src/noarch/CallMgr.cpp  34)   // remove callee for this I/O object
src/noarch/CallMgr.cpp  35)   IoCallees &callees = m_iosRead[io];
src/noarch/CallMgr.cpp  36)   callees.erase(callee);
src/noarch/CallMgr.cpp  37) 
src/noarch/CallMgr.cpp  38)   // no more callees -> remove I/O object
src/noarch/CallMgr.cpp  39)   if (callees.empty())
src/noarch/CallMgr.cpp  40)     m_iosRead.erase(io);
src/noarch/CallMgr.cpp  41) }
src/noarch/CallMgr.cpp  42) 
src/noarch/CallMgr.cpp  43) /**
src/noarch/CallMgr.cpp  44)  * @brief request callback at read I/O event
src/noarch/CallMgr.cpp  45)  * @param[in] callee whom to call
src/noarch/CallMgr.cpp  46)  * @param[in] io I/O object to monitor for readability
src/noarch/CallMgr.cpp  47)  */
src/noarch/CallMgr.cpp  48) void CallMgr::requestIoReadCall(IoCallee *callee, Io *io)
src/noarch/CallMgr.cpp  49) {
src/noarch/CallMgr.cpp  50)   m_iosRead[io].insert(callee);
src/noarch/CallMgr.cpp  51) }
src/noarch/CallMgr.cpp  52) 
src/noarch/CallMgr.cpp  53) /**
src/noarch/CallMgr.cpp  54)  * @brief cancel callback at write I/O event
src/noarch/CallMgr.cpp  55)  * @param[in] callee whom not to call
src/noarch/CallMgr.cpp  56)  * @param[in] io I/O object not to monitor for writability any more
src/noarch/CallMgr.cpp  57)  */
src/noarch/CallMgr.cpp  58) void CallMgr::cancelIoWriteCall(IoCallee *callee, Io *io)
src/noarch/CallMgr.cpp  59) {
src/noarch/CallMgr.cpp  60)   // remove callee for this I/O object
src/noarch/CallMgr.cpp  61)   IoCallees &callees = m_iosWrite[io];
src/noarch/CallMgr.cpp  62)   callees.erase(callee);
src/noarch/CallMgr.cpp  63) 
src/noarch/CallMgr.cpp  64)   // no more callees -> remove I/O object
src/noarch/CallMgr.cpp  65)   if (callees.empty())
src/noarch/CallMgr.cpp  66)     m_iosWrite.erase(io);
src/noarch/CallMgr.cpp  67) }
src/noarch/CallMgr.cpp  68) 
src/noarch/CallMgr.cpp  69) /**
src/noarch/CallMgr.cpp  70)  * @brief request callback at write I/O event
src/noarch/CallMgr.cpp  71)  * @param[in] callee whom to call
src/noarch/CallMgr.cpp  72)  * @param[in] io I/O object to monitor for writability
src/noarch/CallMgr.cpp  73)  */
src/noarch/CallMgr.cpp  74) void CallMgr::requestIoWriteCall(IoCallee *callee, Io *io)
src/noarch/CallMgr.cpp  75) {
src/noarch/CallMgr.cpp  76)   m_iosWrite[io].insert(callee);
src/noarch/CallMgr.cpp  77) }
src/noarch/CallMgr.cpp  78) 
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

src/noarch/CallMgr.cpp  79) /**
src/noarch/CallMgr.cpp  80)  * @brief cancel callback at certain time
src/noarch/CallMgr.cpp  81)  * @param[in] callee whom not to call
src/noarch/CallMgr.cpp  82)  */
src/noarch/CallMgr.cpp  83) void CallMgr::cancelTimeCall(TimeCallee *callee)
src/noarch/CallMgr.cpp  84) {
src/noarch/CallMgr.cpp  85)   // find time a call is registered at
src/noarch/CallMgr.cpp  86)   TimeCalleeMap::iterator itCallee;
src/noarch/CallMgr.cpp  87)   itCallee = m_timeCallees.find(callee);
src/noarch/CallMgr.cpp  88)   if (itCallee == m_timeCallees.end())
src/noarch/CallMgr.cpp  89)     return; // no call registered
src/noarch/CallMgr.cpp  90)   const Time &time = itCallee->second;
src/noarch/CallMgr.cpp  91) 
src/noarch/CallMgr.cpp  92)   // remove registered call
src/noarch/CallMgr.cpp  93)   m_times[time].erase(callee);
src/noarch/CallMgr.cpp  94)   m_timeCallees.erase(itCallee);
src/noarch/CallMgr.cpp  95) }
src/noarch/CallMgr.cpp  96) 
src/noarch/CallMgr.cpp  97) /**
src/noarch/CallMgr.cpp  98)  * @brief request callback at certain time
src/noarch/CallMgr.cpp  99)  * @param[in] callee whom to call
src/noarch/CallMgr.cpp 100)  * @param[in] time when to call
src/noarch/CallMgr.cpp 101)  *
src/noarch/CallMgr.cpp 102)  * this cancels a previous time call request from callee
src/noarch/CallMgr.cpp 103)  */
src/noarch/CallMgr.cpp 104) void CallMgr::requestTimeCall(TimeCallee *callee, const Time &time)
src/noarch/CallMgr.cpp 105) {
src/noarch/CallMgr.cpp 106)   // cancel previous call
src/noarch/CallMgr.cpp 107)   cancelTimeCall(callee);
src/noarch/CallMgr.cpp 108) 
src/noarch/CallMgr.cpp 109)   // register call at new time
src/noarch/CallMgr.cpp 110)   m_times[time].insert(callee);
src/noarch/CallMgr.cpp 111)   m_timeCallees[callee] = time;
src/noarch/CallMgr.cpp 112) }
src/noarch/CallMgr.cpp 113) 
src/noarch/CallMgr.cpp 114) /// run call manager
src/noarch/CallMgr.cpp 115) void CallMgr::run()
src/noarch/CallMgr.cpp 116) {
Stefan Schuermans extended call manager to su...

Stefan Schuermans authored 13 years ago

src/noarch/CallMgr.cpp 117)   while (!m_times.empty() || !m_iosRead.empty() || !m_iosWrite.empty()) {
src/noarch/CallMgr.cpp 118) 
src/noarch/CallMgr.cpp 119)     // get time until first call time
Stefan Schuermans fix accessing empty time list

Stefan Schuermans authored 7 years ago

src/common/CallMgr.cpp 120)     Time timeout;
src/common/CallMgr.cpp 121)     if (!m_times.empty()) {
src/common/CallMgr.cpp 122)       timeout = m_times.begin()->first - Time::now();
src/common/CallMgr.cpp 123)     } else {
src/common/CallMgr.cpp 124)       timeout.fromMs(100);
src/common/CallMgr.cpp 125)     }
Stefan Schuermans extended call manager to su...

Stefan Schuermans authored 13 years ago

src/noarch/CallMgr.cpp 126) 
src/noarch/CallMgr.cpp 127)     // time already passed or reached
src/noarch/CallMgr.cpp 128)     if (timeout <= Time::zero) {
src/noarch/CallMgr.cpp 129) 
src/noarch/CallMgr.cpp 130)       // get time callees and remove entry from time map
src/noarch/CallMgr.cpp 131)       TimeCallees timeCallees = m_times.begin()->second;
src/noarch/CallMgr.cpp 132)       m_times.erase(m_times.begin());
src/noarch/CallMgr.cpp 133) 
src/noarch/CallMgr.cpp 134)       // call time callees
src/noarch/CallMgr.cpp 135)       TimeCallees::const_iterator itTC;
Stefan Schuermans fix erasing and processing...

Stefan Schuermans authored 6 years ago

src/common/CallMgr.cpp 136)       for (itTC = timeCallees.begin(); itTC != timeCallees.end(); ) {
src/common/CallMgr.cpp 137)         TimeCallees::const_iterator itTCE = itTC; // save iterator for erase
src/common/CallMgr.cpp 138)         TimeCallee *tc = *itTC; // save pointer to time callee for callback
src/common/CallMgr.cpp 139)         itTC++; // advance loop iterator to next element
src/common/CallMgr.cpp 140)         m_timeCallees.erase(*itTCE); // first remove request from callee map
src/common/CallMgr.cpp 141)         tc->timeCall(); // then call callee
Stefan Schuermans extended call manager to su...

Stefan Schuermans authored 13 years ago

src/noarch/CallMgr.cpp 142)       }
src/noarch/CallMgr.cpp 143) 
src/noarch/CallMgr.cpp 144)     } // if timeout
src/noarch/CallMgr.cpp 145) 
src/noarch/CallMgr.cpp 146)     // wait for I/O events
src/noarch/CallMgr.cpp 147)     IoMap::const_iterator itM;
src/noarch/CallMgr.cpp 148)     Io::Set rd, wr;
src/noarch/CallMgr.cpp 149)     for (itM = m_iosRead.begin(); itM != m_iosRead.end(); ++itM)
src/noarch/CallMgr.cpp 150)       rd.insert(itM->first);
src/noarch/CallMgr.cpp 151)     for (itM = m_iosWrite.begin(); itM != m_iosWrite.end(); ++itM)
src/noarch/CallMgr.cpp 152)       wr.insert(itM->first);
src/noarch/CallMgr.cpp 153)     Io::wait(rd, wr, timeout);
src/noarch/CallMgr.cpp 154) 
src/noarch/CallMgr.cpp 155)     // call I/O callees with pending events
src/noarch/CallMgr.cpp 156)     Io::Set::const_iterator itS;
src/noarch/CallMgr.cpp 157)     IoCallees::const_iterator itIC;
src/noarch/CallMgr.cpp 158)     for (itS = rd.begin(); itS != rd.end(); ++itS) {
src/noarch/CallMgr.cpp 159)       const IoCallees &ioCallees = m_iosRead[*itS];
src/noarch/CallMgr.cpp 160)       for (itIC = ioCallees.begin(); itIC != ioCallees.end(); ++itIC)
src/noarch/CallMgr.cpp 161)         (*itIC)->ioReadCall(*itS);
src/noarch/CallMgr.cpp 162)     }
src/noarch/CallMgr.cpp 163)     for (itS = wr.begin(); itS != wr.end(); ++itS) {
src/noarch/CallMgr.cpp 164)       const IoCallees &ioCallees = m_iosWrite[*itS];
src/noarch/CallMgr.cpp 165)       for (itIC = ioCallees.begin(); itIC != ioCallees.end(); ++itIC)
src/noarch/CallMgr.cpp 166)         (*itIC)->ioWriteCall(*itS);
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

src/noarch/CallMgr.cpp 167)     }
src/noarch/CallMgr.cpp 168) 
Stefan Schuermans extended call manager to su...

Stefan Schuermans authored 13 years ago

src/noarch/CallMgr.cpp 169)   } // while m_times m_iosRead m_iosWrite