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 _BOOLEAN_HH
00032 #include "Boolean.hh"
00033 #endif
00034
00035 #ifndef _STRDUP_HH
00036
00037 #include "strDup.hh"
00038 #endif
00039
00040 #ifndef NULL
00041 #define NULL 0
00042 #endif
00043
00044 #ifdef __BORLANDC__
00045 #define _setmode setmode
00046 #define _O_BINARY O_BINARY
00047 #endif
00048
00049 class TaskScheduler;
00050
00051
00052
00053 class UsageEnvironment {
00054 public:
00055 void reclaim();
00056
00057
00058 TaskScheduler& taskScheduler() const {return fScheduler;}
00059
00060
00061 typedef char const* MsgString;
00062 virtual MsgString getResultMsg() const = 0;
00063
00064 virtual void setResultMsg(MsgString msg) = 0;
00065 virtual void setResultMsg(MsgString msg1, MsgString msg2) = 0;
00066 virtual void setResultMsg(MsgString msg1, MsgString msg2, MsgString msg3) = 0;
00067 virtual void setResultErrMsg(MsgString msg, int err = 0) = 0;
00068
00069
00070 virtual void appendToResultMsg(MsgString msg) = 0;
00071
00072 virtual void reportBackgroundError() = 0;
00073
00074
00075
00076 virtual void internalError();
00077
00078
00079 virtual int getErrno() const = 0;
00080
00081
00082 virtual UsageEnvironment& operator<<(char const* str) = 0;
00083 virtual UsageEnvironment& operator<<(int i) = 0;
00084 virtual UsageEnvironment& operator<<(unsigned u) = 0;
00085 virtual UsageEnvironment& operator<<(double d) = 0;
00086 virtual UsageEnvironment& operator<<(void* p) = 0;
00087
00088
00089 void* liveMediaPriv;
00090 void* groupsockPriv;
00091
00092 protected:
00093 UsageEnvironment(TaskScheduler& scheduler);
00094 virtual ~UsageEnvironment();
00095
00096 private:
00097 TaskScheduler& fScheduler;
00098 };
00099
00100
00101 typedef void TaskFunc(void* clientData);
00102 typedef void* TaskToken;
00103 typedef u_int32_t EventTriggerId;
00104
00105 class TaskScheduler {
00106 public:
00107 virtual ~TaskScheduler();
00108
00109 virtual TaskToken scheduleDelayedTask(int64_t microseconds, TaskFunc* proc,
00110 void* clientData) = 0;
00111
00112
00113
00114
00115
00116
00117 virtual void unscheduleDelayedTask(TaskToken& prevTask) = 0;
00118
00119
00120
00121 virtual void rescheduleDelayedTask(TaskToken& task,
00122 int64_t microseconds, TaskFunc* proc,
00123 void* clientData);
00124
00125
00126
00127
00128 typedef void BackgroundHandlerProc(void* clientData, int mask);
00129
00130
00131 #define SOCKET_READABLE (1<<1)
00132 #define SOCKET_WRITABLE (1<<2)
00133 #define SOCKET_EXCEPTION (1<<3)
00134 virtual void setBackgroundHandling(int socketNum, int conditionSet, BackgroundHandlerProc* handlerProc, void* clientData) = 0;
00135 void disableBackgroundHandling(int socketNum) { setBackgroundHandling(socketNum, 0, NULL, NULL); }
00136 virtual void moveSocketHandling(int oldSocketNum, int newSocketNum) = 0;
00137
00138
00139 virtual void doEventLoop(char* watchVariable = NULL) = 0;
00140
00141
00142
00143
00144 virtual EventTriggerId createEventTrigger(TaskFunc* eventHandlerProc) = 0;
00145
00146
00147 virtual void deleteEventTrigger(EventTriggerId eventTriggerId) = 0;
00148
00149 virtual void triggerEvent(EventTriggerId eventTriggerId, void* clientData = NULL) = 0;
00150
00151
00152
00153
00154
00155 void turnOnBackgroundReadHandling(int socketNum, BackgroundHandlerProc* handlerProc, void* clientData) {
00156 setBackgroundHandling(socketNum, SOCKET_READABLE, handlerProc, clientData);
00157 }
00158 void turnOffBackgroundReadHandling(int socketNum) { disableBackgroundHandling(socketNum); }
00159
00160 virtual void internalError();
00161
00162 protected:
00163 TaskScheduler();
00164 };
00165
00166 #endif