# Cloud Code C# 모듈을 통해 Leaderboards에 액세스

> Refer to code samples that access Leaderboards with Cloud Code C# Modules.

[Cloud Code C# 모듈](/cloud-code/modules/overview.md)을 통해 Cloud Code를 사용하여 Leaderboards 기능에 액세스할 수 있습니다.

플레이어가 Cloud Code 모듈을 호출하는 예제를 가정해 봅니다. 코드 스니핏에서 플레이어의 점수를 제출하고, 엔트리(예: 순위)를 검색하며, 리더보드에서 최고 점수를 검색합니다.

C#:

```cs
using Microsoft.Extensions.DependencyInjection;
using Unity.Services.CloudCode.Apis;
using Unity.Services.CloudCode.Core;
using Unity.Services.Leaderboards.Model;

public class LeaderboardsExample
{
    [CloudCodeFunction("LeaderboardsExample")]
    public async Task<LeaderboardResult> LeaderboardsExampleAsync(
        IExecutionContext context,
        IGameApiClient apiClient,
        string leaderboardId,
        string playerId,
        int score)
    {
        string accessToken = context.AccessToken;
        Guid projectId = Guid.Parse(context.ProjectId);

        var addScoreResult = await apiClient.Leaderboards.AddLeaderboardPlayerScoreAsync(
            context, accessToken, projectId, leaderboardId, playerId, new LeaderboardScore(score));
        var getScoreResult = await apiClient.Leaderboards.GetLeaderboardPlayerScoreAsync(
            context, accessToken, projectId, leaderboardId, playerId);
        var getScoresResult = await apiClient.Leaderboards.GetLeaderboardScoresAsync(
            context, accessToken, projectId, leaderboardId);

        return new LeaderboardResult()
        {
            AddScoreResult = addScoreResult.StatusCode.ToString(),
            GetScoreResult = getScoreResult.Data,
            GetScoresResult = getScoresResult.Data
        };
    }
}

public class LeaderboardResult
{
    public string AddScoreResult { get; set; }
    public LeaderboardEntryWithUpdatedTime GetScoreResult { get; set; }
    public LeaderboardScoresPage GetScoresResult { get; set; }
}

public class ModuleConfig : ICloudCodeSetup
{
    public void Setup(ICloudCodeConfig config)
    {
        config.Dependencies.AddSingleton(GameApiClient.Create());
    }
}
```

Cloud Code를 통해 플레이어 범위 엔드포인트에 대한 관리자 레벨 액세스를 이용할 수도 있습니다. 이렇게 하면 여러 플레이어의 점수를 업데이트하거나 Cloud Code 모듈을 호출한 플레이어가 아닌 플레이어의 점수를 업데이트할 수 있습니다. 이 작업은 액세스 토큰 대신 Cloud Code 모듈로 서비스 토큰을 전달하여 완료됩니다.

C#:

```cs
public class LeaderboardsExample
{
    [CloudCodeFunction("LeaderboardsExample")]
    public async Task<LeaderboardResult> LeaderboardsExampleAsync(
        IExecutionContext context,
        IGameApiClient apiClient,
        string leaderboardId,
        string playerId,
        int score)
    {
        string serviceToken = context.ServiceToken;
        Guid projectId = Guid.Parse(context.ProjectId);

        var addScoreResult = await apiClient.Leaderboards.AddLeaderboardPlayerScoreAsync(
            context, serviceToken, projectId, leaderboardId, playerId, new LeaderboardScore(score));
        var getScoreResult = await apiClient.Leaderboards.GetLeaderboardPlayerScoreAsync(
            context, serviceToken, projectId, leaderboardId, playerId);
        var getScoresResult = await apiClient.Leaderboards.GetLeaderboardScoresAsync(
            context, serviceToken, projectId, leaderboardId);

        return new LeaderboardResult()
        {
            AddScoreResult = addScoreResult.StatusCode.ToString(),
            GetScoreResult = getScoreResult.Data,
            GetScoresResult = getScoresResult.Data
        };
    }
}
```

## 추가 리소스##additional-resources

* [Unity Dashboard](https://dashboard.unity3d.com/)
* [Cloud Code 기술 자료](/cloud-code.md)
* [Unity Authentication](/authentication/.md)
