SimEvent.h

Go to the documentation of this file.
00001 /*
00002  *    Copyright 2004-2006 Intel Corporation
00003  * 
00004  *    Licensed under the Apache License, Version 2.0 (the "License");
00005  *    you may not use this file except in compliance with the License.
00006  *    You may obtain a copy of the License at
00007  * 
00008  *        http://www.apache.org/licenses/LICENSE-2.0
00009  * 
00010  *    Unless required by applicable law or agreed to in writing, software
00011  *    distributed under the License is distributed on an "AS IS" BASIS,
00012  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  *    See the License for the specific language governing permissions and
00014  *    limitations under the License.
00015  */
00016 
00017 #ifndef _DTN_SIM_EVENT_H_
00018 #define _DTN_SIM_EVENT_H_
00019 
00020 #include "bundling/BundleEvent.h"
00021 
00022 using namespace dtn;
00023 
00024 namespace dtnsim {
00025 
00026 class ConnState;
00027 class SimEventHandler;
00028 
00029 /******************************************************************************
00030  * Event Types
00031  *****************************************************************************/
00032 typedef enum {
00033     SIM_ROUTER_EVENT = 0x1,     
00034     SIM_ADD_LINK,                       
00035     SIM_DEL_LINK,                       
00036     SIM_ADD_ROUTE,                      
00037     SIM_DEL_ROUTE,                      
00038     SIM_CONTACT_UP,                     
00039     SIM_CONTACT_DOWN,           
00040     SIM_CONNECTIVITY,           
00041     SIM_NEXT_SENDTIME,          
00042     
00043 } sim_event_type_t;
00044 
00048 static const char* 
00049 sim_ev2str(sim_event_type_t event) {
00050     switch (event) {
00051     case SIM_ROUTER_EVENT:              return "SIM_ROUTER_EVENT";
00052     case SIM_ADD_LINK:                  return "SIM_ADD_LINK";
00053     case SIM_DEL_LINK:                  return "SIM_DEL_LINK";
00054     case SIM_ADD_ROUTE:                 return "SIM_ADD_ROUTE";
00055     case SIM_DEL_ROUTE:                 return "SIM_DEL_ROUTE";
00056     case SIM_CONTACT_UP:                return "SIM_CONTACT_UP";
00057     case SIM_CONTACT_DOWN:              return "SIM_CONTACT_DOWN";
00058     case SIM_CONNECTIVITY:              return "SIM_CONNECTIVITY";
00059     case SIM_NEXT_SENDTIME:             return "SIM_NEXT_SENDTIME";
00060     }
00061 
00062     NOTREACHED;
00063 }
00064 
00065 /******************************************************************************
00066  * Base Event Class
00067  *****************************************************************************/
00068 class SimEvent {
00069 public:
00073     SimEvent(sim_event_type_t type, double time, SimEventHandler *handler)
00074         : type_(type), time_(time), handler_(handler), valid_(true) {}
00075 
00076     SimEventHandler* handler()  { return handler_; }
00077     double time()               { return time_ ; }
00078     bool is_valid()          { return valid_; }
00079     sim_event_type_t type()  { return type_ ; }
00080     const char* type_str()   { return sim_ev2str(type_); }
00081 
00082     void cancel()            { valid_ = false; }
00083 
00084 private:
00085     sim_event_type_t type_;     
00086     double time_;               
00087     SimEventHandler* handler_;  
00088     bool valid_;                
00089 };
00090 
00091 
00092 /******************************************************************************
00093  * SimEventCompare
00094  *****************************************************************************/
00095 class SimEventCompare {
00096 public:
00100     bool operator () (SimEvent* a, SimEvent* b)
00101     {
00102         return a->time() > b->time();
00103     }
00104 };
00105 
00106 /*******************************************************************
00107  * SimRouterEvent -- catch all event class to wrap delivering an event
00108  * to the bundle router at a particular time.
00109  ******************************************************************/
00110 class SimRouterEvent : public SimEvent {
00111 public:
00112     SimRouterEvent(double time, SimEventHandler* handler, BundleEvent* event)
00113         : SimEvent(SIM_ROUTER_EVENT, time, handler), event_(event) {}
00114     
00115     BundleEvent* event_;
00116 };
00117 
00118 /*******************************************************************
00119  * SimAddLinkEvent
00120  ******************************************************************/
00121 class SimAddLinkEvent : public SimEvent {
00122 public:
00123     SimAddLinkEvent(double time, SimEventHandler* handler, Link* link)
00124         : SimEvent(SIM_ADD_LINK, time, handler), link_(link) {}
00125     
00126     Link* link_;
00127 };
00128 
00129 /*******************************************************************
00130  * SimDelLinkEvent
00131  ******************************************************************/
00132 class SimDelLinkEvent : public SimEvent {
00133 public:
00134     SimDelLinkEvent(double time, SimEventHandler* handler, Link* link)
00135         : SimEvent(SIM_DEL_LINK, time, handler), link_(link) {}
00136     
00137     Link* link_;
00138 };
00139 
00140 /*******************************************************************
00141  * SimAddRouteEvent
00142  ******************************************************************/
00143 class SimAddRouteEvent : public SimEvent {
00144 public:
00145     SimAddRouteEvent(double time, SimEventHandler* handler,
00146                      const EndpointIDPattern& dest, const char* nexthop)
00147         : SimEvent(SIM_ADD_ROUTE, time, handler),
00148           dest_(dest), nexthop_(nexthop) {}
00149     
00150     EndpointIDPattern dest_;
00151     std::string nexthop_;
00152 };
00153 
00154 /*******************************************************************
00155  * SimConnectivityEvent
00156  ******************************************************************/
00157 class SimConnectivityEvent : public SimEvent {
00158 public:
00159     SimConnectivityEvent(double time, SimEventHandler* handler,
00160                          const char* n1, const char* n2, ConnState* state)
00161         : SimEvent(SIM_CONNECTIVITY, time, handler),
00162           n1_(n1), n2_(n2), state_(state) {}
00163 
00164     std::string n1_, n2_;
00165     ConnState* state_;
00166 };
00167 
00168 } // namespace dtnsim
00169 
00170 #endif /* _DTN_SIM_EVENT_H_ */

Generated on Sat Sep 8 08:43:33 2007 for DTN Reference Implementation by  doxygen 1.5.3