직렬화 및 직렬화 해제를 위한 함수

주소 공간 간에 전송될 이벤트에 인수가 없거나 정수 또는 chars와 같은 인수만 기본 유형으로 갖는 경우, RiDSendRemoteEvent 함수를 호출해야 합니다. 그러나 전송될 이벤트에 오브젝트가 인수로 포함된 경우, 두 개의 함수(이벤트 인수 직렬화를 위한 함수와 직렬화 해제를 위한 함수)도 제공해야 합니다.

직렬화 함수

RhpAddress evStartSerialize(struct RiCEvent* const ev, const RhpAddress 
buffer, RhpPositive bufferSize, RhpPositive* resultBufferSize);

리턴값 - 직렬화된 이벤트를 가리키는 포인터

ev - 직렬화될 이벤트의 포인터

buffer - 직렬화된 이벤트에 사용할 수 있는 로컬 버퍼(사용자는 자체 버퍼를 대신 할당할 수 있음)

bufferSize - buffer 매개변수의 크기(바이트)

resultBufferSize - 리턴된 직렬화된 이벤트의 크기를 저장하기 위한 포인터

직렬화 해제 함수

RiCEvent* evStartUnserialize(RhpAddress const serializedBuffer, RhpPositive serializedBufferSize);

리턴값 - 직렬화 해제된 이벤트를 가리키는 포인터

serializedBuffer - 직렬화된 버퍼를 가리키는 포인터

serializedBufferSize - serializedBuffer 매개변수의 크기

직렬화 및 직렬화 해제 함수 예제

이 예제는 다음과 같이 정의된 evStart 이벤트를 나타냅니다.

struct evStart {
   RiCEvent ric_event;
   /***    User explicit entries    ***/
   char* msg;
};
RhpAddress evStartSerialize(struct RiCEvent* const ev, const RhpAddress 
buffer, RhpPositive bufferSize, RhpPositive* resultBufferSize) 
{  
        evStart* castedEv = (evStart*)ev;
        RhpPositive msgLength = strlen(castedEv->msg);
        /* Testing the size of the message parameter against the size of local 
buffer */
        if (bufferSize <= msgLength)
        {
              /* buffer too small - serialization is aborted */
              return NULL; 
        }
        /* copy the message string + the null terminating */
        memcpy(buffer, castedEv->msg, msgLength + 1);
        *resultBufferSize = msgLength + 1;
        return buffer; 
}

다음 함수는 receivedBuffer라는 로컬 버퍼를 사용하여 매개변수로 전달된 evStart 이벤트의 문자열을 저장합니다.

RiCEvent* evStartUnserialize(RhpAddress const serializedBuffer, 
RhpPositive serializedBufferSize) {
        /* copy the message to a local buffer */
        memcpy(receivedBuffer, serializedBuffer, serializedBufferSize);
        return (RiCEvent*)RiC_Create_evStart(receivedBuffer);
}

피드백