단계별 지침서
지침서 소개
이 안내서의 목적은 첫 번째 Photon Server 플러그인의 생성, 구성 및 사용 방법을 보여 주는 것입니다.
이 지침서는 Photon Server 플러그인을 처음 접해보는 사용자를 대상으로 합니다.
본 지침서는 단계별로 주의 깊게 따라서 해야 합니다.
이 지침서는 매뉴얼과는 별개입니다.
첫 번째 플러그인
이 파트에서는 최소한의 플러그인을 생성하고 배포합니다.
Photon 계정을 생성합니다.
Photon 플러그인 SDK를 다운로드합니다.
SDK를 압축 해제합니다. 이 지침서 내에서는 결과 폴더 경로를 "{pluginsSdkFolder}"로 지칭합니다.
무료 100 CCU를 여기에서 "{pluginsSdkFolder}\deploy\bin_Win64" 폴더로 다운로드합니다.
새로운 Visual Studio 프로젝트 (이 지침서에서는 Visual Studio 2019 Community 에디션을 사용했습니다)를 생성합니다:
- "Class Library (.NET Framework)" 유형으로 새로운 프로젝트를 추가합니다.
- 프로젝트 이름: "MyFirstPlugin"
- 위치: "{pluginsSdkFolder}\src-server\Plugins"
- 확인: "솔루션과 프로젝트를 동일한 디렉토리에 위치시킵니다"
- 프레임워크: ".NET Framework 4.6.1" (또는 그 이상)
의존성 추가:
한 개의 라이브러리만 필요합니다: "PhotonHivePlugin.dll".
Visual Studio에서 추가하기 위해:- 프로젝트에서 우측 클릭하여 "참조" 선택
- "참조 추가.." 클릭
- "탐색" 선택
- "탐색"을 클릭하고 "{pluginsSdkFolder}\src-server\Plugins\lib\net461\PhotonHivePlugin.dll"를 선택
- "OK"로 확인
플러그인 클래스 추가:
- VS에 의해서 자동으로 생성된 "Class.cs" 파일을 "MyFirstPlugin.cs"로 이름 변경.
- VS가 클래스 명도 이름을 변경할 것을 제안하면, 수용합니다. 그렇지 않으면 클래스 이름을
Class
에서MyFirstPlugin
로 직접 변경해야 합니다. PluginBase
를 기본 클래스로 변경합니다.
C#
using Photon.Hive.Plugin; namespace MyFirstPlugin { public class MyFirstPlugin : PluginBase { } }
플러그인 이름 설정:
C#
public override string Name => "MyFirstPlugin";
- 예약된 플러그인 이름은 "Default" 및 "ErrorPlugin" 입니다.
로거를 생성하기 위해
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); }
콜백에서 로그 메시지를 추가합니다:
C#
public override void OnCreateGame(ICreateGameCallInfo info) { this.pluginLogger.InfoFormat("OnCreateGame {0} by user {1}", info.Request.GameId, info.UserId); }
하나의 콜백 처리 메소드를 호출합니다:
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); }
플러그인 팩토리 클래스를 추가합니다:
- 새로운 클래스를 추가하고
MyPluginFactory
로 이름을 부여합니다. - public 으로 만들어 줍니다.
C#
using Photon.Hive.Plugin; namespace MyFirstPlugin { public class MyPluginFactory { } }
- 새로운 클래스를 추가하고
기본 클래스를
PluginFactoryBase
로 변경합니다:C#
using Photon.Hive.Plugin; namespace MyFirstPlugin { public class MyPluginFactory : PluginFactoryBase { public override IGamePlugin Create(string pluginName) { throw new NotImplementedException(); } } }
플러그인을 생성하고 리턴합니다:
C#
public override IGamePlugin Create(string pluginName) { return new MyFirstPlugin(); }
솔루션을 빌드 합니다 (F6).
플러그인 환경 구성을 변경합니다:
- "{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>
바이너리 파일들을 예상되는 경로에 복사합니다:
"{pluginsSdkFolder}\src-server\Plugins\MyFirstPlugin\bin\Debug"의 모든 파일들을 "{pluginsSdkFolder}\deploy\Plugins\MyFirstPlugin\bin"에 복사합니다.
[PhotonControl]을 오픈합니다.
"{pluginsSdkFolder}\bin_Win64\PhotonControl.exe"에 있습니다.애플리케이션으로 Photon Server를 시작합니다:
로그를 확인합니다:
PhotonControl에서 직접 로그를 오픈할 수 있습니다:
"{pluginsSdkFolder}\deploy\log\GSGame.log"에서 해석된 플러그인 환경 구성과 성공적으로 처리된 것을 볼 수 있어야 합니다:
Plain Old Text
2021-05-24 16:00:06,904 [1] INFO Photon.Hive.Plugin.PluginManager - Plugin configured: name=MyFirstPlugin 2021-05-24 16:00:06,909 [1] DEBUG Photon.Hive.Plugin.PluginManager - Plugin path is set to 'D:\ExitGames\SDKs\Plugins\photon-server-plugin-sdk_v5-0-12-24499-rc1\deploy\Plugins/MyFirstPlugin//bin/MyFirstPlugin.dll' 2021-05-24 16:00:06,931 [1] INFO Photon.Hive.Plugin.PluginManager - Loaded Assembly Name=MyFirstPlugin, Version=1.0.0.0, Culture=, PublicKey token=, Path=D:\ExitGames\SDKs\Plugins\photon-server-plugin-sdk_v5-0-12-24499-rc1\deploy\Plugins/MyFirstPlugin//bin/MyFirstPlugin.dll 2021-05-24 16:00:06,931 [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= 2021-05-24 16:00:06,932 [1] INFO Photon.Hive.Plugin.PluginManager - Referenced Assembly Name=PhotonHivePlugin, Version=1.1.0.24499, Culture=, PublicKey token=, Path= 2021-05-24 16:00:06,932 [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 2021-05-24 16:00:06,933 [1] INFO Photon.Hive.Plugin.PluginManager - Plugin manager (version=1.1.0.24499) is setup. type=MyFirstPlugin.MyPluginFactory;path=D:\ExitGames\SDKs\Plugins\photon-server-plugin-sdk_v5-0-12-24499-rc1\deploy\Plugins/MyFirstPlugin//bin/MyFirstPlugin.dll;version=1.1.0.24499
Photon Server로 접속합니다. 아무 클라이언트 SDK를 사용합니다.
룸을 생성합니다. CreateRoom 오퍼레이션을 구현하는 SDK에 적합한 메소드를 호출합니다.
로그를 다시 확인합니다:
"{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.
디버그 모드
두 번째 파트에서는 플러그인 개발을 위한 권장 작업 흐름을 보여줍니다.
Visual Studio 프로젝트를 닫고 다시 오픈하지만 이때는 "{pluginsSdkFolder}\src-server\Plugins\MyFirstPlugin\MyFirstPlugin.sln" 솔루션 파일을 더블 클릭하여 오픈합니다.
이 단계는 매우 중요한데, 단계 3에 있는 솔루션 폴더 경로의 상대 경로를 사용하기 위해서입니다.플러그인 프로젝트의 "Post-Build Events"를 업데이트합니다:
이 아이디어는 프로젝트 빌드 출력 디렉토리에서 Photon 구성에 의해 예상 경로로 적용 및 붙여넣기를 통해 플러그인 바이너리를 자동으로 업데이트하는 것입니다.
스크린샷에 표시된 "Post-Build Events" 텍스트 영역에서 빌드에 성공한 직후에 이 작업을 수행하는 이 명령을 입력합니다.
편의성과 휴대성을 위해 상대 경로를 사용합니다.Plain Old Text
xcopy /Y /Q "$(TargetDir)*.*" "$(SolutionDir)..\..\..\deploy\Plugins\MyFirstPlugin\bin\"
저장하는 것을 잊지 마세요.
플러그인 프로젝트의 "Debug" 액션을 업데이트합니다:
여기서는 디버깅 플러그인이 시작될 때 자동으로 Photon Server를 시작하고 플러그인이 중지될 때 자동으로 중지하는 것을 목표로 합니다.
스크린샷에 표시된 대로 "시작 액션" 및 "시작 옵션"을 구성합니다.
편의성과 휴대성을 위해 상대 경로를 사용합니다."외부 프로그램 시작":
Plain Old Text
..\..\..\deploy\bin_Win64\PhotonSocketServer.exe
"명령어 라인 아규먼트":
Plain Old Text
/run LoadBalancing /configPath ..\..\..\..\..\deploy\bin_Win64
저장하는 것을 잊지 마세요.
중단점을 추가합니다:
[PhotonControl]에서 Photon Server 중지:
Visual Studio (F5)에서 Photon Server 시작하기:
작업 관리자를 사용하여 서버가 시작되었는지 확인할 수 있습니다. 이 프로세스의 이름은 Photon입니다.
Photon Server로 접속합니다. 어떤 클라이언트 SDK를 사용해도 무방합니다.
룸을 생성합니다. CreateRoom 작업을 구현하는 SDK에 적합한 메소드를 호출합니다.
중단점이 트리거 될 때까지 기다립니다: