This document is about: SERVER 4
SWITCH TO

단계별 지침서

이 지침서는 Photon Plugins SDK 버전 v4.0.29.11263 에서 작성되고 테스트 되었습니다.

지침서 소개

이 지침서는 첫 번째 Photon Server 플러그인을 생성, 구성 및 사용하는 방법을 보여주기 위함입니다.

이 지침서는 Photon Server 플러그인을 처음으로 접하시는 사용자를 대상으로 합니다.
이 지침서는 단계별로 순서대로 신중하게 따라하셔야 합니다.

이 지침서는 매뉴얼은 아닙니다.

첫 번째 플러그인

첫 번째 파트에서는 최소한의 플러그인을 생성하고 디플로이할 것 입니다.

  1. Photon 계정을 생성합니다.
  2. Photon Plugins SDK를 다운로드합니다.
  3. SDK를 압축해제합니다. 이 지침서에서 압축을 푼 폴더를 "{pluginsSdkFolder}"로 지칭하도록 하겠습니다.
  4. 새로운 Visual Studio 프로젝트(이 지침서에서 사용된 것은 Visual Studio 2019 Community 에디션입니다)를 생성합니다:
    • "Class Library (.NET Framework)" 형태의 새로운 프로젝트를 추가합니다.
    • 프로젝트 명: "MyFirstPlugin"
    • 위치: "{pluginsSdkFolder}\src-server\Plugins"
    • 체크: "동일한 디렉토리에 솔루션과 프로젝트를 위치하도록 합니다"
    • 프레임워크: ".NET Framework 4"
New Project Creation Window in Visual Studio 2019
New Project Creation Window in Visual Studio 2019
  1. 디펜던시 추가:
    하나의 라이브러리만 필요합니다: "PhotonHivePlugin.dll".
    Visual Studio에서 추가합니다:

    • 프로젝트의 "References"를 우측 클릭합니다
    • "Add Reference.." 클릭
    • "Browse" 선택
    • "Browse" and choose "{pluginsSdkFolder}\src-server\Plugins\lib\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
    {
        get { return "MyFirstPlugin"; }
    }
    
    • 예약된 플러그인 이름은 "Default" 및 "ErrorPlugin" 입니다.
  4. 콜백에 로그 메시지를 추가합니다:

    C#

    public override void OnCreateGame(ICreateGameCallInfo info)
    {
        this.PluginHost.LogInfo(string.Format("OnCreateGame {0} by user {1}", info.Request.GameId, info.UserId));
    }
    
  5. 콜백 처리 메소드를 호출합니다:

    C#

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

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

    C#

    using System.Collections.Generic;
    using Photon.Hive.Plugin;
    
    namespace MyFirstPlugin
    {
        public class MyPluginFactory
        {
        }
    }
    
  7. IPluginFactory 인터페이스를 구현합니다:

    C#

    using System.Collections.Generic;
    using Photon.Hive.Plugin;
    
    namespace MyFirstPlugin
    {
        public class MyPluginFactory : IPluginFactory
        {
            public IGamePlugin Create(IPluginHost gameHost, string pluginName, Dictionary<string, string> config,
                out string errorMsg)
            {
                throw new NotImplementedException();
            }
        }
    }
    
  8. 생성하여 plugin을 리턴합니다:

    C#

    public IGamePlugin Create(IPluginHost gameHost, string pluginName, Dictionary<string, string> config,
        out string errorMsg)
    {
        MyFirstPlugin plugin = new MyFirstPlugin();
        if (plugin.SetupInstance(gameHost, config, out errorMsg))
        {
            return plugin;
        }
        return null;
    }
    
  9. 솔루션 빌드(F6).

  10. 플러그인 환경설정 업데이트:

    • "{pluginsSdkFolder}\deploy\LoadBalancing\GameServer\bin\Photon.LoadBalancing.dll.config" 열기
    • 다음과 같이 "PluginSettings" 노드를 업데이트합니다:

    XML

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

    자체 호스팅 Photon Server에 대한 플러그인 환경설정을 참고하세요.

  11. 예정된 경로에 바이너리들을 복사합니다:

    모든 것을 "{pluginsSdkFolder}\src-server\Plugins\MyFirstPlugin\bin\Debug" 에서 "{pluginsSdkFolder}\deploy\Plugins\MyFirstPlugin\bin" 로 복사합니다.

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

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

Start LoadBalancing from PhotonControl
Start LoadBalancing from PhotonControl
  1. 로그를 확인합니다:

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

Open Logs from PhotonControl
Open Logs from PhotonControl
  1. Photon Server에 연결합니다. Use any client SDK를 사용합니다.

  2. 룸을 생성합니다. CreateRoom을 구현하는 SDK에 적합한 방법을 호출합니다.

  3. 로그를 재확인합니다:
    "{pluginsSdkFolder}\deploy\log\GSGame.log"에서 플러그인 콜백에서 나온 커스텀 로그 메시지 이후 플러그인 생성 메시지가 나와야 합니다:

    Plain Old Text

    2019-07-04 15:25:40,540 [11] INFO  Photon.Hive.Plugin.PluginManager - Plugin successfully created:Type:MyFirstPlugin.MyPluginFactory, path:D:\ExitGames\SDKs\Plugins\Photon-OnPremise-Server-Plugin-SDK_v4-0-29-11263\deploy\Plugins\MyFirstPlugin\\bin\MyFirstPlugin.dll
    2019-07-04 15:25:42,435 [11] INFO  Photon.Hive.HiveGame.HiveHostGame.Plugin - OnCreateGame 870c3120-bcdd-4091-b072-8e92ea07bec5 by user 495fca21-b67e-4103-b1ce-c6ce945e6207
    

디버그 모드

두 번째 파트에서는 플러그인 개발에 권장되는 워크플로우를 보여드리겠습니다.

  1. 플러그인 프로젝트의 "Post-Build Events"를 갱신합니다:

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

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

Post Build Events
Post Build Events
  1. 플러그인 프로젝트의 "Debug" 액션을 업데이트합니다:

    플러그인의 디버깅이 시작될 때 Photon Server를 자동으로 시작하고 플러그인이 중지될 때 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 에서 로드밸런싱 중지
PhotonControl 에서 로드밸런싱 중지
  1. Visual Studio (F5)로 Photon Server 시작:
Visual Studio에서 Photon Server 디버그 시작됨
Visual Studio에서 Photon Server 디버그 시작됨
  1. Photon Server에 연결합니다. 클라이언트 SDK 아무거나 사용하세요.
  2. 룸을 생성합니다. CreateRoom 오퍼레이션을 구현한 SDK의 적당한 메소드를 호출합니다.
  3. 브레이크포인트가 트리거될때까지 기다리세요:
Breakpoint 트리거됨
Breakpoint 트리거됨

PhotonControl

Back to top