This document is about: SERVER 5
SWITCH TO

단계별 지침서

지침서 소개

이 안내서의 목적은 첫 번째 Photon Server 플러그인의 생성, 구성 및 사용 방법을 보여 주는 것입니다.

이 지침서는 Photon Server 플러그인을 처음 접해보는 사용자를 대상으로 합니다.
본 지침서는 단계별로 주의 깊게 따라서 해야 합니다.

이 지침서는 매뉴얼과는 별개입니다.

첫 번째 플러그인

이 파트에서는 최소한의 플러그인을 생성하고 배포합니다.

  1. Photon 계정을 생성합니다.
  2. Photon 플러그인 SDK를 다운로드합니다.
  3. SDK를 압축 해제합니다. 이 지침서 내에서는 결과 폴더 경로를 "{pluginsSdkFolder}"로 지칭합니다.
  4. 무료 100 CCU를 여기에서 "{pluginsSdkFolder}\deploy\bin_Win64" 폴더로 다운로드합니다.
  5. 새로운 Visual Studio 프로젝트 (이 지침서에서는 Visual Studio 2019 Community 에디션을 사용했습니다)를 생성합니다:
    • "Class Library (.NET Framework)" 유형으로 새로운 프로젝트를 추가합니다.
    • 프로젝트 이름: "MyFirstPlugin"
    • 위치: "{pluginsSdkFolder}\src-server\Plugins"
    • 확인: "솔루션과 프로젝트를 동일한 디렉토리에 위치시킵니다"
    • 프레임워크: ".NET Framework 4.6.1" (또는 그 이상)
Visual Studio 2019에서 생성한 새로운 프로젝트 윈도우
Visual Studio 2019에서 생성한 새로운 프로젝트 윈도우
  1. 의존성 추가:
    한 개의 라이브러리만 필요합니다: "PhotonHivePlugin.dll".
    Visual Studio에서 추가하기 위해:

    • 프로젝트에서 우측 클릭하여 "참조" 선택
    • "참조 추가.." 클릭
    • "탐색" 선택
    • "탐색"을 클릭하고 "{pluginsSdkFolder}\src-server\Plugins\lib\net461\PhotonHivePlugin.dll"를 선택
    • "OK"로 확인
  2. 플러그인 클래스 추가:

    • VS에 의해서 자동으로 생성된 "Class.cs" 파일을 "MyFirstPlugin.cs"로 이름 변경.
    • VS가 클래스 명도 이름을 변경할 것을 제안하면, 수용합니다. 그렇지 않으면 클래스 이름을 Class 에서 MyFirstPlugin로 직접 변경해야 합니다.
    • PluginBase를 기본 클래스로 변경합니다.

    C#

    using Photon.Hive.Plugin;
    
        namespace MyFirstPlugin
        {
            public class MyFirstPlugin : PluginBase
            {
            }
        }
    
  3. 플러그인 이름 설정:

    C#

    public override string Name => "MyFirstPlugin";
    
    • 예약된 플러그인 이름은 "Default" 및 "ErrorPlugin" 입니다.
  4. 로거를 생성하기 위해 SetupInstance를 오버라이드 합니다:

    C#

    private IPluginLogger pluginLogger;
    
    public override bool SetupInstance(IPluginHost host, Dictionary<string, string> config, out string errorMsg)
    {
        this.pluginLogger = host.CreateLogger(this.Name);
        return base.SetupInstance(host, config, out errorMsg);
    }
    
  5. 콜백에서 로그 메시지를 추가합니다:

    C#

    public override void OnCreateGame(ICreateGameCallInfo info)
    {
        this.pluginLogger.InfoFormat("OnCreateGame {0} by user {1}", info.Request.GameId, info.UserId);
    }
    
  6. 하나의 콜백 처리 메소드를 호출합니다:

    C#

    public override void OnCreateGame(ICreateGameCallInfo info)
    {
        this.pluginLogger.InfoFormat("OnCreateGame {0} by user {1}", info.Request.GameId, info.UserId);
        info.Continue(); // same as base.OnCreateGame(info);
    }
    
  7. 플러그인 팩토리 클래스를 추가합니다:

    • 새로운 클래스를 추가하고 MyPluginFactory로 이름을 부여합니다.
    • public 으로 만들어 줍니다.

    C#

    using Photon.Hive.Plugin;
    
    namespace MyFirstPlugin
    {
        public class MyPluginFactory
        {
        }
    }
    
  8. 기본 클래스를 PluginFactoryBase로 변경합니다:

    C#

    using Photon.Hive.Plugin;
    
    namespace MyFirstPlugin
    {
        public class MyPluginFactory : PluginFactoryBase
        {
            public override IGamePlugin Create(string pluginName)
            {
                throw new NotImplementedException();
            }
        }
    }
    
  9. 플러그인을 생성하고 리턴합니다:

    C#

    public override IGamePlugin Create(string pluginName)
    {
        return new MyFirstPlugin();
    }
    
  10. 솔루션을 빌드 합니다 (F6).

  11. 플러그인 환경 구성을 변경합니다:

    • "{pluginsSdkFolder}\deploy\LoadBalancing\GameServer\bin\plugin.config"를 오픈합니다.
    • 다음과 같이 "PluginSettings" 노드를 변경합니다:

    XML

    <Configuration>
      <PluginSettings Enabled="true">
        <Plugins>
          <Plugin
            Name="MyFirstPlugin"
            AssemblyName="MyFirstPlugin.dll"
            Type="MyFirstPlugin.MyPluginFactory" />
        </Plugins>
      </PluginSettings>
    </Configuration>
    

    자체 호스팅 된 Photon Server의 플러그인 환경 구성에 대해서 더 읽어보세요.

  12. 바이너리 파일들을 예상되는 경로에 복사합니다:

    "{pluginsSdkFolder}\src-server\Plugins\MyFirstPlugin\bin\Debug"의 모든 파일들을 "{pluginsSdkFolder}\deploy\Plugins\MyFirstPlugin\bin"에 복사합니다.

  13. [PhotonControl]을 오픈합니다.
    "{pluginsSdkFolder}\bin_Win64\PhotonControl.exe"에 있습니다.

  14. 애플리케이션으로 Photon Server를 시작합니다:

PhotonControl에서 LoadBalancing 시작
PhotonControl에서 LoadBalancing 시작
  1. 로그를 확인합니다:

    PhotonControl에서 직접 로그를 오픈할 수 있습니다:

PhotonControl에서 로그 오픈
PhotonControl에서 로그 오픈
  1. Photon Server로 접속합니다. 아무 클라이언트 SDK를 사용합니다.

  2. 룸을 생성합니다. CreateRoom 오퍼레이션을 구현하는 SDK에 적합한 메소드를 호출합니다.

  3. 로그를 다시 확인합니다:
    "{pluginsSdkFolder}\deploy\log\GSGame.log"에서 플러그인 콜백으로부터의 사용자 지정 로그 메시지 이후 플러그인 생성을 볼 수 있어야 합니다:

    Plain Old Text

    2021-05-24 16:03:19,734 [20] INFO  Photon.Hive.Plugin.PluginManager - Plugin successfully created:Type:MyFirstPlugin.MyPluginFactory, path:D:\ExitGames\SDKs\Plugins\photon-server-plugin-sdk_v5-0-12-24499-rc1\deploy\Plugins/MyFirstPlugin//bin/MyFirstPlugin.dll
    2021-05-24 16:03:19,760 [20] INFO  Plugin.MyFirstPlugin - OnCreateGame 81f04234-892d-4b14-ae17-3708e9f7fe5c by user 848140c0-a7fb-4d61-ba5f-5846184a9b78
    2021-05-24 16:03:19,761 [20] DEBUG Photon.Hive.Plugin.CreateGameCallInfo - Continue.
    

디버그 모드

두 번째 파트에서는 플러그인 개발을 위한 권장 작업 흐름을 보여줍니다.

  1. Visual Studio 프로젝트를 닫고 다시 오픈하지만 이때는 "{pluginsSdkFolder}\src-server\Plugins\MyFirstPlugin\MyFirstPlugin.sln" 솔루션 파일을 더블 클릭하여 오픈합니다.
    이 단계는 매우 중요한데, 단계 3에 있는 솔루션 폴더 경로의 상대 경로를 사용하기 위해서입니다.

  2. 플러그인 프로젝트의 "Post-Build Events"를 업데이트합니다:

    이 아이디어는 프로젝트 빌드 출력 디렉토리에서 Photon 구성에 의해 예상 경로로 적용 및 붙여넣기를 통해 플러그인 바이너리를 자동으로 업데이트하는 것입니다.

    스크린샷에 표시된 "Post-Build Events" 텍스트 영역에서 빌드에 성공한 직후에 이 작업을 수행하는 이 명령을 입력합니다.
    편의성과 휴대성을 위해 상대 경로를 사용합니다.

    Plain Old Text

    xcopy /Y /Q "$(TargetDir)*.*" "$(SolutionDir)..\..\..\deploy\Plugins\MyFirstPlugin\bin\"
    
포스트 빌드 이벤트
포스트 빌드 이벤트
  1. 플러그인 프로젝트의 "Debug" 액션을 업데이트합니다:

    여기서는 디버깅 플러그인이 시작될 때 자동으로 Photon Server를 시작하고 플러그인이 중지될 때 자동으로 중지하는 것을 목표로 합니다.

    스크린샷에 표시된 대로 "시작 액션" 및 "시작 옵션"을 구성합니다.
    편의성과 휴대성을 위해 상대 경로를 사용합니다.

    • "외부 프로그램 시작":

      Plain Old Text

      ..\..\..\deploy\bin_Win64\PhotonSocketServer.exe
      
    • "명령어 라인 아규먼트":

      Plain Old Text

      /run LoadBalancing /configPath ..\..\..\..\..\deploy\bin_Win64
      
디버그 시작 액션
디버그 시작 액션
  1. 중단점을 추가합니다:
MyFirstPlugin.OnCreateGame의 중단점
MyFirstPlugin.OnCreateGame의 중단점
  1. [PhotonControl]에서 Photon Server 중지:
PhotonControl에서 LoadBalancing 중지
PhotonControl에서 LoadBalancing 중지
  1. Visual Studio (F5)에서 Photon Server 시작하기:
Visual Studio에서 Photon Server 시작된 디버그
Visual Studio에서 Photon Server 시작된 디버그
  1. Photon Server로 접속합니다. 어떤 클라이언트 SDK를 사용해도 무방합니다.
  2. 룸을 생성합니다. CreateRoom 작업을 구현하는 SDK에 적합한 메소드를 호출합니다.
  3. 중단점이 트리거 될 때까지 기다립니다:
트리거된 중단점
트리거된 중단점

PhotonControl

Back to top