⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 message_rw.cc

📁 分布式仿真 开放源码
💻 CC
📖 第 1 页 / 共 3 页
字号:
      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 + -