📄 message_rw.cc
字号:
case UNSUBSCRIBE_OBJECT_CLASS: objectClass = header.VP.O_I.handle ; break ; case PUBLISH_INTERACTION_CLASS: case UNPUBLISH_INTERACTION_CLASS: case SUBSCRIBE_INTERACTION_CLASS: case UNSUBSCRIBE_INTERACTION_CLASS: case TURN_INTERACTIONS_ON: case TURN_INTERACTIONS_OFF: interactionClass = header.VP.O_I.handle ; break ; // --- MessageO_I_Struct, Body not Empty --- case PUBLISH_OBJECT_CLASS: // Body contains HandleArray case SUBSCRIBE_OBJECT_CLASS_ATTRIBUTES: // Body contains HandleArray case REGISTER_OBJECT_INSTANCE: // Body contains object case UPDATE_ATTRIBUTE_VALUES: // B.c. object, Tag, HandleArray[] // ValueArray[] and resignAction. case DISCOVER_OBJECT_INSTANCE: // B.c. object, Tag and resignAction case REFLECT_ATTRIBUTE_VALUES: // B.c. object, Tag, HandleArray[] // and ValueArray[] case DELETE_OBJECT_INSTANCE: // Body contains object, Tag. case REMOVE_OBJECT_INSTANCE: // B.c. object, Tag, Label&resignAction case GET_OBJECT_CLASS_HANDLE: // Body contains Name case GET_OBJECT_CLASS_NAME: // Body contains Name case GET_ATTRIBUTE_HANDLE: // B.c. Name and attribute. case GET_ATTRIBUTE_NAME: // B.c. Name and attribute. objectClass = header.VP.O_I.handle ; handleArraySize = header.VP.O_I.size ; date = header.VP.O_I.date ; break ; case SEND_INTERACTION: // B.c. Tag, HandleArray[], ValueArray[] case RECEIVE_INTERACTION: // B.c. Tag, HandleArray[], ValueArray[], resignAction case GET_INTERACTION_CLASS_HANDLE: // Body contains Name case GET_INTERACTION_CLASS_NAME: // Body contains Name case GET_PARAMETER_HANDLE: // Body contains Name and parameter case GET_PARAMETER_NAME: // Body contains Name and parameter interactionClass = header.VP.O_I.handle ; handleArraySize = header.VP.O_I.size ; date = header.VP.O_I.date ; break ; case GET_SPACE_HANDLE: case GET_SPACE_NAME: case GET_DIMENSION_NAME: case GET_DIMENSION_HANDLE: this->space = header.VP.O_I.handle ; handleArraySize = header.VP.O_I.size ; date = header.VP.O_I.date ; break ; // --- MessageT_O_Struct, No Body --- case CHANGE_INTERACTION_TRANSPORTATION_TYPE: case CHANGE_INTERACTION_ORDER_TYPE: interactionClass = header.VP.T_O.handle ; transport = header.VP.T_O.transport ; order = header.VP.T_O.order ; break ; // Message_DDM, no body case DDM_DELETE_REGION: region = header.VP.ddm.region ; break ; // Message_DDM, Body case DDM_MODIFY_REGION: region = header.VP.ddm.region ; break ; // --- MessageT_O_Struct, Body not empty --- case CHANGE_ATTRIBUTE_TRANSPORTATION_TYPE: // B.c. object, HandleArray. case CHANGE_ATTRIBUTE_ORDER_TYPE: // B.c. object, HandleArray. handleArraySize = header.VP.T_O.size ; transport = header.VP.T_O.transport ; order = header.VP.T_O.order ; break ; // --- TimeStruct, No Body --- // case REQUEST_FEDERATION_TIME: case QUERY_LBTS: case QUERY_FEDERATE_TIME: case TIME_ADVANCE_REQUEST: case NEXT_EVENT_REQUEST: case TIME_ADVANCE_GRANT: date = header.VP.time.date ; break ; case MODIFY_LOOKAHEAD: case QUERY_LOOKAHEAD: lookahead = header.VP.time.date ; break ; case ENABLE_TIME_REGULATION: case DISABLE_TIME_REGULATION: case ENABLE_TIME_CONSTRAINED: case DISABLE_TIME_CONSTRAINED: case TICK_REQUEST: boolean = header.VP.time.mode ; break ; // -- Default Handler -- default: D.Out(pdExcept, "Unknown type %d in ReadHeader.", header.type); throw RTIinternalError("Message: Received unknown Header type."); } // 4- Return depends on body return header.bodySize != 0 ;}voidMessage::readHandleArray(MessageBody *Body){ Body->readBlock((char *) handleArray, handleArraySize * sizeof(AttributeHandle));}// ---------------// -- ReadLabel --// ---------------voidMessage::readLabel(MessageBody *Body){ Body->readString(label, MAX_USER_TAG_LENGTH);}// --------------// -- ReadName --// --------------voidMessage::readName(MessageBody *Body){ Body->readString(name, MAX_USER_TAG_LENGTH);}// -----------------------// -- ReadNomFederation --// -----------------------voidMessage::readFederationName(MessageBody *Body){ Body->readString(federationName, MAX_FEDERATION_NAME_LENGTH);}// -------------------// -- ReadNomFedere --// -------------------voidMessage::readFederateName(MessageBody *Body){ Body->readString(federateName, MAX_FEDERATE_NAME_LENGTH);}// ---------------------// -- ReadresignAction --// ---------------------voidMessage::readResignAction(MessageBody*){ // BUG: Should do something.}// -------------// -- ReadTag --// -------------voidMessage::readTag(MessageBody *Body){ Body->readString(tag, MAX_USER_TAG_LENGTH);}// ----------------------------------------------------------------------------//! readValueArray.voidMessage::readValueArray(MessageBody *Body){ for (int i = 0 ; i < handleArraySize ; i ++) { Body->readString(valueArray[i], MAX_BYTES_PER_VALUE); }}// ----------------------------------------------------------------------------//! Write NetworkMessage Objects to Socket objects.voidMessage::write(SocketUN *socket) throw (NetworkError, NetworkSignal){#ifdef USE_HEADER_AND_BODY bool result ; result = writeHeader(socket); if (result) writeBody(socket);#else socket->send((void *) this, sizeof(Message));#endif}// ----------------------------------------------------------------------------/*! Prepare and write a Body to a socket, should be called after WriteHeader. The message is written onto the socket by WriteHeader if no body is required, or by WriteBody is a body has been required by WriteHeader.*/voidMessage::writeBody(SocketUN *socket){ MessageBody Body ; // 0- Copy the Header at the beginning of the Body, in order to // make a single Socket->Emettre call while sending both. // WARNING: As the Body size is not known yet, we will have to // change it in the copy also! Body.writeBlock((char *) &header, sizeof(MessageHeader)); // If the message carry an exception, the Body will only contain the // exception reason. if (header.exception != e_NO_EXCEPTION) { Body.writeString(exceptionReason); } else { // 1- Prepare Body Structure according to Message type switch(header.type) { // --- No Variable Part, Body not empty --- case CREATE_FEDERATION_EXECUTION: case DESTROY_FEDERATION_EXECUTION: Body.writeString(federationName); break ; case REGISTER_FEDERATION_SYNCHRONIZATION_POINT: case ANNOUNCE_SYNCHRONIZATION_POINT: case REQUEST_FEDERATION_RESTORE_FAILED: Body.writeString(label); Body.writeString(tag); break ; case SYNCHRONIZATION_POINT_REGISTRATION_SUCCEEDED: case SYNCHRONIZATION_POINT_ACHIEVED: case FEDERATION_SYNCHRONIZED: Body.writeString(label); break ; case IS_ATTRIBUTE_OWNED_BY_FEDERATE: case QUERY_ATTRIBUTE_OWNERSHIP: // B.c. object, attribute, Tag Body.writeLongInt(object); Body.writeShortInt(attribute); Body.writeString(tag); break ; case ATTRIBUTE_IS_NOT_OWNED: case INFORM_ATTRIBUTE_OWNERSHIP: Body.writeLongInt(object); Body.writeShortInt(attribute); Body.writeShortInt(federate); break ; case NEGOTIATED_ATTRIBUTE_OWNERSHIP_DIVESTITURE: case REQUEST_ATTRIBUTE_OWNERSHIP_ASSUMPTION: case ATTRIBUTE_OWNERSHIP_ACQUISITION: case REQUEST_ATTRIBUTE_OWNERSHIP_RELEASE: Body.writeLongInt(object); Body.writeShortInt(handleArraySize); writeHandleArray(&Body); Body.writeString(tag); break ; case ATTRIBUTE_OWNERSHIP_ACQUISITION_IF_AVAILABLE: case ATTRIBUTE_OWNERSHIP_ACQUISITION_NOTIFICATION: case ATTRIBUTE_OWNERSHIP_UNAVAILABLE: case UNCONDITIONAL_ATTRIBUTE_OWNERSHIP_DIVESTITURE: case ATTRIBUTE_OWNERSHIP_DIVESTITURE_NOTIFICATION: case CANCEL_NEGOTIATED_ATTRIBUTE_OWNERSHIP_DIVESTITURE: case ATTRIBUTE_OWNERSHIP_RELEASE_RESPONSE: case CANCEL_ATTRIBUTE_OWNERSHIP_ACQUISITION: case CONFIRM_ATTRIBUTE_OWNERSHIP_ACQUISITION_CANCELLATION: Body.writeLongInt(object); Body.writeShortInt(handleArraySize); writeHandleArray(&Body); break ; case DDM_ASSOCIATE_REGION: Body.writeLongInt(object); Body.writeLongInt(region); Body.writeShortInt(boolean); Body.writeShortInt(handleArraySize); writeHandleArray(&Body); break ; case DDM_SUBSCRIBE_ATTRIBUTES: Body.writeLongInt(objectClass); Body.writeLongInt(region); Body.writeShortInt(boolean); Body.writeShortInt(handleArraySize); writeHandleArray(&Body); break ; case DDM_UNASSOCIATE_REGION: Body.writeLongInt(object); Body.writeLongInt(region); break ; case DDM_UNSUBSCRIBE_ATTRIBUTES: Body.writeLongInt(objectClass); Body.writeLongInt(region); break ; case DDM_SUBSCRIBE_INTERACTION: case DDM_UNSUBSCRIBE_INTERACTION: Body.writeLongInt(interactionClass); Body.writeLongInt(region); Body.writeShortInt(boolean); break ; case GET_ATTRIBUTE_SPACE_HANDLE: Body.writeLongInt(objectClass); Body.writeLongInt(attribute); Body.writeLongInt(space); break ; case DDM_CREATE_REGION: Body.writeLongInt(space); Body.writeLongInt(number); Body.writeLongInt(region); break ; case GET_INTERACTION_SPACE_HANDLE: Body.writeLongInt(interactionClass); Body.writeLongInt(space); break ; // --- MessageJ_R_Struct -- case JOIN_FEDERATION_EXECUTION: Body.writeString(federationName); Body.writeString(federateName); break ; // --- MessageO_I_Struct --- case PUBLISH_OBJECT_CLASS: case SUBSCRIBE_OBJECT_CLASS_ATTRIBUTES: writeHandleArray(&Body); break ; case REGISTER_OBJECT_INSTANCE: Body.writeLongInt(object); Body.writeString(name); break ; case UPDATE_ATTRIBUTE_VALUES: case REFLECT_ATTRIBUTE_VALUES:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -