> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 이벤트 기반 순위표 예제 코드

> 상위 결과, 페이지 매김, 지정된 순위 또는 플레이어 중심 조회를 포함한 XBOX Live 이벤트 기반 순위표용 XSAPI 코드 샘플입니다.

이 항목에서는 기본 순위표 표시, 지정된 결과 페이지 가져오기, 순위표의 지정된 플레이어로 건너뛰기, 다음 순위표 페이지 가져오기에 대한 예제 코드를 제공합니다.

이 항목은 다음 내용을 다룹니다.

* [순위표 상위 가져오기](#gttoal)
* [지정된 순위 주변의 순위표 가져오기](#galaasr)
* [지정된 플레이어 주변의 순위표 가져오기](#galaasp)
* [다음 순위표 페이지 가져오기](#gtnpol)

<a id="gttoal" />

## 순위표 상위 가져오기

[XblLeaderboardGetLeaderboardAsync](/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardgetleaderboardasync)를 사용하여 지정된 순위표의 상위부터 시작하는 순위표 값을 반환합니다. 이벤트 기반 사용자 통계로 백업된 순위표를 쿼리할 때는 `queryType` 필드를 `XblLeaderboardQueryType::UserStatBacked`로 설정해야 합니다.

### 기본 순위표 표시(플랫 C API)

#### 플랫 C API

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of XAsyncBlock*.
    size_t resultSize;
    HRESULT hr = XblLeaderboardGetLeaderboardResultSize(asyncBlock, &resultSize);

    if (SUCCEEDED(hr))
    {
        leaderboardBuffer.resize(resultSize);
        XblLeaderboardResult* leaderboard{};

        hr = XblLeaderboardGetLeaderboardResult(asyncBlock, resultSize, leaderboardBuffer.data(), &leaderboard, nullptr);

        if (SUCCEEDED(hr))
        {
            // Use XblLeaderboardResult in result.
            for (auto row = 0u; row < leaderboard->rowsCount; ++row)
            {
                std::stringstream rowText;
                rowText << leaderboard->rows[row].xboxUserId << "\t";

                for (auto column = 0u; column < leaderboard->rows[row].columnValuesCount; ++column)
                {
                    rowText << leaderboard->rows[row].columnValues[column] << "\t";
                }
            }
        }
    }
};

// Instantiate and configure the leaderboard query.
XblLeaderboardQuery leaderboardQuery = {}; 
pal::strcpy(leaderboardQuery.scid, sizeof(leaderboardQuery.scid), scid.c_str()) 
leaderboardQuery.leaderboardName = leaderboardName.c_str(); 
leaderboardQuery.queryType = XblLeaderboardQueryType::UserStatBacked;
// For more leaderboard query options, replace the 4-line code block 
// that precedes this comment as indicated in other examples.

HRESULT hr = XblLeaderboardGetLeaderboardAsync(
    xboxLiveContext,
    leaderboardQuery,
    asyncBlock.get());
if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, std::unique_ptr will keep ownership and delete XAsyncBlock*.
    asyncBlock.release();
}
```

자세한 내용은 다음을 참조하세요.

* [XAsyncBlock](/reference/system/xasync/structs/xasyncblock)
* [XblLeaderboardGetLeaderboardAsync](/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardgetleaderboardasync)
* [XblLeaderboardGetLeaderboardResult](/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardgetleaderboardresult)
* [XblLeaderboardGetLeaderboardResultSize](/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardgetleaderboardresultsize)
* [XblLeaderboardQuery](/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardquery)
* [XblLeaderboardResult](/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardresult)

<a id="galaasr" />

## 지정된 순위 주변의 순위표 가져오기

순위표 쿼리에서 지정된 결과 페이지를 가져오려면 이전 기본 순위표 쿼리(플랫 C API) 예제에서 순위표 쿼리를 인스턴스화하고 구성하는 4줄 코드 블록을 다음 코드 블록으로 대체하세요.

### 지정된 결과 페이지 가져오기(C)

#### 플랫 C API

```cpp theme={null}
XblLeaderboardQuery leaderboardQuery = {};
pal::strcpy(leaderboardQuery.scid, sizeof(leaderboardQuery.scid), scid.c_str());
leaderboardQuery.leaderboardName = leaderboardName.c_str();
leaderboardQuery.skipResultToRank = 100;
leaderboardQuery.maxItems = 100;
leaderboardQuery.queryType = XblLeaderboardQueryType::UserStatBacked;
```

자세한 내용은 [XblLeaderboardQuery](/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardquery)를 참조하세요.

<a id="galaasp" />

## 지정된 플레이어 주변의 순위표 가져오기

지정된 플레이어 주변의 순위표를 가져오려면 이전 기본 순위표 쿼리(플랫 C API) 예제에서 순위표 쿼리를 인스턴스화하고 구성하는 4줄 코드 블록을 다음 코드 블록으로 대체하세요.

#### 플랫 C API

```cpp theme={null}
XblLeaderboardQuery leaderboardQuery = {};
pal::strcpy(leaderboardQuery.scid, sizeof(leaderboardQuery.scid), scid.c_str());
leaderboardQuery.leaderboardName = leaderboardName.c_str();
leaderboardQuery.skipToXboxUserId = xboxUserId;
leaderboardQuery.maxItems = 100;
leaderboardQuery.queryType = XblLeaderboardQueryType::UserStatBacked;
```

자세한 내용은 [XblLeaderboardQuery](/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardquery)를 참조하세요.

<a id="gtnpol" />

## 다음 순위표 페이지 가져오기

이전 순위표 결과의 다음 페이지를 가져오려면 다음 예제 코드와 같이 [XblLeaderboardResultGetNextAsync](/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardresultgetnextasync)를 호출합니다.

#### 플랫 C API

```cpp theme={null}
auto asyncBlock = std::make_unique<XAsyncBlock>();
asyncBlock->queue = queue;
asyncBlock->context = nullptr;
asyncBlock->callback = [](XAsyncBlock* asyncBlock)
{
    std::unique_ptr<XAsyncBlock> asyncBlockPtr{ asyncBlock }; // Take over ownership of XAsyncBlock*.
    size_t resultSize;
    HRESULT hr = XblLeaderboardResultGetNextResultSize(asyncBlock, &resultSize);

    if (SUCCEEDED(hr))
    {
        std::vector<char> buffer(resultSize, 0);
        XblLeaderboardResult* result{};

        hr = XblLeaderboardResultGetNextResult(asyncBlock, resultSize, buffer.data(), &result, nullptr);
        // Use result to read the leaderboard results.
    }
};

HRESULT hr = XblLeaderboardResultGetNextAsync(
    xboxLiveContext,
    leaderboardResult,
    maxItems,
    asyncBlock.get());
if (SUCCEEDED(hr))
{
    // The call succeeded, so release the std::unique_ptr ownership of XAsyncBlock* because the callback will take over ownership.
    // If the call fails, std::unique_ptr will keep ownership and delete XAsyncBlock*.
    asyncBlock.release();
}
```

자세한 내용은 다음을 참조하세요.

* [XAsyncBlock](/reference/system/xasync/structs/xasyncblock)
* [XblLeaderboardResult](/reference/live/xsapi-c/leaderboard_c/structs/xblleaderboardresult)
* [XblLeaderboardResultGetNextAsync](/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardresultgetnextasync)
* [XblLeaderboardResultGetNextResult](/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardresultgetnextresult)
* [XblLeaderboardResultGetNextResultSize](/reference/live/xsapi-c/leaderboard_c/functions/xblleaderboardresultgetnextresultsize)


## Related topics

- [이벤트 기반 통계 및 순위표 예제 코드](/ko/services/xbox-services/player-data/stats-leaderboards/event-based/how-to/live-statslb-eb-howto-nav.md)
- [이벤트 기반 통계 및 순위표](/ko/services/xbox-services/player-data/stats-leaderboards/event-based/live-statslb-eb-nav.md)
- [이벤트 예제 코드](/ko/services/xbox-services/player-data/stats-leaderboards/event-based/events/how-to/live-events-howto-nav.md)
- [이벤트 기반 순위표 개요](/ko/services/xbox-services/player-data/stats-leaderboards/event-based/live-leaderboards-eb-overview.md)
- [이벤트 기반 업적 예제 코드](/ko/services/xbox-services/player-data/achievements/event-based/how-to/live-achievements-eb-howto-nav.md)
