00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef _DTN_SIM_EVENT_H_
00018 #define _DTN_SIM_EVENT_H_
00019
00020 #include <oasys/tclcmd/TclCommand.h>
00021 #include "bundling/BundleEvent.h"
00022
00023 using namespace dtn;
00024
00025 namespace dtnsim {
00026
00027 class ConnState;
00028 class SimEventHandler;
00029
00030
00031
00032
00033 typedef enum {
00034 SIM_AT_EVENT = 0x1,
00035 SIM_BUNDLE_EVENT,
00036 } sim_event_type_t;
00037
00041 static const char*
00042 sim_ev2str(sim_event_type_t event) {
00043 switch (event) {
00044 case SIM_AT_EVENT: return "SIM_AT_EVENT";
00045 case SIM_BUNDLE_EVENT: return "SIM_BUNDLE_EVENT";
00046 }
00047
00048 NOTREACHED;
00049 }
00050
00051
00052
00053
00054 class SimEvent {
00055 public:
00059 SimEvent(sim_event_type_t type, double time, SimEventHandler *handler)
00060 : type_(type), time_(time), handler_(handler), valid_(true) {}
00061
00062 SimEventHandler* handler() { return handler_; }
00063 double time() { return time_ ; }
00064 bool is_valid() { return valid_; }
00065 sim_event_type_t type() { return type_ ; }
00066 const char* type_str() { return sim_ev2str(type_); }
00067
00068 void cancel() { valid_ = false; }
00069
00070 private:
00071 sim_event_type_t type_;
00072 double time_;
00073 SimEventHandler* handler_;
00074 bool valid_;
00075 };
00076
00077
00078
00079
00080 class SimEventCompare {
00081 public:
00085 bool operator () (SimEvent* a, SimEvent* b)
00086 {
00087 return a->time() > b->time();
00088 }
00089 };
00090
00091
00092
00093
00094 class SimAtEvent : public SimEvent {
00095 public:
00096 SimAtEvent(double time, SimEventHandler* handler)
00097 : SimEvent(SIM_AT_EVENT, time, handler), objc_(0) {}
00098
00099 int objc_;
00100 Tcl_Obj* objv_[64];
00101 };
00102
00103
00104
00105
00106 class SimBundleEvent : public SimEvent {
00107 public:
00108 SimBundleEvent(double time, SimEventHandler* handler,
00109 dtn::BundleEvent* event)
00110 : SimEvent(SIM_BUNDLE_EVENT, time, handler), event_(event) {}
00111
00112 dtn::BundleEvent* event_;
00113 };
00114
00115 }
00116
00117 #endif