server | v4 switch to v3  

단계별 지침서

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

Contents

지침서 소개

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

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

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

Back To Top

첫 번째 플러그인

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

  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

  5. 디펜던시 추가: 하나의 라이브러리만 필요합니다: "PhotonHivePlugin.dll". Visual Studio에서 추가합니다:

    • 프로젝트의 "References"를 우측 클릭합니다
    • "Add Reference.." 클릭
    • "Browse" 선택
    • "Browse" and choose "{pluginsSdkFolder}\src-server\Plugins\lib\PhotonHivePlugin.dll" 클릭
    • "OK"로 확인
  6. 플러그인 클래스 추가:

    • VS 에서 자동 생성된 파일 이름을 "Class.cs" 에서 "MyFirstPlugin.cs" 로 변경합니다.
    • VS 에서도 클래스 이름을 변경하라고 제한할 것 입니다. 그렇지 않으면 Class 에서 MyFirstPlugin 로 변경하세요.
    • PluginBase 확장.
        using Photon.Hive.Plugin;
    
    
        namespace MyFirstPlugin
        {
            public class MyFirstPlugin : PluginBase
            {
            }
        }
  7. 플러그인 이름 설정:

        public override string Name
    {
        get { return "MyFirstPlugin"; }
    }
    • 예약된 플러그인 이름은 "Default" 및 "ErrorPlugin" 입니다.
  8. 콜백에 로그 메시지를 추가합니다:

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

        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);
    }
  10. 플러그인 팩토리 클래스를 추가합니다:

    • 새로운 클래스를 추가하고 MyPluginFactory로 이름을 부여합니다
    • public 으로 만들어 줍니다.
        using System.Collections.Generic;
    using Photon.Hive.Plugin;
    
    
    namespace MyFirstPlugin
    {
        public class MyPluginFactory
        {
        }
    }
  11. IPluginFactory 인터페이스를 구현합니다:

        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();
            }
        }
    }
  12. 생성하여 plugin을 리턴합니다:

        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;
    }
  13. 솔루션 빌드(F6).

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

    • "{pluginsSdkFolder}\deploy\LoadBalancing\GameServer\bin\Photon.LoadBalancing.dll.config" 열기
    • 다음과 같이 "PluginSettings" 노드를 업데이트합니다:
        <PluginSettings Enabled="true">
        <Plugins>
            <Plugin
                Name="MyFirstPlugin"
                AssemblyName="MyFirstPlugin.dll"
                Type="MyFirstPlugin.MyPluginFactory" />
        </Plugins>
    </PluginSettings>

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

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

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

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

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

    Start LoadBalancing from PhotonControl
    Start LoadBalancing from PhotonControl

  18. 로그를 확인합니다:

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

    Open Logs from PhotonControl
    Open Logs from PhotonControl

    "{pluginsSdkFolder}\deploy\log\GSGame.log" 에서 plugin configuration parsed and processed successfully라는 메시지가 있어야 합니다:

        2019-07-04 15:18:40,272 [1] INFO  Photon.Hive.Plugin.PluginManager - Plugin configured: name=MyFirstPlugin
    2019-07-04 15:18:40,326 [1] INFO  Photon.Hive.Plugin.PluginManager - Loaded Assembly Name=MyFirstPlugin, Version=1.0.0.0, Culture=, PublicKey token=, Path=D:\ExitGames\SDKs\Plugins\Photon-OnPremise-Server-Plugin-SDK_v4-0-29-11263\deploy\Plugins\MyFirstPlugin\\bin\MyFirstPlugin.dll
    2019-07-04 15:18:40,327 [1] INFO  Photon.Hive.Plugin.PluginManager - Referenced Assembly Name=mscorlib, Version=4.0.0.0, Culture=, PublicKey token=B7-7A-5C-56-19-34-E0-89, Path=
    2019-07-04 15:18:40,329 [1] INFO  Photon.Hive.Plugin.PluginManager - Referenced Assembly Name=PhotonHivePlugin, Version=1.0.15.11060, Culture=, PublicKey token=, Path=
    2019-07-04 15:18:40,330 [1] INFO  Photon.Hive.Plugin.PluginManager - Plugin Type MyFirstPlugin.MyPluginFactory from assembly MyFirstPlugin, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null was successfuly created
    2019-07-04 15:18:40,331 [1] INFO  Photon.Hive.Plugin.PluginManager - Plugin manager (version=1.0.15.11060) is setup. type=MyFirstPlugin.MyPluginFactory;path=D:\ExitGames\SDKs\Plugins\Photon-OnPremise-Server-Plugin-SDK_v4-0-29-11263\deploy\Plugins\MyFirstPlugin\\bin\MyFirstPlugin.dll;version=1.0.15.11060
  19. Photon Server에 연결합니다. Use any client SDK를 사용합니다.

  20. 룸을 생성합니다. CreateRoom을 구현하는 SDK에 적합한 방법을 호출합니다.
  21. 로그를 재확인합니다: "{pluginsSdkFolder}\deploy\log\GSGame.log"에서 플러그인 콜백에서 나온 커스텀 로그 메시지 이후 플러그인 생성 메시지가 나와야 합니다:

        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

Back To Top

디버그 모드

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

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

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

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

    xcopy /Y /Q "$(TargetDir)." "$(SolutionDir)......\deploy\Plugins\MyFirstPlugin\bin\"

Post Build Events
Post Build Events

저장하는 것을 잊지 마세요.

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

    플러그인의 디버깅이 시작될 때 Photon Server를 자동으로 시작하고 플러그인이 중지될 때 Photon Server를 자동으로 시작하는 것이 좋습니다.

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

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

              ..\..\..\deploy\bin_Win64\PhotonSocketServer.exe
    • "커맨드 라인 아규먼트":

              /run LoadBalancing /configPath ..\..\..\..\..\deploy\bin_Win64

    Debug Start Action
    디버그 시작 액션

    저장하는 것을 잊지 마세요.

  2. 브레이크포인트 추가:

    Breakpoint in MyFirstPlugin.OnCreateGame
    MyFirstPlugin.OnCreateGame의 브레이크포인트

  3. PhotonControl에서 Photon Server 중지:

    Stop LoadBalancing from PhotonControl
    PhotonControl 에서 로드밸런싱 중지

  4. Visual Studio (F5)로 Photon Server 시작:

    Photon Server debug started from Visual Studio
    Visual Studio에서 Photon Server 디버그 시작됨

    작업 관리자를 사용하여 서버가 시작되었는지 확인할 수 있습니다. 이 프로세스의 이름은 Photon입니다.

  5. Photon Server에 연결합니다. 클라이언트 SDK 아무거나 사용하세요.

  6. 룸을 생성합니다. CreateRoom 오퍼레이션을 구현한 SDK의 적당한 메소드를 호출합니다.
  7. 브레이크포인트가 트리거될때까지 기다리세요:

    Breakpoint Triggered
    Breakpoint 트리거됨

기술문서 TOP으로 돌아가기