This document is about: SERVER 4
SWITCH TO

詳細なガイド

このガイドは、Photon Plugins SDK version 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
    Visual Studio 2019でのプロジェクト作成ウィンドウ
  5. 依存関係の追加: 1つのライブラリのみが必要です: "PhotonHivePlugin.dll". Visual Studioから追加する方法は以下のとおりです:

    • プロジェクトから「References」を右クリックします。
    • 「Add Reference..」をクリックします。
    • 「Browse」を選択します。
    • 「Browse」をクリックして、「{pluginsSdkFolder}\src-server\Plugins\lib\PhotonHivePlugin.dll」を選択します。
    • 確認したら「OK」をクリックします。
  6. プラグインクラスを追加します:

    • Visual Studioで自動的に作成されたクラスファイルの名前を「Class.cs」から「MyFirstPlugin.cs」へ変更します。
    • Visual Studioからクラスの名前の変更が提案されるので、承認してください。提案されない場合には、クラスの名前をClassからMyFirstPluginへ変更します。
    • PluginBaseを拡張します。

    C#

    using Photon.Hive.Plugin;
    
        namespace MyFirstPlugin
        {
            public class MyFirstPlugin : PluginBase
            {
            }
        }
    
  7. プラグイン名を設定します:

    C#

    public override string Name
    {
        get { return "MyFirstPlugin"; }
    }
    
    • 予約されたプラグイン名は「Default」と「ErrorPlugin」です。
  8. コールバック内にログメッセージを追加します:

    C#

    public override void OnCreateGame(ICreateGameCallInfo info)
    {
        this.PluginHost.LogInfo(string.Format("OnCreateGame {0} by user {1}", info.Request.GameId, info.UserId));
    }
    
  9. コールバック処理メソッドを1つ呼び出します:

    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);
    }
    
  10. プラグインファクトリクラスを追加します:

    • MyPluginFactoryという名前の新しいクラスを追加します。
    • そのクラスをパブリックにします。

    C#

    using System.Collections.Generic;
    using Photon.Hive.Plugin;
    
    namespace MyFirstPlugin
    {
        public class MyPluginFactory
        {
        }
    }
    
  11. インターフェース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();
            }
        }
    }
    
  12. プラグインを作成し、返します:

    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;
    }
    
  13. ソリューションをビルドします(F6)。

  14. プラグインの設定をアップデートします:

    • 「{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のプラグイン設定についてはこちらを参照してください。

  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
    PhotonControlからLoadBalancingを起動
  18. ログを確認します:

    PhotonControlから直接ログを開きます:

    open logs from photoncontrol
    PhotonControlからログを開きます

    「{pluginsSdkFolder}\deploy\log\GSGame.log」で、プラグインの設定が解析され、正常に処理されたことを確認します:

    Plain Old Text

    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に接続します。任意のクライアントSDKを使用してください。

  20. ルームを作成します。CreateRoom操作を実装するSDKに適したメソッドを呼び出します。

  21. ログを再確認します。 「"{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. Visual Studioプロジェクトを一旦閉じて、再度、"{pluginsSdkFolder}\src-server\Plugins\MyFirstPlugin\MyFirstPlugin.sln"というソリューションファイルをダブルクリックして開きます。 このステップは、ステップ3のソリューションフォルダのパスからの相対パスを使用できるようにするために重要です。

  2. プラグインプロジェクトの「ビルド後のイベント」を更新します。

    プロジェクトのビルド出力ディレクトリから、Photonの設定によって期待されるパスにコピー&ペーストすることで、プラグインのバイナリを自動的に更新します。

    このコマンドは、ビルドが成功した直後に、「Post-Build Events」テキストエリアに入力します(スクリーンショットを参照)。 利便性と移植性を考慮して、相対パスを使用しています。

    Plain Old Text

    xcopy /Y /Q "$(TargetDir)*.*" "$(SolutionDir)..\..\..\deploy\Plugins\MyFirstPlugin\bin\"
    
    post build events
    Post Build Events

    Do not forget to save.

  3. プラグインプロジェクトの「デバッグ」アクションをアップデートします:

    ここでは、デバッグプラグインの起動と同時にPhoton Serverを自動的に起動し、またデバッグプラグインの停止と同時にPhoton Serverを自動的に停止する、という考えが前提になっています。

    スクリーンショットのように「Start action」と「Start options」を設定してください。 ここでは、利便性と移植性のため相対パスを使用しています。

    • "Start external program":

      Plain Old Text

      ..\..\..\deploy\bin_Win64\PhotonSocketServer.exe
      
    • "Command line arguments":

      Plain Old Text

      /run LoadBalancing /configPath ..\..\..\..\..\deploy\bin_Win64
      
    debug start action
    Debug Start Action

    忘れずに保存してください。

  4. ブレークポイントを追加します:

    breakpoint in myfirstplugin.oncreategame
    MyFirstPlugin.OnCreateGame内のブレークポイント
  5. [PhotonControl]からPhoton Serverを停止します:

    stop loadbalancing from photoncontrol
    PhotonControlからLoadBalancingを停止
  6. Visual StudioからPhoton Serverを起動します(F5):

    photon server debug started from visual studio
    Visual StudioからPhoton Serverデバッグを起動

    サーバーが起動したかは、TaskManagerを使用して確認できます。プロセス名はPhotonです。

  7. Photon Serverに接続します。任意のクライアントSDKを使用してください。

  8. ルームを作成します。CreateRoom操作を実装するSDKに適したメソッドを呼び出してください。

  9. ブレークポイントがトリガーされるのを待ちます:

    breakpoint triggered
    トリガーされたブレークポイント

PhotonControl

Back to top