다음을 통해 공유


이벤트 파이프라인 자습서

이 문서는 PlayFab 서비스 SDK에서 이벤트 파이프라인 기능을 사용하는 방법에 대한 빠른 단계별 자습서입니다.

1단계 - PlayFab 서비스 SDK 초기화

첫 번째 단계에서는 PFServicesInitializePFServiceConfigCreateHandle API를 사용하여 PF Service SDK를 초기화합니다.

PFServiceConfigCreateHandle API는 PlayFab 게임 관리자의 타이틀에서 가져올 수 있는 연결 문자열과 타이틀 ID를 받습니다.

세 번째 매개 변수는 만들어진 구성을 나타내는 PFServiceConfigHandle 구조체입니다. 이 서비스 구성 핸들은 다음 단계에서 사용됩니다.

PFServiceConfigHandle serviceConfigHandle;

PFServicesInitialize(nullptr);

PFServiceConfigCreateHandle(
    "titleConnectionString",
    "titleId",
    &serviceConfigHandle
);

2단계 - 원격 분석 이벤트 파이프라인 만들기

다음으로 PFEventPipelineCreateTelemetryPipelineHandleWithKey API를 사용하여 원격 분석 키를 통해 원격 분석 이벤트 파이프라인을 만들어 보겠습니다. 원격 분석 키는 PlayFab 게임 관리자를 통해 만들어지고 관리됩니다.

PFEventPipelineTelemetryKeyConfig 구조체를 만들 때 실제 원격 분석 키와 SDK 초기화 중에 얻은 서비스 구성 핸들을 전달합니다.

PFEventPipelineHandle handle;
XTaskQueueHandle taskQueueHandle;

XTaskQueueCreate(XTaskQueueDispatchMode::ThreadPool, XTaskQueueDispatchMode::Manual, &taskQueueHandle);

PFEventPipelineTelemetryKeyConfig telemetryKeyConfig
{
    "myTelemetryKey",
    serviceConfigHandle,
};

HRESULT hr = PFEventPipelineCreateTelemetryPipelineHandleWithKey(
    &telemetryKeyConfig,
    taskQueueHandle,
    nullptr,
    nullptr,
    nullptr,
    &handle
);

if (FAILED(hr))
{
    printf("Failed creating event pipeline: 0x%x\r\n", hr);
    return;
}

3단계 - 파이프라인 구성 업데이트

파이프라인 구성을 업데이트해 보겠습니다. 이 예제에서는 최대 10개의 이벤트 일괄 처리를 보내려고 합니다(기본값은 5).

또한 maxWaitTimeInSeconds 및 pollDelayInMs를 null 포인터로 보내므로 각 파이프라인 형식의 기본값을 사용합니다.

또한 "중간" 압축 수준을 지정하여 이 속성을 설정하면 본문 페이로드가 압축되고 네트워크 리소스 사용률을 최적화하는 데 도움이 됩니다.

그런 다음 이전 단계와 PFEventPipelineConfig 구조체에서 가져온 PFEventPipelineHandle을 전달하여 PFEventPipelineUpdateConfiguration을 호출합니다.

uint32_t maxEvents = 10;
PFHCCompressionLevel compressionLevel = PFHCCompressionLevel::Medium;

PFEventPipelineConfig eventPipelineConfig
{
    &maxEvents,         // maxEventsPerBatch
    nullptr,            // maxWaitTimeInSeconds
    nullptr,            // pollDelayInMs
    &compressionLevel   // compressionLevel
};

HRESULT hr = PFEventPipelineUpdateConfiguration(
    handle,
    eventPipelineConfig
);

if (FAILED(hr))
{
    printf("Failed updating event pipeline configuration: 0x%x\r\n", hr);
    return;
};

4단계 - 이벤트 내보내기

이 단계에서는 PFEventPipelineEmitEvent API를 통해 이름이 "TelemetryKeyEvent"인 1개의 이벤트만 내보내도록 진행합니다.

지금까지 엔터티 인증을 제공하지 않았기 때문에 이 이벤트는 엔터티에 연결되지 않습니다.

PFEvent myEvent
{
    nullptr,
    "custom.playfab.events.PlayFab.Test.TelemetryEventPipelineTests",
    "TelemetryKeyEvent",
    nullptr,
    "{}"
};

HRESULT hr = PFEventPipelineEmitEvent(
    handle,
    &myEvent
);

if (FAILED(hr))
{
    printf("Failed emitting event: 0x%x\r\n", hr);
    return;
}

5단계 - 엔터티 가져오기

여기서는 이벤트와의 연결을 시작하는 데 사용할 수 있는 엔터티를 가져오려고 합니다.

이 자습서에서는 유효한 PFEntityHandle을 가져오기 위해 PFAuthenticationReLoginWithXUserAsync API를 호출합니다.

참고 항목

PFAuthenticationLoginWithXUserRequest의 일부로 전달된 userHandle 개체는 XUserHandle 형식입니다. 유효한 XUserHandle을 가져오는 방법에 대한 단계는 이 자습서의 범위를 벗어납니다. 이 항목에 대한 자세한 내용은 XUserAddAsync 설명서를 참조하세요.

PFEntityHandle entityHandle;

PFAuthenticationLoginWithXUserRequest request{};
request.createAccount = true;
request.user = userHandle; // An XUserHandle obtained from XUserAddAsync

XAsyncBlock async{};

HRESULT hr = PFAuthenticationReLoginWithXUserAsync(entityHandle, &request, &async);

if (FAILED(hr))
{
    printf("Failed PFAuthenticationReLoginWithXUserAsync: 0x%x\r\n", hr);
    return;
}

hr = XAsyncGetStatus(&async, true); // This is doing a blocking wait for completion, but you can use the XAsyncBlock to set a callback instead for async style usage

if (FAILED(hr))
{
    printf("Failed XAsyncGetStatus: 0x%x\r\n", hr);
    return;
}

6단계 - 파이프라인에 엔터티 추가

유효한 엔터티가 이미 있으므로 PFEventPipelineAddUploadingEntity를 호출하고 이전 단계의 이벤트 파이프라인 핸들 및 엔터티 핸들을 전달할 수 있습니다. 이 작업을 통해 파이프라인은 엔터티 인증을 사용하도록 전환할 수 있습니다.

HRESULT hr = PFEventPipelineAddUploadingEntity(
    handle,
    entityHandle
);

if (FAILED(hr))
{
    printf("Failed adding uploading entity: 0x%x\r\n", hr);
    return;
}

7단계 - 이벤트 내보내기

이 절차는 이전 이벤트 제출과 동일합니다.

두 가지 차이점은 다음과 같습니다.

  • 이 이벤트를 더 명확하게 하기 위해 다른 이름("EntityEvent")으로 태그를 지정합니다.
  • 이 이벤트는 기록되고 이전에 가져온 엔터티와 연결됩니다.
PFEvent myEvent
{
    nullptr,
    "custom.playfab.events.PlayFab.Test.TelemetryEventPipelineTests",
    "EntityEvent",
    nullptr,
    "{}"
};

hr = PFEventPipelineEmitEvent(
    handle,
    &myEvent
);

if (FAILED(hr))
{
    printf("Failed emitting event: 0x%x\r\n", hr);
    return;
}

8단계 - 이벤트 파이프라인 핸들 닫기

마지막으로 이벤트 업로드가 완료되면 파이프라인 핸들을 전달하는 PFEventPipelineCloseHandle을 호출하기만 하면 됩니다.

PFEventPipelineCloseHandle(handle);

참고 항목