< 이전 | 다음 >

학습 8: 사용자 토픽에 데이터를 공개하도록 코드 추가

이 학습에서는 MyTopic 토픽 요소에 데이터를 공개하도록 동일한 코드를 추가합니다.

이 학습에서는 MyPublisher::publishMyDataWriter를 사용하여 MyTopic에 데이터를 공개합니다. 데이터를 공개하려면 MyTopicStruct 인스턴스를 초기화하고 해당 속성을 완료해야 합니다. 구조체 초기화와 관련이 있으며 값을 추가하는 코드는 표준 DDS API 코드가 아닙니다. 이는 이 학습서의 소프트웨어 요구사항인 RTI Data Distribution Service 4.4d 또는 4.5d에 특정적입니다. 사용자 코드는 DDSMyTopicStructLib.idl 파일에서 생성된 코드를 기반으로 합니다.

사용자 토픽에 데이터를 공개하도록 코드를 추가하려면 다음을 수행하십시오.

  1. MyPublisher 공개자에 대해 publishData 오퍼레이션을 추가하십시오.
    1. MyPublisher를 마우스 오른쪽 단추로 클릭하고 새로 추가 > 오퍼레이션을 선택하십시오.
    2. 오퍼레이션의 기능 창을 열고 publishData로 이름을 지정하십시오.
  2. 구현 탭에서 다음 코드를 입력하고 확인을 클릭하십시오.
    주: 이 학습서 주제에 맞추기 위해 다음 코드 샘플에서는 백슬래시 문자(\)가 if (!RTICdrType_ line means that the next segment of code is part of the if (!RTICdrType_ 행의 끝에 사용되었습니다.
    char buff[32];
    for (int i = 1; i <= 10; ++i)
    {
        Sleep(1000);
        MyTopicStruct myTopicStruct;
        MyTopicStruct_initialize(&myTopicStruct);
        myTopicStruct.myKeyAttribute = i;
        myTopicStruct.myLongAttribute = i;
        myTopicStruct.myBooleanAttribute = (i % 2);
        myTopicStruct.myDoubleAttribute = 1./i;
        //Initializing myStringAttribute
        sprintf(buff, "message number %d", i);
        unsigned int length = strlen(buff);
        if (!RTICdrType_copyString(myTopicStruct.myStringAttribute, buff, \
            length + 1))
        {
            return;
        }
        //Initializing myLongSequence
        const signed int ar[3] = {i, i+1, i+2};
        if (!myTopicStruct.myLongSequenceAttribute.from_array(ar, 3))
        {
            return;
        }
        //publish myTopicStruct
        publishMyDataWriter(myTopicStruct);
        MyTopicStruct_finalize(&myTopicStruct);
    }

    MyTopicStructLib 도메인 참가자 폴더 아래 DefaultConfig 폴더에서(예를 들어, <Rational® Rhapsody® 설치 폴더>\DDSProject3\MyTopicStructLib\DefaultConfig) 데이터로 MyTopicStruct를 초기화하는 방법을 이해하려면 문서 편집기를 사용하여 DDSMyTopicStructLib.cxxDDSMyTopicStructLib.h 파일을 여십시오. 이러한 파일은 MyTopicStructLib를 빌드하는 중에 DDSMyTopicStructLib.idl 파일에서 생성되었습니다. DDSMyTopicStructLib.h 파일을 검토하여 MyTopicStruct 인스턴스를 초기화하고 완료하기 위해 샘플 코드에서 사용되는 MyTopicStruct_initializeMyTopicStruct_finalize 함수를 찾을 수 있습니다. DDSMyTopicStructLib.h 파일에서 myLongSequenceAttribute 유형인 DDS_LongSeq 정의에 대한 몇 가지 조사를 실행한 후 배열에서 myLongSequenceAttribute를 초기화하는 from_array 함수가 발견되었습니다. DDSMyTopicStructLib.cxx 파일에 있는 MyTopicStruct_copy 함수를 보면 myStringAttribute 속성을 초기화하기 위해 샘플 코드에서 사용한 RTICdrType_copyString 함수에 대한 호출을 찾을 수 있습니다.

  3. Win32 API 함수 Sleep을 사용하려면 MyPublisher 공개자의 기능 창을 여십시오. 특성 탭에서 CPP_CG::Class::ImpIncludes 특성을 <windows.h>로 설정한 후 확인을 클릭하십시오.
  4. MyPublisher 공개자에 publishData 오퍼레이션을 추가한 후 이를 호출하는 코드를 입력하십시오.
    1. MyPublishingApplication 도메인 참가자 아래 DefaultConfig 구성의 기능 창을 여십시오.
    2. 초기화 탭의 초기화 코드 필드에서 다음 코드를 추가하십시오.
      p_MyPublisher->publishData();
    3. 확인을 클릭하십시오.
  5. MyPublishingApplication 도메인 참가자에 대한 코드를 생성한 후 빌드하십시오.
    • 코드를 생성하려면 코드 > 생성 > DefaultConfig를 선택하십시오. 다시 로드할 것인지를 묻는 메시지가 표시되면 를 클릭하십시오.
    • 애플리케이션을 빌드하려면 코드 > 빌드 > BuildMyPublishingApplication.exe를 선택하십시오.

학습 체크포인트

이 학습에서는 MyTopic 토픽 요소에 데이터를 공개하도록 코드를 추가하는 방법에 대해 살펴보았습니다.
다음 학습에서는 구독자 엔티티 및 dataReader 엔티티를 작성합니다.
< 이전 | 다음 >

피드백