Help us understand the problem. What is going on with this article?

RPGアツマールのグローバルシグナル

概要

RPGアツマールには非同期ネットゲームを想定したAPIが存在します
その中の「グローバルシグナル」を使ってみた記事です

以前、ユーザーシグナルについての記事を書いているので
基本的な解説は重複しているところがあります

作ったもの

  • レイドバトル(エンディング後の要素にしています)

作ったものの具体的な説明については別な記事で書こうと思います

シグナルとは

ユーザー間での情報のやり取りを、シグナルという機能によって行えます
シグナルには100byte以内の情報(文字列)を入れることができます

例えば、送り側で以下のようなjsonの文字列を作って送信します

{ SignalId:1, SaveIdx:1, Hp:10000 }

受け側ではシグナルを取得すると送られた上記の文字列を取得できます
jsonを解釈することで、送り側から送られたSignalIdとSaveIdxとHpの値が分かるという流れです

送り側のユーザーIDや名前はこれとは別に付与されているので含めなくて大丈夫です

シグナルには「ユーザーシグナル」と「グローバルシグナル」があります

ユーザーシグナル

指定したユーザー間で情報をやり取りするときはユーザーシグナルを使います
送り先のユーザーIDを引数に指定して目的のユーザーに送信します
使い方のイメージは以下の記事にまとめています

グローバルシグナル

全ユーザーに対して情報を送るときにはグローバルシグナルを使います
ユーザーシグナルとの違いは

  • 全ユーザーに対して送信する
  • 自分発信のシグナルを受信する

という辺りです

グローバルシグナルの動き

本記事ではグローバルシグナルを解説します
全ユーザーに対して送る「グローバルシグナル」の動きを解説します

送り側は
window.RPGAtsumaru.experimental.sendSignalToGlobal()
を実行します

1回送ると全ユーザーが取得できるようになります

送り側とたくさんの受け側(自分も含む)がいて

図1.png

1件送るとこうなって・・・

図1.png

また1件送るとこうなって・・・

図1.png

サーバーに蓄積されていくイメージです

受け側は
window.RPGAtsumaru.experimental.getGlobalSignals()
を実行します

各ユーザーごとに、
1回の実行で先程送られた2件を全部取得します

図1.png

またこの後に、送り側から3件目、4件目を送信してから、
受け側でシグナルの取得を行うと、受け側では1~4件目を全部取得してしまいます

APIの実行では全部取得してしまうので、
ゲーム側で新しいシグナルだけを読みたい場合は、
どこまで取得したかの情報をクライアントで持っておく必要があります

公式プラグインの AtsumaruGlobalSignalExperimental.js が、
この辺りの制御をうまくやっていて、全シグナルを取りつつ、
ゲーム側には新しいシグナルしか渡さないようになっています

シグナルの情報が移動するイメージはユーザーシグナルとほぼ同じですが、
送る時はユーザーIDを指定せずに全員が取得できるように送ります
全員が取得できるということは自分も取得できてしまいます

公式プラグインを読み解く

ユーザーシグナルのものとほぼ同じです
上記の解説記事をご参照ください

すべてのシグナルを取得できない可能性がある

こちらはユーザーシグナルもグローバルシグナルも同じですが
以下のことに注意してゲームの仕様を決める必要があります

  • 一定の件数/容量を超えると古いものから削除される仕様のためシグナルは全て受け取れない可能性がある
  • 件数や容量の詳細は公式の制限詳細を参照してください

特にグローバルシグナルの場合全ユーザーのシグナルが来るので
古いものが欠落する可能性が高くなると思います

自分発信のシグナルを受け取る

グローバルシグナルはユーザーシグナルと違って全員が取得できるシグナルのため、自分が発信したシグナルを自分が受け取ることになります

例えば「誰かがログインしました」的な通知はグローバルシグナルで実現できると思いますが、自分のログイン通知をゲーム画面に出さなくてもよい仕様なのであれば、自分発信のシグナルを受け取ったときに除外するようにします

シグナルには発信者のユーザーIDが付与されているので、それが自分のユーザーIDと一致したら処理しない、とすればよいです

まとめ

グローバルシグナルの仕組みの説明と、使うときの注意点をまとめてみました
公式プラグインを使うだけであってもどういう動き方をしているのかが分かれば使い方のイメージがしやすいかなと思います

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away