Weitere ähnliche Inhalte Ähnlich wie 【Photon勉強会】1時間でわかるプラグイン開発とその実際(2017/3/23講演) (20) 【Photon勉強会】1時間でわかるプラグイン開発とその実際(2017/3/23講演)9. Webhooks & WebRPC
• ルーム内でのイベント発生時(ルーム作成、入
室、プロパティ設定など)に予め設定しておい
たWebサービスを呼び出すことができる
• 情報はPhoton -> Webサービスの片方向
(WebRPCの情報は逆も可)
• Photonのサーバー側は設定するだけでコーディ
ングの必要性なし
9
15. Pluginの内部構造
15
Hive
PluginPluginFactory : IPluginFactory
var plugin = new HogePlugin();
return plugin;
1.
2.
HogePlugin : PluginBase(IGamePlugin)
{
public OnCreate(...) { ... }
}
HogePlugin : PluginBase(IGamePlugin)
{
public OnCreate(...) { ... }
}
HogePlugin : PluginBase(IGamePlugin)
{
public OnCreate(...) { ... }
}
3.
17. 最小実装例
namespace HogePlugin {
public class PluginFactory : Photon.Hive.Plugin.IPluginFactory {
public IGamePlugin Create(...) {
var plugin = new HogePlugin();
if (plugin.SetupInstance(gameHost, config, out errorMsg)) {
return plugin;
}
return null;
}
}
}
17
21. プロパティ
• Name: Plugin名
– ゲーム開始後、ClientがどのPluginで動いているかを
確認する
• Version: Pluginのバージョン
– 同上。設定側で決めることも可能
• PluginHost: PluginのホストI/F
– Hive側とのやりとりを行うクラス
21
30. イベント受信・プロパティ設定
• イベント受信
– OnRaiseEvent()
• httpForwardのフラグに関わらず送信される
• Cancel()も可能
• プロパティ設定(Room, Player共通)
– BeforeSetProperties()
• ここでCancel()が可能
• ここでContinue()すると、プロパティの設定が行なわれる
– OnSetProperties()
30
36. 使用例
public void TimerAction() {
...
PluginHost.BroadcastEvent(ReceiverGroup.All, 0, 0, 1, new Dictionary<byte, string>
{ 1, "test" }, 0);
}
36
class TestPlugin : PluginBase {
...
this.BroadcastEvent(2, new Directory<byte, string> { 1, "params" });
38. 使用例
public override void BeforeSetProperties(IBeforeSetPropertiesCallInfo info) {
PluginHost.CreateOneTimeTimer(
() => info.Continue(),
2000);
info.Defer();
}
38
public void TimerAction() { ... }
object timer = PluginHost.CreateTimer(this.TimerAction, 2000, 1000);
...
PluginHost.StopTimer(timer);
40. 実装例-非同期
public override void OnRaiseEvent(IRaiseEventCallInfo info) {
...
HttpRequest request = new HttpRequest() {
Callback = OnHttpResponse,
Url = "https://hogehoge.com/hogehoge",
Async = true,
UserState = info
};
PluginHost.HttpRequest(request);
info.Defer();
}
40
41. 実装例-非同期 (続き)
public override void OnHttpRequest(IHttpReponse response, object userState) {
ICallInfo info = userState as ICallInfo;
...
if (info.IsDeffered) {
info.Continue();
}
}
41
42. 実装例-JSON
string json = "...";
var stream = new MemoryStream();
var data = Encoding.UTF8.GetBytes(json);
stream.Write(data, 0, data,length);
HttpRequest request = new HttpRequest() {
Callback = callback,
Url = "https://api.hoge.com/api/json",
DataStream = stream,
Method = "POST",
ContentType = "application/json"
};
PluginHost.HttpRequest(request);
42
47. サンプル
• サンプルは、Server SDK (Plugin SDKでない)に
ある、LoadBalancingソリューション内の
TestPluginsプロジェクトがお勧めです
• 十数個のPluginを1つのDLLでまとめているので、
複数Pluginのサンプルとしてもお勧めです
47
58. Cloud vs. Enterprise Cloud
Cloud
• Publicサービス (共有)
• 5,000CCUまで
• Webhooks対応
• 複数タイトル共有不可
• サーバー設定変更不可
Enterprise Cloud
• Privateサービス (専有)
• CCU上限なし
• Webhooks &
Plugin対応
• 複数タイトル共有可能
• サーバー設定変更可能
58
59. Enterprise Cloud + Plugin
• PhotonもPluginも運用フリー!
• ClientとPluginの開発に注力できます!
• 開発工数、運用工数を削減して、コンテンツ開
発に注力してください!
59
63. Plugin SDKとPlugin Template展開
• Plugin SDKを実行して、
任意のフォルダに展開
• Plugin Templateのブロッ
クを解除
• PluginTemplateを下記に
展開
– (plugin-sdk)¥src-
server¥Plugins
63
64. Visual Studio起動
• Visual Studioを起動
– 空のソリューションとするために、ファイルから開
くのではなくスタートメニューで起動
• PluginTemplateプロジェクトをオープン
– PluginTemplateフォルダにある
PluginTemplate.csproj
をオープン
64
68. ビルド & デバッグ開始
• ビルドを実行
• 下記メッセージが2つ出ればビルド成功
– 5個のファイルをコピーしました
• 続いてデバッグを開始
– 停止せず動いていればOK
• Windowsファイアウォールのメッセージが出た
場合は許可を
68
74. Plugin1
• EventCode = 10を受信したら、EventCode = 20
のイベントを全クライアントに送信する
• OnRaiseEvent()では基底クラスのメソッドを先
に呼んで処理を進めていますが、キャンセルな
どを行う可能性があるなら、基底クラスのメ
ソッドは呼ばないで
74
90. Photon SNSアカウント
• Twitter
– @PhotonCloudJP
• Facebook
– https://www.facebook.com/photoncloudjp/
• ヘルプセンター
– https://support.photonegine.jp/hc/ja
90