기타

[PlayFab]CloudScript - AzureFunction

Aostols 2024. 7. 7. 20:14
반응형

https://aostols.tistory.com/49

 

[기타]뒤끝서버 사용기

이러 저러한 사정으로 게임을 급하게 하나 만들어서 출시 했습니다.서버개발자가 없었기 떄문에 뒤끝서버라는 솔루션(?)을 사용 했습니다.GBaas로 Game Backend as a Service 서비스 입니다.서버가 필요

aostols.tistory.com

 

국내 서비스인 뒤끝 서버를 사용해 볼 일이 있었고 추가로 궁금하여 PlayFab을 사용해 보기로 하였습니다.

PlayFab은 MS가 서비스 하는 GBaas로 MS이기 떄문에 당연히 Azure로 붙습니다.

PlayFab은 CloudScript라는 서버 스크립트가 있었고 뒤끝의 뒤끝펑션과 아주 유사한 형태인거로 보입니다.

초창기 CloudSccript는 자바 스크립트로 구성되어 있는것 같은데 AzureFunction이 붙으면서 C#도 지원하게 된것 같습니다.

 

1. 가입

PlayFab

PlayFab은 무료로 가입할 수 있고 무료 호출단위가 좀 후한 편이라서 테스트 하기 용이합니다.

일단 무료로 가입해 봅니다.

스튜디오 개념이 있고 프로젝트 개념이 있습니다.

빨간색은 스튜디오 이름

파란색은 프로젝트 이름

녹색은 프로젝트 ID 입니다.

아마도 가입하면 기본스튜디오 기본 프로젝트 세팅이 되어 있을 것 입니다.

 

Azure

Azure 역시 가입해 줍니다.

초기에 기본 구독제로 가입이 되고 테스트용 보너스 크레딧 얼마가 입금되는데 저는 27만원 정도가 입금된 상태 입니다.

 

2. 설치

저는 Visual Studio Community 2022 로 작업을 할 것이기 떄문에 Visual Studio 를 설치해 줍니다.

유니티를 하시는 분들은 대부분 설치가 되어 있을것이기 떄문에 Installer 가서 수정을 눌러 줍니다.

 

항목중에 Azure 개발 항목이 있는데 설치해 줍니다.

 

3. Azure Function 구현

이제 Visual Studio 를 새로 시작해서 새 프로젝트 만들기를 선택합니다.

 

우측 상단에 검색창에서 azure를 검색하면 Azure Functions 를 선택 해 줍니다.

 

 

함수 이름을 선택하고 나면 Azure Function 설정창이 나오게 됩니다.

- .Net 8.0

- Http trigger

- Anonymous

이렇게 선택해 줍니다.

자세한 사항은 아래 사이트를 참고해 줍니다.

 

 

Azure Functions HTTP trigger

Learn how to call an Azure Function via HTTP.

learn.microsoft.com

 

 

이제 PlayFab에서 제공하는 공통 클래스를 넣어줘야 합니다.

 

 

 

PlayFab CloudScript using Azure Functions Quickstart Guide - PlayFab

PlayFab CloudScript using Azure Functions Quickstart Guide

learn.microsoft.com

여기서 보면 CS2AFHelerClasses.cs 를 넣어 주라고 합니다.

https://github.com/PlayFab/PlayFab-Samples/blob/master/Samples/CSharp/AzureFunctions/CS2AFHelperClasses.cs

 

PlayFab-Samples/Samples/CSharp/AzureFunctions/CS2AFHelperClasses.cs at master · PlayFab/PlayFab-Samples

This repository contains Sample code, Recipes and Video Tutorials demonstrating how to integrate various PlayFab features - PlayFab/PlayFab-Samples

github.com

 

이제 서버 코드에 PlayFab SDK 를 설치해 줍니다.

솔루션을 우클릭 하여 NuGet 패키지 관리를 열어 줍니다.

 

 

PlayFabAllSDK 를 검색해 주고 설치해 줍니다.

 

 

그리고 나면 이제 서버 코드를 작성해 줍니다.

 

public static class HelloWorld
{
    [FunctionName("HelloWorld")]
    public static async Task<dynamic> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {

        FunctionExecutionContext<dynamic> context = JsonConvert.DeserializeObject<FunctionExecutionContext<dynamic>>(await req.ReadAsStringAsync());

        var apiSettings = new PlayFab.PlayFabApiSettings()
        {
            TitleId = context.TitleAuthenticationContext.Id,
            DeveloperSecretKey = "-------------------------------------------"
        };

        PlayFab.PlayFabAuthenticationContext titleContext = new PlayFab.PlayFabAuthenticationContext();

        titleContext.EntityToken = context.TitleAuthenticationContext.EntityToken;
        var serverAPI = new PlayFab.PlayFabServerInstanceAPI(apiSettings, titleContext);

        GetTitleDataRequest titleDataRequest = new GetTitleDataRequest { Keys = new List<string>() { "EventValue0" } };
        var titleDataResult = await serverAPI.GetTitleDataAsync(titleDataRequest);

        if (titleDataResult.Result.Data.ContainsKey("EventValue0"))
        {
            return titleDataResult.Result.Data.GetValueOrDefault("EventValue0");
        }

        return 0;
    }
}

 

FunctionName Attribute는 실제 호출되는 함수 이름입니다.

PlayFab에 등록될 이름으로 정해 줍니다.

 

원래 기본값은 Task<dynamic>이 아닌데 변경되었습니다.

apiSettings 에서 DeveloperSecretKey 가 들어가게 되는데 시크릿 키의 위치는 다음과 같습니다.

 

복사해서 넣으면 됩니다.

 

코드의 기본적인 내용은 TitleData를 받아오는 것인데 TitleData로 설정된 EventValue0을 받아오고 있다면 그 값을 리턴시켜 버립니다.

TitleData설정은 다음과 같습니다.

 

좌측메뉴 Content 에서 Title Data를 선택하고 Edit를 눌러줍니다.

 

Key Pairs 입력창이 나오는데 적당한 값을 넣고 Save 해줍니다.

 

이러면 해당 값을 읽고 뱉어주는 코드가 작성 되었습니다.

 

4. Azure Function 배포

솔루션에서 우클릭하여 게시를 눌러 줍니다.

새롭게 추가하고 Azure를 선택합니다.

Azure 함수 앱  선택합니다.

 

새로 만들기를 선택하면 적당한 내용이 자동으로 작성됩니다.

위치는 기본값이 Australia Central 인것 같습니다.

자신이 유리한 위치로 옮기면 될것 같습니다.

 

그리고 게시를 눌러 줍니다.

생각보다 시간이 오래 걸립니다.

콘솔창이 뜨면서 성공인지 실패인지 메세지가 나오게 됩니다.

 

5. Unity 에서 호출

Unity 에서 PlayFab SDK 설치는 아래 사이트를 참고하시면 됩니다.

https://learn.microsoft.com/en-us/gaming/playfab/features/multiplayer/networking/party-unity-plugin-quickstart

 

Party Unity plugin quickstart - PlayFab

Guidance on how to use PlayFab party in your Unity Project.

learn.microsoft.com

 

private void Login()
{
    PlayFabClientAPI.LoginWithCustomID(new PlayFab.ClientModels.LoginWithCustomIDRequest
    {
        CustomId = "asdf",
        CreateAccount = true,
    }, result =>
    {
        Debug.Log("Login Complete");
        CallFunction();
    }, error =>
    {

    });
}

 

CustomID 로 로그인 처리 하는 부분인데 아이디가 없다면 만들어서 로그인 해 버립니다.

최초 익명 아이디로 일단 로그인 시켜버리는데 유리 합니다.

 

private void CallFunction()
{
    Debug.Log("CallFucntion");
    PlayFabCloudScriptAPI.ExecuteFunction(new ExecuteFunctionRequest()
    {
        Entity = new PlayFab.CloudScriptModels.EntityKey()
        {
            Id = PlayFabSettings.staticPlayer.EntityId,
            Type = PlayFabSettings.staticPlayer.EntityType,
        },
        FunctionName = "HelloWorld",
        GeneratePlayStreamEvent = false
    }, (ExecuteFunctionResult result) =>
    {
        Debug.Log($"Result: {result.FunctionResult.ToString()}");
    }, (PlayFabError error) =>
    {
        Debug.Log($"error {error}");
    });
}

 

이제 실질적인 함수 호출 부분인 CallFunction 부분 입니다.

PlayFabCloudScriptAPI.ExecuteFunction 을 호출해 줍니다.

FunctionName은 아까 정했던 HelloWorld입니다.

파라미터 넘기는게 있지만 별도로 뭔가 한적이 없기 떄문에 넘길 필요는 없습니다.

호출이 성공적이라면 Result: 이후 qwer1234 가 찍혀야 합니다.

 

정상적인 호출을 확인 할 수 있습니다.

반응형

'기타' 카테고리의 다른 글

[Playfab]PlayerData  (1) 2024.07.14
[기타]뒤끝서버 사용기  (0) 2024.06.30
콘솔 게임 개발 과정에서 느낀점  (0) 2022.12.03
Flutter - showModalBottomSheet  (0) 2022.07.14
[링크]머신러닝  (0) 2022.07.12