이벤트 파이프라인 자습서
이 문서는 PlayFab 서비스 SDK에서 이벤트 파이프라인 기능을 사용하는 방법에 대한 빠른 단계별 자습서입니다.
1단계 - PlayFab 서비스 SDK 초기화
첫 번째 단계에서는 PFServicesInitialize 및 PFServiceConfigCreateHandle 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);