00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef _USAGE_ENVIRONMENT_HH
00021 #define _USAGE_ENVIRONMENT_HH
00022
00023 #ifndef _USAGEENVIRONMENT_VERSION_HH
00024 #include "UsageEnvironment_version.hh"
00025 #endif
00026
00027 #ifndef _NETCOMMON_H
00028 #include "NetCommon.h"
00029 #endif
00030
00031 #ifndef _STRDUP_HH
00032
00033 #include "strDup.hh"
00034 #endif
00035
00036 #ifndef NULL
00037 #define NULL 0
00038 #endif
00039
00040 #ifdef __BORLANDC__
00041 #define _setmode setmode
00042 #define _O_BINARY O_BINARY
00043 #endif
00044
00045 class TaskScheduler;
00046
00047
00048
00049 class UsageEnvironment {
00050 public:
00051 void reclaim();
00052
00053
00054 TaskScheduler& taskScheduler() const {return fScheduler;}
00055
00056
00057 typedef char const* MsgString;
00058 virtual MsgString getResultMsg() const = 0;
00059
00060 virtual void setResultMsg(MsgString msg) = 0;
00061 virtual void setResultMsg(MsgString msg1, MsgString msg2) = 0;
00062 virtual void setResultMsg(MsgString msg1, MsgString msg2, MsgString msg3) = 0;
00063 virtual void setResultErrMsg(MsgString msg) = 0;
00064
00065
00066 virtual void appendToResultMsg(MsgString msg) = 0;
00067
00068 virtual void reportBackgroundError() = 0;
00069
00070
00071
00072
00073 virtual int getErrno() const = 0;
00074
00075
00076 virtual UsageEnvironment& operator<<(char const* str) = 0;
00077 virtual UsageEnvironment& operator<<(int i) = 0;
00078 virtual UsageEnvironment& operator<<(unsigned u) = 0;
00079 virtual UsageEnvironment& operator<<(double d) = 0;
00080 virtual UsageEnvironment& operator<<(void* p) = 0;
00081
00082
00083 void* liveMediaPriv;
00084 void* groupsockPriv;
00085
00086 protected:
00087 UsageEnvironment(TaskScheduler& scheduler);
00088 virtual ~UsageEnvironment();
00089
00090 private:
00091 TaskScheduler& fScheduler;
00092 };
00093
00094
00095 typedef void TaskFunc(void* clientData);
00096 typedef void* TaskToken;
00097
00098 class TaskScheduler {
00099 public:
00100 virtual ~TaskScheduler();
00101
00102 virtual TaskToken scheduleDelayedTask(int64_t microseconds, TaskFunc* proc,
00103 void* clientData) = 0;
00104
00105
00106
00107
00108
00109
00110 virtual void unscheduleDelayedTask(TaskToken& prevTask) = 0;
00111
00112
00113
00114 virtual void rescheduleDelayedTask(TaskToken& task,
00115 int64_t microseconds, TaskFunc* proc,
00116 void* clientData);
00117
00118
00119
00120
00121 typedef void BackgroundHandlerProc(void* clientData, int mask);
00122
00123
00124 #define SOCKET_READABLE (1<<1)
00125 #define SOCKET_WRITABLE (1<<2)
00126 #define SOCKET_EXCEPTION (1<<3)
00127 virtual void turnOnBackgroundReadHandling(int socketNum,
00128 BackgroundHandlerProc* handlerProc,
00129 void* clientData) = 0;
00130 virtual void turnOffBackgroundReadHandling(int socketNum) = 0;
00131
00132 virtual void doEventLoop(char* watchVariable = NULL) = 0;
00133
00134
00135
00136
00137
00138
00139 protected:
00140 TaskScheduler();
00141 };
00142
00143 #endif