00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef CERTI_RTIA_TIME_MANAGEMENT_HH
00025 #define CERTI_RTIA_TIME_MANAGEMENT_HH
00026
00027
00028 #include "certi.hh"
00029 #include "Communications.hh"
00030 #include "FederationManagement.hh"
00031 #include "DeclarationManagement.hh"
00032 #include "ObjectManagement.hh"
00033 #include "OwnershipManagement.hh"
00034 #include "Files.hh"
00035 #include "LBTS.hh"
00036 #include "Message.hh"
00037 #include "Communications.hh"
00038 #include "PrettyDebug.hh"
00039
00040
00041 #ifdef _WIN32
00042 #include <windows.h>
00043 #else
00044 #include <iostream>
00045 #include <sys/types.h>
00046 #include <sys/stat.h>
00047 #include <unistd.h>
00048 #include <stdlib.h>
00049 #endif
00050
00051 using std::cout ;
00052 using std::endl ;
00053
00054 namespace certi {
00055 namespace rtia {
00056
00057 class OwnershipManagement ;
00058
00059 typedef enum {
00060 PAS_D_AVANCEE=1,
00061 TAR,
00062 NER,
00063 TARA,
00064 NERA
00065 } TypeAvancee ;
00066
00067 typedef enum {
00068 AFTER_TAR_OR_NER=1,
00069 AFTER_TAR_OR_NER_WITH_ZERO_LK,
00070 AFTER_TARA_OR_NERA
00071 } TypeGrantedState ;
00072
00073 class TimeManagement : public LBTS
00074 {
00075 public:
00076 TimeManagement(Communications *,
00077 Queues*,
00078 FederationManagement *,
00079 DeclarationManagement *,
00080 ObjectManagement *,
00081 OwnershipManagement *);
00082
00083
00084
00085 void nextEventRequest(FederationTime heure_logique, TypeException &e);
00086 void nextEventRequestAvailable(FederationTime heure_logique, TypeException &e);
00087 bool tick(TypeException &e);
00088 void timeAdvanceRequest(FederationTime heure_logique, TypeException &e);
00089 void timeAdvanceRequestAvailable(FederationTime heure_logique, TypeException &e);
00090 bool testValidTime(FederationTime theTime);
00091
00092
00093 void setLookahead(FederationTimeDelta lookahead, TypeException &e);
00094 void setTimeConstrained(bool etat, TypeException &e);
00095 void setTimeRegulating(bool etat,FederationTime heure_logique,
00096 FederationTimeDelta lookahead, TypeException &e);
00097 void StopperAvanceTemps() {
00098 _avancee_en_cours = PAS_D_AVANCEE ;
00099 };
00100
00101
00102 FederationTime requestFederationTime();
00103 FederationTime requestFederateTime() { return(_heure_courante); };
00104 FederationTimeDelta requestLookahead();
00105 FederationTime requestMinNextEventTime();
00106 FederationTime requestLBTS() { return _LBTS ; };
00107 bool requestContraintState() { return _est_contraint ; };
00108 bool requestRegulateurState() { return _est_regulateur ; };
00109
00110
00111 enum {
00112 NO_TICK,
00113 TICK_BLOCKING,
00114 TICK_NEXT,
00115 TICK_CALLBACK,
00116 TICK_RETURN
00117 } _tick_state;
00118 bool _tick_multiple;
00119 bool _tick_result;
00120 RTI::TickTime _tick_timeout;
00121 RTI::TickTime _tick_stop_time;
00122 bool _asynchronous_delivery ;
00123
00124 private:
00125
00126 void advance(bool &msg_restant, TypeException &e);
00127 void timeAdvance(bool &msg_restant, TypeException &e);
00128 void nextEventAdvance(bool &msg_restant, TypeException &e);
00129 void timeAdvanceGrant(FederationTime, TypeException &);
00130 void flushQueueRequest(FederationTime, TypeException &);
00131 bool executeFederateService(NetworkMessage &msg);
00132 void sendNullMessage(FederationTime heure_logique);
00133 void timeRegulationEnabled(FederationTime, TypeException &e);
00134 void timeConstrainedEnabled(FederationTime, TypeException &e);
00135
00136
00137 Communications *comm ;
00138 Queues *queues ;
00139 FederationManagement *fm ;
00140 DeclarationManagement *dm ;
00141 ObjectManagement *om ;
00142 OwnershipManagement *owm ;
00143
00145 FederationTime lastNullMessageDate ;
00146
00148 TypeAvancee _avancee_en_cours ;
00149 FederationTime date_avancee ;
00150 TypeGrantedState _type_granted_state ;
00151
00152
00153 FederationTime _heure_courante ;
00154 FederationTimeDelta _lookahead_courant ;
00155 bool _est_regulateur ;
00156 bool _est_contraint ;
00157
00158 };
00159
00160 }}
00161
00162 #endif // CERTI_RTIA_TIME_MANAGEMENT_HH
00163
00164