BasicTaskScheduler0 Class Reference

#include <BasicUsageEnvironment0.hh>

Inheritance diagram for BasicTaskScheduler0:

Inheritance graph
[legend]
Collaboration diagram for BasicTaskScheduler0:

Collaboration graph
[legend]

Public Types

typedef void BackgroundHandlerProc (void *clientData, int mask)

Public Member Functions

virtual ~BasicTaskScheduler0 ()
virtual void SingleStep (unsigned maxDelayTime=0)=0
virtual TaskToken scheduleDelayedTask (int64_t microseconds, TaskFunc *proc, void *clientData)
virtual void unscheduleDelayedTask (TaskToken &prevTask)
virtual void doEventLoop (char *watchVariable)
virtual EventTriggerId createEventTrigger (TaskFunc *eventHandlerProc)
virtual void deleteEventTrigger (EventTriggerId eventTriggerId)
virtual void triggerEvent (EventTriggerId eventTriggerId, void *clientData=NULL)
virtual void rescheduleDelayedTask (TaskToken &task, int64_t microseconds, TaskFunc *proc, void *clientData)
virtual void setBackgroundHandling (int socketNum, int conditionSet, BackgroundHandlerProc *handlerProc, void *clientData)=0
void disableBackgroundHandling (int socketNum)
virtual void moveSocketHandling (int oldSocketNum, int newSocketNum)=0
void turnOnBackgroundReadHandling (int socketNum, BackgroundHandlerProc *handlerProc, void *clientData)
void turnOffBackgroundReadHandling (int socketNum)
virtual void internalError ()

Protected Member Functions

 BasicTaskScheduler0 ()

Protected Attributes

DelayQueue fDelayQueue
HandlerSetfHandlers
int fLastHandledSocketNum
EventTriggerId fTriggersAwaitingHandling
EventTriggerId fLastUsedTriggerMask
TaskFuncfTriggeredEventHandlers [MAX_NUM_EVENT_TRIGGERS]
void * fTriggeredEventClientDatas [MAX_NUM_EVENT_TRIGGERS]
unsigned fLastUsedTriggerNum

Detailed Description

Definition at line 74 of file BasicUsageEnvironment0.hh.


Member Typedef Documentation

typedef void TaskScheduler::BackgroundHandlerProc(void *clientData, int mask) [inherited]

Definition at line 128 of file UsageEnvironment.hh.


Constructor & Destructor Documentation

BasicTaskScheduler0::~BasicTaskScheduler0 (  )  [virtual]

Definition at line 55 of file BasicTaskScheduler0.cpp.

References fHandlers.

00055                                           {
00056   delete fHandlers;
00057 }

BasicTaskScheduler0::BasicTaskScheduler0 (  )  [protected]

Definition at line 46 of file BasicTaskScheduler0.cpp.

References fHandlers, fTriggeredEventClientDatas, fTriggeredEventHandlers, MAX_NUM_EVENT_TRIGGERS, and NULL.


Member Function Documentation

virtual void BasicTaskScheduler0::SingleStep ( unsigned  maxDelayTime = 0  )  [pure virtual]

Implemented in BasicTaskScheduler.

Referenced by doEventLoop().

TaskToken BasicTaskScheduler0::scheduleDelayedTask ( int64_t  microseconds,
TaskFunc proc,
void *  clientData 
) [virtual]

Implements TaskScheduler.

Definition at line 59 of file BasicTaskScheduler0.cpp.

References DelayQueue::addEntry(), fDelayQueue, and DelayQueueEntry::token().

00061                                                                    {
00062   if (microseconds < 0) microseconds = 0;
00063   DelayInterval timeToDelay((long)(microseconds/1000000), (long)(microseconds%1000000));
00064   AlarmHandler* alarmHandler = new AlarmHandler(proc, clientData, timeToDelay);
00065   fDelayQueue.addEntry(alarmHandler);
00066 
00067   return (void*)(alarmHandler->token());
00068 }

void BasicTaskScheduler0::unscheduleDelayedTask ( TaskToken prevTask  )  [virtual]

Implements TaskScheduler.

Definition at line 70 of file BasicTaskScheduler0.cpp.

References fDelayQueue, NULL, and DelayQueue::removeEntry().

00070                                                                    {
00071   DelayQueueEntry* alarmHandler = fDelayQueue.removeEntry((intptr_t)prevTask);
00072   prevTask = NULL;
00073   delete alarmHandler;
00074 }

void BasicTaskScheduler0::doEventLoop ( char *  watchVariable  )  [virtual]

Implements TaskScheduler.

Definition at line 76 of file BasicTaskScheduler0.cpp.

References NULL, and SingleStep().

00076                                                          {
00077   // Repeatedly loop, handling readble sockets and timed events:
00078   while (1) {
00079     if (watchVariable != NULL && *watchVariable != 0) break;
00080     SingleStep();
00081   }
00082 }

EventTriggerId BasicTaskScheduler0::createEventTrigger ( TaskFunc eventHandlerProc  )  [virtual]

Implements TaskScheduler.

Definition at line 84 of file BasicTaskScheduler0.cpp.

References fLastUsedTriggerMask, fLastUsedTriggerNum, fTriggeredEventClientDatas, fTriggeredEventHandlers, MAX_NUM_EVENT_TRIGGERS, and NULL.

00084                                                                                  {
00085   unsigned i = fLastUsedTriggerNum;
00086   EventTriggerId mask = fLastUsedTriggerMask;
00087 
00088   do {
00089     i = (i+1)%MAX_NUM_EVENT_TRIGGERS;
00090     mask >>= 1;
00091     if (mask == 0) mask = 0x80000000;
00092 
00093     if (fTriggeredEventHandlers[i] == NULL) {
00094       // This trigger number is free; use it:
00095       fTriggeredEventHandlers[i] = eventHandlerProc;
00096       fTriggeredEventClientDatas[i] = NULL; // sanity
00097 
00098       fLastUsedTriggerMask = mask;
00099       fLastUsedTriggerNum = i;
00100 
00101       return mask;
00102     }
00103   } while (i != fLastUsedTriggerNum);
00104 
00105   // All available event triggers are allocated; return 0 instead:
00106   return 0;
00107 }

void BasicTaskScheduler0::deleteEventTrigger ( EventTriggerId  eventTriggerId  )  [virtual]

Implements TaskScheduler.

Definition at line 109 of file BasicTaskScheduler0.cpp.

References fLastUsedTriggerMask, fLastUsedTriggerNum, fTriggeredEventClientDatas, fTriggeredEventHandlers, fTriggersAwaitingHandling, MAX_NUM_EVENT_TRIGGERS, and NULL.

00109                                                                           {
00110   fTriggersAwaitingHandling &=~ eventTriggerId;
00111 
00112   if (eventTriggerId == fLastUsedTriggerMask) { // common-case optimization:
00113     fTriggeredEventHandlers[fLastUsedTriggerNum] = NULL;
00114     fTriggeredEventClientDatas[fLastUsedTriggerNum] = NULL;
00115   } else {
00116     // "eventTriggerId" should have just one bit set.
00117     // However, we do the reasonable thing if the user happened to 'or' together two or more "EventTriggerId"s:
00118     EventTriggerId mask = 0x80000000;
00119     for (unsigned i = 0; i < MAX_NUM_EVENT_TRIGGERS; ++i) {
00120       if ((eventTriggerId&mask) != 0) {
00121         fTriggeredEventHandlers[i] = NULL;
00122         fTriggeredEventClientDatas[i] = NULL;
00123       }
00124       mask >>= 1;
00125     }
00126   }
00127 }

void BasicTaskScheduler0::triggerEvent ( EventTriggerId  eventTriggerId,
void *  clientData = NULL 
) [virtual]

Implements TaskScheduler.

Definition at line 129 of file BasicTaskScheduler0.cpp.

References fLastUsedTriggerMask, fLastUsedTriggerNum, fTriggeredEventClientDatas, fTriggersAwaitingHandling, and MAX_NUM_EVENT_TRIGGERS.

00129                                                                                       {
00130   // First, record the "clientData":
00131   if (eventTriggerId == fLastUsedTriggerMask) { // common-case optimization:
00132     fTriggeredEventClientDatas[fLastUsedTriggerNum] = clientData;
00133   } else {
00134     EventTriggerId mask = 0x80000000;
00135     for (unsigned i = 0; i < MAX_NUM_EVENT_TRIGGERS; ++i) {
00136       if ((eventTriggerId&mask) != 0) {
00137         fTriggeredEventClientDatas[i] = clientData;
00138 
00139         fLastUsedTriggerMask = mask;
00140         fLastUsedTriggerNum = i;
00141       }
00142       mask >>= 1;
00143     }
00144   }
00145 
00146   // Then, note this event as being ready to be handled.
00147   // (Note that because this function (unlike others in the library) can be called from an external thread, we do this last, to
00148   //  reduce the risk of a race condition.)
00149   fTriggersAwaitingHandling |= eventTriggerId;
00150 }

void TaskScheduler::rescheduleDelayedTask ( TaskToken task,
int64_t  microseconds,
TaskFunc proc,
void *  clientData 
) [virtual, inherited]

Definition at line 46 of file UsageEnvironment.cpp.

References TaskScheduler::scheduleDelayedTask(), and TaskScheduler::unscheduleDelayedTask().

Referenced by RTSPServer::RTSPClientSession::noteLiveness().

00048                                                             {
00049   unscheduleDelayedTask(task);
00050   task = scheduleDelayedTask(microseconds, proc, clientData);
00051 }

virtual void TaskScheduler::setBackgroundHandling ( int  socketNum,
int  conditionSet,
BackgroundHandlerProc handlerProc,
void *  clientData 
) [pure virtual, inherited]

Referenced by RTSPClient::connectionHandler1(), RTSPClient::connectToServer(), TaskScheduler::disableBackgroundHandling(), RTSPClient::openConnection(), TCPStreamSink::processBuffer(), and TaskScheduler::turnOnBackgroundReadHandling().

void TaskScheduler::disableBackgroundHandling ( int  socketNum  )  [inline, inherited]

Definition at line 135 of file UsageEnvironment.hh.

References NULL, and TaskScheduler::setBackgroundHandling().

Referenced by RTSPClient::connectionHandler1(), RTSPClient::resetTCPSockets(), TCPStreamSink::socketWritableHandler1(), and TaskScheduler::turnOffBackgroundReadHandling().

00135 { setBackgroundHandling(socketNum, 0, NULL, NULL); }

virtual void TaskScheduler::moveSocketHandling ( int  oldSocketNum,
int  newSocketNum 
) [pure virtual, inherited]

Implemented in BasicTaskScheduler.

Referenced by Socket::changePort().

void TaskScheduler::turnOnBackgroundReadHandling ( int  socketNum,
BackgroundHandlerProc handlerProc,
void *  clientData 
) [inline, inherited]

Definition at line 155 of file UsageEnvironment.hh.

References TaskScheduler::setBackgroundHandling(), and SOCKET_READABLE.

Referenced by RTSPServer::RTSPClientSession::changeClientInputSocket(), ByteStreamFileSource::doGetNextFrame(), BasicUDPSource::doGetNextFrame(), SIPClient::invite1(), RTSPServer::RTSPClientSession::RTSPClientSession(), RTSPServer::RTSPServer(), and RTSPServer::setUpTunnelingOverHTTP().

00155                                                                                                          {
00156     setBackgroundHandling(socketNum, SOCKET_READABLE, handlerProc, clientData);
00157   }

void TaskScheduler::turnOffBackgroundReadHandling ( int  socketNum  )  [inline, inherited]

Definition at line 158 of file UsageEnvironment.hh.

References TaskScheduler::disableBackgroundHandling().

Referenced by RTCPInstance::addStreamSocket(), RTSPServer::RTSPClientSession::changeClientInputSocket(), Socket::changePort(), RTSPServer::RTSPClientSession::closeSockets(), SocketDescriptor::deregisterRTPInterface(), ByteStreamFileSource::doStopGettingFrames(), BasicUDPSource::doStopGettingFrames(), SIPClient::invite1(), RTPInterface::stopNetworkReading(), SocketDescriptor::tcpReadHandler1(), BasicUDPSource::~BasicUDPSource(), ByteStreamFileSource::~ByteStreamFileSource(), and RTSPServer::~RTSPServer().

00158 { disableBackgroundHandling(socketNum); }

void TaskScheduler::internalError (  )  [virtual, inherited]

Definition at line 54 of file UsageEnvironment.cpp.

Referenced by BasicTaskScheduler::SingleStep().

00054                                   {
00055   abort();
00056 }


Field Documentation

DelayQueue BasicTaskScheduler0::fDelayQueue [protected]

Definition at line 100 of file BasicUsageEnvironment0.hh.

Referenced by scheduleDelayedTask(), BasicTaskScheduler::SingleStep(), and unscheduleDelayedTask().

HandlerSet* BasicTaskScheduler0::fHandlers [protected]

Definition at line 103 of file BasicUsageEnvironment0.hh.

Referenced by BasicTaskScheduler0(), BasicTaskScheduler::moveSocketHandling(), BasicTaskScheduler::setBackgroundHandling(), BasicTaskScheduler::SingleStep(), and ~BasicTaskScheduler0().

int BasicTaskScheduler0::fLastHandledSocketNum [protected]

Definition at line 104 of file BasicUsageEnvironment0.hh.

Referenced by BasicTaskScheduler::SingleStep().

EventTriggerId BasicTaskScheduler0::fTriggersAwaitingHandling [protected]

Definition at line 107 of file BasicUsageEnvironment0.hh.

Referenced by deleteEventTrigger(), BasicTaskScheduler::SingleStep(), and triggerEvent().

EventTriggerId BasicTaskScheduler0::fLastUsedTriggerMask [protected]

Definition at line 107 of file BasicUsageEnvironment0.hh.

Referenced by createEventTrigger(), deleteEventTrigger(), BasicTaskScheduler::SingleStep(), and triggerEvent().

TaskFunc* BasicTaskScheduler0::fTriggeredEventHandlers[MAX_NUM_EVENT_TRIGGERS] [protected]

Definition at line 108 of file BasicUsageEnvironment0.hh.

Referenced by BasicTaskScheduler0(), createEventTrigger(), deleteEventTrigger(), and BasicTaskScheduler::SingleStep().

void* BasicTaskScheduler0::fTriggeredEventClientDatas[MAX_NUM_EVENT_TRIGGERS] [protected]

Definition at line 109 of file BasicUsageEnvironment0.hh.

Referenced by BasicTaskScheduler0(), createEventTrigger(), deleteEventTrigger(), BasicTaskScheduler::SingleStep(), and triggerEvent().

unsigned BasicTaskScheduler0::fLastUsedTriggerNum [protected]

Definition at line 110 of file BasicUsageEnvironment0.hh.

Referenced by createEventTrigger(), deleteEventTrigger(), BasicTaskScheduler::SingleStep(), and triggerEvent().


The documentation for this class was generated from the following files:
Generated on Thu Feb 2 23:54:43 2012 for live by  doxygen 1.5.2