f670ca05dd608c9d5b0300ca1dc493f6ffd8afa1
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

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

Stefan Schuermans authored 10 years ago

src/noarch/CallMgr.cpp   2)    Copyright 2011-2014 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
src/noarch/CallMgr.cpp 120)     Time timeout = m_times.begin()->first - Time::now();
src/noarch/CallMgr.cpp 121) 
src/noarch/CallMgr.cpp 122)     // time already passed or reached
src/noarch/CallMgr.cpp 123)     if (timeout <= Time::zero) {
src/noarch/CallMgr.cpp 124) 
src/noarch/CallMgr.cpp 125)       // get time callees and remove entry from time map
src/noarch/CallMgr.cpp 126)       TimeCallees timeCallees = m_times.begin()->second;
src/noarch/CallMgr.cpp 127)       m_times.erase(m_times.begin());
src/noarch/CallMgr.cpp 128) 
src/noarch/CallMgr.cpp 129)       // call time callees
src/noarch/CallMgr.cpp 130)       TimeCallees::const_iterator itTC;
src/noarch/CallMgr.cpp 131)       for (itTC = timeCallees.begin(); itTC != timeCallees.end(); ++itTC) {
src/noarch/CallMgr.cpp 132)         m_timeCallees.erase(*itTC); // first remove request from callee map
src/noarch/CallMgr.cpp 133)         (*itTC)->timeCall(); // then call callee
src/noarch/CallMgr.cpp 134)       }
src/noarch/CallMgr.cpp 135) 
src/noarch/CallMgr.cpp 136)     } // if timeout
src/noarch/CallMgr.cpp 137) 
src/noarch/CallMgr.cpp 138)     // wait for I/O events
src/noarch/CallMgr.cpp 139)     IoMap::const_iterator itM;
src/noarch/CallMgr.cpp 140)     Io::Set rd, wr;
src/noarch/CallMgr.cpp 141)     for (itM = m_iosRead.begin(); itM != m_iosRead.end(); ++itM)
src/noarch/CallMgr.cpp 142)       rd.insert(itM->first);
src/noarch/CallMgr.cpp 143)     for (itM = m_iosWrite.begin(); itM != m_iosWrite.end(); ++itM)
src/noarch/CallMgr.cpp 144)       wr.insert(itM->first);
src/noarch/CallMgr.cpp 145)     Io::wait(rd, wr, timeout);
src/noarch/CallMgr.cpp 146) 
src/noarch/CallMgr.cpp 147)     // call I/O callees with pending events
src/noarch/CallMgr.cpp 148)     Io::Set::const_iterator itS;
src/noarch/CallMgr.cpp 149)     IoCallees::const_iterator itIC;
src/noarch/CallMgr.cpp 150)     for (itS = rd.begin(); itS != rd.end(); ++itS) {
src/noarch/CallMgr.cpp 151)       const IoCallees &ioCallees = m_iosRead[*itS];
src/noarch/CallMgr.cpp 152)       for (itIC = ioCallees.begin(); itIC != ioCallees.end(); ++itIC)
src/noarch/CallMgr.cpp 153)         (*itIC)->ioReadCall(*itS);
src/noarch/CallMgr.cpp 154)     }
src/noarch/CallMgr.cpp 155)     for (itS = wr.begin(); itS != wr.end(); ++itS) {
src/noarch/CallMgr.cpp 156)       const IoCallees &ioCallees = m_iosWrite[*itS];
src/noarch/CallMgr.cpp 157)       for (itIC = ioCallees.begin(); itIC != ioCallees.end(); ++itIC)
src/noarch/CallMgr.cpp 158)         (*itIC)->ioWriteCall(*itS);
Stefan Schuermans first version, plays videos...

Stefan Schuermans authored 13 years ago

src/noarch/CallMgr.cpp 159)     }
src/noarch/CallMgr.cpp 160) 
Stefan Schuermans extended call manager to su...

Stefan Schuermans authored 13 years ago

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