00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef CERTI_MESSAGE_HH
00021 #define CERTI_MESSAGE_HH
00022
00023
00024
00025 #include "Exception.hh"
00026 #include "SocketUN.hh"
00027 #include "BasicMessage.hh"
00028 #include "GAV.hh"
00029 #include "FedTimeD.hh"
00030
00031 #include <vector>
00032 #include <string>
00033
00034 namespace certi {
00035
00041 class CERTI_EXPORT Message : public BasicMessage
00042 {
00043 public:
00044 struct MessageTimeStruct {
00045 FederationTime date ;
00046 bool mode ;
00047 };
00048
00049 struct MessageT_O_Struct {
00050 ObjectClassHandle handle ;
00051 UShort size ;
00052 TransportType transport ;
00053 OrderType order ;
00054 };
00055
00056 struct MessageJ_R_Struct {
00057 FederateHandle federate ;
00058 RTI::ResignAction action ;
00059 };
00060
00061 struct MessageO_I_Struct {
00062 ObjectClassHandle handle ;
00063 UShort size ;
00064 FederationTime date ;
00065 };
00066
00067 struct Message_DDM {
00068 SpaceHandle space ;
00069 DimensionHandle dimension ;
00070 RegionHandle region ;
00071 };
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 enum Type {
00083 NOT_USED = 0,
00084 CLOSE_CONNEXION,
00085
00086
00087 CREATE_FEDERATION_EXECUTION,
00088 DESTROY_FEDERATION_EXECUTION,
00089 JOIN_FEDERATION_EXECUTION,
00090 RESIGN_FEDERATION_EXECUTION,
00091 REGISTER_FEDERATION_SYNCHRONIZATION_POINT,
00092 SYNCHRONIZATION_POINT_REGISTRATION_FAILED,
00093 SYNCHRONIZATION_POINT_REGISTRATION_SUCCEEDED,
00094 ANNOUNCE_SYNCHRONIZATION_POINT,
00095 SYNCHRONIZATION_POINT_ACHIEVED,
00096 FEDERATION_SYNCHRONIZED,
00097 REQUEST_FEDERATION_SAVE,
00098 INITIATE_FEDERATE_SAVE,
00099 FEDERATE_SAVE_BEGUN,
00100 FEDERATE_SAVE_COMPLETE,
00101 FEDERATE_SAVE_NOT_COMPLETE,
00102 FEDERATION_SAVED,
00103 FEDERATION_NOT_SAVED,
00104 REQUEST_FEDERATION_RESTORE,
00105 REQUEST_FEDERATION_RESTORE_FAILED,
00106 REQUEST_FEDERATION_RESTORE_SUCCEEDED,
00107 INITIATE_FEDERATE_RESTORE,
00108 FEDERATE_RESTORE_COMPLETE,
00109 FEDERATE_RESTORE_NOT_COMPLETE,
00110 FEDERATION_RESTORED,
00111 FEDERATION_NOT_RESTORED,
00112 FEDERATION_RESTORE_BEGUN,
00113
00114
00115 PUBLISH_OBJECT_CLASS,
00116 UNPUBLISH_OBJECT_CLASS,
00117 PUBLISH_INTERACTION_CLASS,
00118 UNPUBLISH_INTERACTION_CLASS,
00119 SUBSCRIBE_OBJECT_CLASS_ATTRIBUTES,
00120 UNSUBSCRIBE_OBJECT_CLASS,
00121 SUBSCRIBE_INTERACTION_CLASS,
00122 UNSUBSCRIBE_INTERACTION_CLASS,
00123 START_REGISTRATION_FOR_OBJECT_CLASS,
00124 STOP_REGISTRATION_FOR_OBJECT_CLASS,
00125 TURN_INTERACTIONS_ON,
00126 TURN_INTERACTIONS_OFF,
00127
00128
00129 REGISTER_OBJECT_INSTANCE,
00130 UPDATE_ATTRIBUTE_VALUES,
00131 DISCOVER_OBJECT_INSTANCE,
00132 REFLECT_ATTRIBUTE_VALUES,
00133 SEND_INTERACTION,
00134 RECEIVE_INTERACTION,
00135 DELETE_OBJECT_INSTANCE,
00136 LOCAL_DELETE_OBJECT_INSTANCE,
00137 REMOVE_OBJECT_INSTANCE,
00138 CHANGE_ATTRIBUTE_TRANSPORTATION_TYPE,
00139 CHANGE_INTERACTION_TRANSPORTATION_TYPE,
00140 REQUEST_OBJECT_ATTRIBUTE_VALUE_UPDATE,
00141 REQUEST_CLASS_ATTRIBUTE_VALUE_UPDATE,
00142 PROVIDE_ATTRIBUTE_VALUE_UPDATE,
00143 ATTRIBUTES_IN_SCOPE,
00144 ATTRIBUTES_OUT_OF_SCOPE,
00145 TURN_UPDATES_ON_FOR_OBJECT_INSTANCE,
00146 TURN_UPDATES_OFF_FOR_OBJECT_INSTANCE,
00147
00148
00149 REQUEST_ATTRIBUTE_OWNERSHIP_DIVESTITURE,
00150 REQUEST_ATTRIBUTE_OWNERSHIP_ASSUMPTION,
00151 NEGOTIATED_ATTRIBUTE_OWNERSHIP_DIVESTITURE,
00152 ATTRIBUTE_OWNERSHIP_DIVESTITURE_NOTIFICATION,
00153 ATTRIBUTE_OWNERSHIP_ACQUISITION_NOTIFICATION,
00154 REQUEST_ATTRIBUTE_OWNERSHIP_ACQUISITION,
00155 REQUEST_ATTRIBUTE_OWNERSHIP_RELEASE,
00156 QUERY_ATTRIBUTE_OWNERSHIP,
00157 INFORM_ATTRIBUTE_OWNERSHIP,
00158 IS_ATTRIBUTE_OWNED_BY_FEDERATE,
00159 ATTRIBUTE_IS_NOT_OWNED,
00160 ATTRIBUTE_OWNED_BY_RTI,
00161 ATTRIBUTE_OWNERSHIP_ACQUISITION_IF_AVAILABLE,
00162 ATTRIBUTE_OWNERSHIP_UNAVAILABLE,
00163 UNCONDITIONAL_ATTRIBUTE_OWNERSHIP_DIVESTITURE,
00164 ATTRIBUTE_OWNERSHIP_ACQUISITION,
00165 CANCEL_NEGOTIATED_ATTRIBUTE_OWNERSHIP_DIVESTITURE,
00166 ATTRIBUTE_OWNERSHIP_RELEASE_RESPONSE,
00167 CANCEL_ATTRIBUTE_OWNERSHIP_ACQUISITION,
00168 CONFIRM_ATTRIBUTE_OWNERSHIP_ACQUISITION_CANCELLATION,
00169
00170
00171 CHANGE_ATTRIBUTE_ORDER_TYPE,
00172 CHANGE_INTERACTION_ORDER_TYPE,
00173 ENABLE_TIME_REGULATION,
00174 DISABLE_TIME_REGULATION,
00175 ENABLE_TIME_CONSTRAINED,
00176 DISABLE_TIME_CONSTRAINED,
00177 QUERY_LBTS,
00178 QUERY_FEDERATE_TIME,
00179 QUERY_MIN_NEXT_EVENT_TIME,
00180 MODIFY_LOOKAHEAD,
00181 QUERY_LOOKAHEAD,
00182 RETRACT,
00183 REQUEST_RETRACTION,
00184 TIME_ADVANCE_REQUEST,
00185 TIME_ADVANCE_REQUEST_AVAILABLE,
00186 NEXT_EVENT_REQUEST,
00187 NEXT_EVENT_REQUEST_AVAILABLE,
00188 FLUSH_QUEUE_REQUEST,
00189 TIME_ADVANCE_GRANT,
00190 ENABLE_ASYNCHRONOUS_DELIVERY,
00191 DISABLE_ASYNCHRONOUS_DELIVERY,
00192 TIME_REGULATION_ENABLED,
00193 TIME_CONSTRAINED_ENABLED,
00194
00195
00196 DDM_CREATE_REGION,
00197 DDM_MODIFY_REGION,
00198 DDM_DELETE_REGION,
00199 DDM_REGISTER_OBJECT,
00200 DDM_ASSOCIATE_REGION,
00201 DDM_UNASSOCIATE_REGION,
00202 DDM_SUBSCRIBE_ATTRIBUTES,
00203 DDM_UNSUBSCRIBE_ATTRIBUTES,
00204 DDM_SUBSCRIBE_INTERACTION,
00205 DDM_UNSUBSCRIBE_INTERACTION,
00206 DDM_REQUEST_UPDATE,
00207
00208
00209 GET_OBJECT_CLASS_HANDLE,
00210 GET_OBJECT_CLASS_NAME,
00211 GET_ATTRIBUTE_HANDLE,
00212 GET_ATTRIBUTE_NAME,
00213 GET_INTERACTION_CLASS_HANDLE,
00214 GET_INTERACTION_CLASS_NAME,
00215 GET_PARAMETER_HANDLE,
00216 GET_PARAMETER_NAME,
00217 GET_OBJECT_INSTANCE_HANDLE,
00218 GET_OBJECT_INSTANCE_NAME,
00219 GET_SPACE_HANDLE,
00220 GET_SPACE_NAME,
00221 GET_DIMENSION_HANDLE,
00222 GET_DIMENSION_NAME,
00223 GET_ATTRIBUTE_SPACE_HANDLE,
00224 GET_OBJECT_CLASS,
00225 GET_INTERACTION_SPACE_HANDLE,
00226 GET_TRANSPORTATION_HANDLE,
00227 GET_TRANSPORTATION_NAME,
00228 GET_ORDERING_HANDLE,
00229 GET_ORDERING_NAME,
00230 ENABLE_CLASS_RELEVANCE_ADVISORY_SWITCH,
00231 DISABLE_CLASS_RELEVANCE_ADVISORY_SWITCH,
00232 ENABLE_ATTRIBUTE_RELEVANCE_ADVISORY_SWITCH,
00233 DISABLE_ATTRIBUTE_RELEVANCE_ADVISORY_SWITCH,
00234 ENABLE_ATTRIBUTE_SCOPE_ADVISORY_SWITCH,
00235 DISABLE_ATTRIBUTE_SCOPE_ADVISORY_SWITCH,
00236 ENABLE_INTERACTION_RELEVANCE_ADVISORY_SWITCH,
00237 DISABLE_INTERACTION_RELEVANCE_ADVISORY_SWITCH,
00238 TICK_REQUEST,
00239 TICK_REQUEST_NEXT,
00240 TICK_REQUEST_STOP,
00241
00242 LAST
00243 };
00244
00245
00246 struct MessageHeader {
00247 Type type ;
00248 TypeException exception ;
00249 UShort bodySize ;
00250 FederationTime date ;
00251
00252 };
00253
00254 public:
00255 Message();
00256
00260 virtual void serialize(MessageBuffer& msgBuffer);
00264 virtual void deserialize(MessageBuffer& msgBuffer);
00265
00266 void send(SocketUN* socket, MessageBuffer& msgBuffer) throw (NetworkError, NetworkSignal);
00267 void receive(SocketUN* socket, MessageBuffer& msgBuffer) throw (NetworkError, NetworkSignal);
00268
00269 void trace(const char* context);
00270
00271
00272
00273 std::vector <AttributeValue_t> getValueArray();
00274
00275 std::string getLabel() const { return label ; };
00276 void setLabel(std::string new_label);
00277
00278
00279 const std::string getName() const {return name;}
00280 void setName(const char *new_name);
00281
00282 DimensionHandle getDimension() const { return dimension ; };
00283 void setDimension(DimensionHandle);
00284
00285 std::string getFederationName() const { return federationName ; };
00286 void setFederationName(std::string federation_name);
00287
00288 std::string getFederateName() const { return federateName ; };
00289 void setFederateName(std::string federate_name);
00290
00291 std::string getTag() const { return tag ; };
00292 void setTag(std::string new_tag);
00293
00294 SpaceHandle getSpace() const { return space ; };
00295 void setSpace(SpaceHandle);
00296
00297 Type getType() const { return type ; };
00298 void setType(Type);
00299
00300 unsigned long getNumber() const { return number ; };
00301 void setNumber(unsigned long);
00302
00303 long getRegion() const { return region ; };
00304 void setRegion(long);
00305
00306 RTI::TickTime getMinTickTime() const { return minTickTime ; };
00307 void setMinTickTime(RTI::TickTime);
00308
00309 RTI::TickTime getMaxTickTime() const { return maxTickTime ; };
00310 void setMaxTickTime(RTI::TickTime);
00311
00312 void setFederationTimeDelta(FederationTimeDelta);
00313 FederationTimeDelta getFederationTimeDelta() const
00314 { return lookahead ; };
00315
00316 void setAttribute(AttributeHandle);
00317 AttributeHandle getAttribute() const { return attribute ; };
00318
00319 void setInteractionClass(InteractionClassHandle);
00320 InteractionClassHandle getInteractionClass() const {
00321 return interactionClass ;
00322 };
00323
00324 void setObjectClass(ObjectClassHandle);
00325 ObjectClassHandle getObjectClass() const { return objectClass ; };
00326
00327 void setResignAction(RTI::ResignAction);
00328 RTI::ResignAction getResignAction() const { return resignAction ; };
00329
00330 void setFedTime(const double);
00331 double getFedTime() const { return fed_time.getTime(); };
00332
00333 void setLookahead(const double);
00334
00335 void setFederationTime(FederationTime);
00336 FederationTime getFederationTime() const { return fed_time.getTime(); };
00337
00338 void setBoolean(bool);
00339 bool getBoolean() const { return boolean ; };
00340
00341 void setObject(ObjectHandle);
00342 ObjectHandle getObject() const { return object ; };
00343
00344 void setTransportation(TransportType);
00345 TransportType getTransportation() const
00346 { return transport; }
00347
00348 void setOrdering(OrderType);
00349 OrderType getOrdering() const
00350 { return order; }
00351
00352 void setEventRetraction(EventRetractionHandle);
00353 EventRetractionHandle getEventRetraction() const
00354 { return eventRetraction ; };
00355
00356 void setParameter(ParameterHandle);
00357 ParameterHandle getParameter() const { return parameter ; };
00358
00359 void setFederate(FederateHandle);
00360 FederateHandle getFederate() const { return federate ; };
00361
00362 const std::vector<AttributeHandle>& getAHS() const ;
00363 void setAHS(const std::vector<AttributeHandle> &);
00364 void setAHS(const AttributeHandle *, int);
00365
00366 std::vector<std::pair<AttributeHandle, AttributeValue_t> > getAHVPS() const ;
00367 void setAHVPS(const std::vector<std::pair<AttributeHandle, AttributeValue_t> > &);
00368
00369 std::vector<std::pair<ParameterHandle, ParameterValue_t> > getPHVPS() const ;
00370 void setPHVPS(const std::vector<std::pair<ParameterHandle, ParameterValue_t> > &);
00371
00372 void setAttributes(std::vector <AttributeHandle> &, ushort);
00373 void setAttributes(std::vector <AttributeHandle> &, std::vector <AttributeValue_t> &, ushort);
00374 void setParameters(std::vector <ParameterHandle> &, std::vector <ParameterValue_t> &, ushort);
00375
00376 void setException(TypeException, const std::string& the_reason = "");
00377 TypeException getExceptionType() const { return exception ; };
00378 const char *getExceptionReason() const { return exceptionReason.c_str() ; };
00379
00380 std::string getFEDid() const { return FEDid ; };
00381 void setFEDid(std::string FEDid);
00382
00383 void displayvalueArray(char *);
00384
00385
00386 Type type ;
00387
00388 protected:
00389 TypeException exception ;
00390 std::string exceptionReason;
00391
00392 FedTime fed_time;
00393 bool boolean ;
00394 FederationTimeDelta lookahead ;
00395 FederateHandle federate ;
00396 RTI::ResignAction resignAction ;
00397 UShort idCount ;
00398 ObjectHandle firstId ;
00399 ObjectHandle lastId ;
00400 ObjectClassHandle objectClass ;
00401 InteractionClassHandle interactionClass ;
00402 AttributeHandle attribute ;
00403 ParameterHandle parameter ;
00404 ObjectHandle object ;
00405 TransportType transport ;
00406 OrderType order ;
00407 EventRetractionHandle eventRetraction ;
00408 SpaceHandle space ;
00409 DimensionHandle dimension ;
00410
00411
00412 unsigned long number ;
00413 long region ;
00414 RTI::TickTime minTickTime;
00415 RTI::TickTime maxTickTime;
00416
00417 public:
00418
00419
00420 UShort handleArraySize ;
00421 std::vector <AttributeHandle> handleArray ;
00422 std::vector <AttributeValue_t> valueArray ;
00423
00424 Message &operator=(const Message &);
00425
00426 void display(char *);
00427
00428 private:
00429
00430
00431
00432 void readBody(MessageBuffer &msgBuffer);
00433
00434
00435 void readHeader(MessageBuffer &msgBuffer);
00436
00437
00438
00439
00440
00441
00442
00443 void writeBody(MessageBuffer &msgBuffer);
00444
00445
00446 void writeHeader(MessageBuffer &msgBuffer);
00447
00448
00449 void readHandleArray(MessageBuffer &msgBuffer);
00450 void readLabel(MessageBuffer &msgBuffer);
00451 void readName(MessageBuffer &msgBuffer);
00452 void readFederationName(MessageBuffer &msgBuffer);
00453 void readFederateName(MessageBuffer &msgBuffer);
00454 void readResignAction(MessageBuffer &msgBuffer);
00455 void readTag(MessageBuffer &msgBuffer);
00456 void readValueArray(MessageBuffer &msgBuffer);
00457 void readFEDid(MessageBuffer &msgBuffer);
00458
00459
00460 void writeHandleArray(MessageBuffer &msgBuffer);
00461 void writeResignAction(MessageBuffer &msgBuffer);
00462 void writeValueArray(MessageBuffer &msgBuffer);
00463 void writeFEDid(MessageBuffer &msgBuffer);
00464 void writeFederationName(MessageBuffer &msgBuffer);
00465
00466 MessageHeader header ;
00467 std::string label ;
00468 std::string name ;
00469 std::string federateName ;
00470 std::string federationName ;
00471
00472 std::string tag ;
00473 std::string FEDid ;
00474 };
00475
00476 }
00477
00478 #endif // CERTI_MESSAGE_HH