AmCallWatcher.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00028 #ifndef _AM_CALL_WATCHER_H
00029 #define _AM_CALL_WATCHER_H
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039 #define WATCHER_SOFT_EXPIRE_SECONDS 5
00040
00041 #include <string>
00042 using std::string;
00043
00044 #include <map>
00045
00046 #include <utility>
00047 using std::pair;
00048
00049 #include "AmEventQueue.h"
00050 #include "AmEvent.h"
00051 #include "AmThread.h"
00052
00053 class CallStatus;
00054
00058 class CallStatusUpdateEvent : public AmEvent {
00059 string call_id;
00060
00061 CallStatus* init_status;
00062
00063 public:
00064 enum UpdateType {
00065 Initialize = 0,
00066 Update,
00067 Obsolete
00068 };
00069
00070 CallStatusUpdateEvent(UpdateType t, const string& call_id)
00071 : call_id(call_id), AmEvent(t) { }
00072
00073
00074 CallStatusUpdateEvent(const string& call_id, CallStatus* init_status)
00075 : call_id(call_id), init_status(init_status), AmEvent(Initialize) { }
00076
00077 ~CallStatusUpdateEvent() { }
00078
00079 string get_call_id() { return call_id; }
00080 CallStatus* get_init_status() { return init_status; }
00081 };
00082
00086 class CallStatus
00087 {
00088 public:
00089 CallStatus() { }
00090 virtual ~CallStatus() { }
00091
00093 virtual void update(CallStatusUpdateEvent* e) = 0;
00094
00096 virtual CallStatus* copy() = 0;
00097 virtual void dump() { }
00098 };
00099
00100 class AmCallWatcherGarbageCollector;
00109 class AmCallWatcher
00110 : public AmThread,
00111 public AmEventQueue,
00112 public AmEventHandler
00113 {
00114 public:
00115 typedef std::map<string, CallStatus*> CallStatusMap;
00116 typedef std::map<string, pair<CallStatus*, time_t> > CallStatusTimedMap;
00117
00118 private:
00119 CallStatusMap states;
00120 AmMutex states_mut;
00121
00122
00123 CallStatusTimedMap soft_states;
00124 AmMutex soft_states_mut;
00125 AmCallWatcherGarbageCollector* garbage_collector;
00126
00127 public:
00128 AmCallWatcher();
00129 ~AmCallWatcher();
00130
00131
00132 void run();
00133 void on_stop();
00134
00135
00136 void process(AmEvent*);
00137
00138 CallStatus* getStatus(const string& call_id);
00139
00140
00141 void dump();
00142 };
00143
00151 class AmCallWatcherGarbageCollector
00152 : public AmThread
00153 {
00154 AmMutex& mut;
00155 AmCallWatcher::CallStatusTimedMap& garbage;
00156 public:
00157 AmCallWatcherGarbageCollector(AmMutex& mut,
00158 AmCallWatcher::CallStatusTimedMap& garbage)
00159 : mut(mut), garbage(garbage) {}
00160 void run();
00161 void on_stop() { }
00162 };
00163
00164 #endif
Generated on Fri May 16 12:02:05 2008 for SEMS by
1.5.1