全サーバー連携チャット用ブリッジ。

9Fields
1Constructors
11Methods
258Lines
Package
com.example.rankingplugin.webcoop
Source
webcoop/ChatRelayService.java
Kind
class
Roles
DB / 永続化非同期 / スケジューラ初期化 / ブートストラップサービス層
このクラスにも章立て解説を追加しています。 自動抽出の一覧だけでなく、下の『重点クラスの詳細解説』で読む順番・内部サブシステム・変更時の注意点まで追えます。 全クラス章立てガイドを見る

クラス説明

全サーバー連携チャット用ブリッジ。
- WebDataServer側の /webevent/api/globalchat/* と同じ webcoop_global_chat を使用
- src='mc' : Minecraft → Web
- src='web': Web → Minecraft

責務と見どころ

重点クラスの詳細解説

全サーバー連携チャット用ブリッジ。webcoop パッケージの 小〜中規模クラスで、永続化境界・スケジューラを確認する起点です。全面展開版では、他の重点クラスと同じ章立てで読めるように補強しています。

最初に追う読む順番

  1. ChatRelayService
    依存オブジェクトと初期状態を束ね、このクラスが担当するランタイムの前提を固めます。
  2. ensureGlobalChatTable
    不足テーブル・設定・内部状態を先に揃える入口です。変更を入れる前提条件の確認地点になります。
  3. initLastBroadcastId
    不足テーブル・設定・内部状態を先に揃える入口です。変更を入れる前提条件の確認地点になります。
  4. startPolling
    定期処理や公開 API の起動地点で、外部から見える挙動がここから立ち上がります。
  5. enqueueFromMc
    MC内からの「全サーバー連携チャット」発言を記録。
  6. enqueueLocalFromMc
    DB への問い合わせまたは更新処理を担当します。
  7. stop
    後片付けと停止の出口です。残骸や再ログイン後の不整合はここを確認します。
  8. postFromWebGlobal
    Web からの全サーバー連携発言(/webevent/api/globalchat/send 等)用。

内部サブシステムの地図

状態反映と永続化

メモリ状態と保存状態を揃え、結果を次の呼び出しや画面表示へ繋ぐ部分です。

主なメソッド
主なフィールド

終了処理と掃除

停止時やフロー終端で残る実体・タスク・キャッシュを戻す出口です。

主なメソッド
主なフィールド

永続化と状態同期

DB テーブルとの境界です。スキーマ変更や保存漏れの切り分けはここから行います。

主なフィールド

非同期処理と定期実行

メインスレッド境界とバックグラウンド処理が交差します。重い処理やタイミング起因の不具合を追うときの要所です。

主なフィールド

代表フロー詳解

通常運用の中心フロー

  1. deleteMessage

イベント受理、判定、状態更新、通知までの主経路です。体感不具合や想定外の分岐はこの流れのどこで止まるかを見ると切り分けやすいです。

反映・保存・終了の流れ

  1. deleteMessage
  2. stop

結果を保持し、必要なら永続化し、最後に掃除まで行う出口です。画面更新だけ合って保存が壊れるケースや残骸が残るケースの確認に向きます。

変更時の注意点

外部接点

主な永続化テーブル

SQL 文字列から抽出できた主要テーブルです。スキーマ変更時の確認用です。

webcoop_global_chatwebcoop_chat

フィールド

VisibilityTypeName役割
privateJavaPluginpluginプラグイン本体参照です。
privateDataSourcedsDB 接続元を保持します。
privateMap<String, Long>lastPostlastPost の状態を保持します。
privateintpollTaskId非同期処理やスケジューラ制御に使うハンドルです。
privateMap<String, Long>lastLocalPostlastLocalPost の状態を保持します。
privatelongLOCAL_CT_SECLOCAL_CT_SEC の状態を保持します。
privateStringserverIdserverId の状態を保持します。
privateStringserverNameserverName の状態を保持します。
privatelonglastBroadcastIdlastBroadcastId の状態を保持します。

コンストラクタ / 初期化

Signature説明主要呼び出し
public ChatRelayService(JavaPlugin plugin, Db db)依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。ds → getConfig → getString → getServer → getMotd → ensureGlobalChatTable

メソッド索引

NameVisibilityKind説明
ChatRelayServicepublicコンストラクタ依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
enqueueFromMcpublicメソッドMC内からの「全サーバー連携チャット」発言を記録。
enqueueLocalFromMcpublicメソッドDB への問い合わせまたは更新処理を担当します。
postFromWebGlobalpublicメソッドWeb からの全サーバー連携発言(/webevent/api/globalchat/send 等)用。
initLastBroadcastIdprivateメソッド初期化と各種登録を行い、機能を有効化します。
postFromWebpublicメソッド旧シグネチャ互換: 中身はグローバル扱い
deleteMessagepublicメソッド管理用削除: フラグだけ立てる
postLocalFromWebpublicメソッドDB への問い合わせまたは更新処理を担当します。
startPollingpublicメソッドWeb→MC 方向のブリッジ。
stoppublicメソッド動作中の処理やリソースを安全に停止・解放します。
ensureGlobalChatTableprivateメソッド必要なテーブル・状態・前提条件が揃っているかを確認し、不足分を補います。

メソッド詳細

ChatRelayService

コンストラクタpublic
public ChatRelayService(JavaPlugin plugin, Db db)

依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。

引数

throws

なし

主要な呼び出し順

dsgetConfiggetStringgetServergetMotdensureGlobalChatTable

enqueueFromMc

メソッドpublic
public void enqueueFromMc(String mcid, String msg)

MC内からの「全サーバー連携チャット」発言を記録。

引数

throws

なし

主要な呼び出し順

isBlanklengthsubstringgetConnectionprepareStatementwebcoop_global_chatsetStringexecuteUpdate

enqueueLocalFromMc

メソッドpublic
public void enqueueLocalFromMc(String mcid, String msg)

DB への問い合わせまたは更新処理を担当します。

引数

throws

なし

主要な呼び出し順

isBlanklengthsubstringgetConnectionprepareStatementwebcoop_chatsetStringexecuteUpdate

postFromWebGlobal

メソッドpublic
public boolean postFromWebGlobal(String mcid, String msg)

Web からの全サーバー連携発言(/webevent/api/globalchat/send 等)用。

引数

throws

なし

主要な呼び出し順

isBlanknowgetEpochSecondgetOrDefaultlengthsubstringgetConnectionprepareStatement

initLastBroadcastId

メソッドprivate
private void initLastBroadcastId()

初期化と各種登録を行い、機能を有効化します。

引数

throws

なし

主要な呼び出し順

getConnectioncreateStatementexecuteQuerynextgetLong

postFromWeb

メソッドpublic
public boolean postFromWeb(String mcid, String msg)

旧シグネチャ互換: 中身はグローバル扱い

引数

throws

なし

主要な呼び出し順

postFromWebGlobal

deleteMessage

メソッドpublic
public void deleteMessage(long id)

管理用削除: フラグだけ立てる

引数

throws

なし

主要な呼び出し順

getConnectionprepareStatementsetLongexecuteUpdate

postLocalFromWeb

メソッドpublic
public boolean postLocalFromWeb(String mcid, String msg)

DB への問い合わせまたは更新処理を担当します。

引数

throws

なし

主要な呼び出し順

isBlanknowgetEpochSecondgetOrDefaultlengthsubstringgetConnectionprepareStatement

startPolling

メソッドpublic
public void startPolling()

Web→MC 方向のブリッジ。

引数

throws

なし

主要な呼び出し順

initLastBroadcastIdgetSchedulerrunTaskTimerAsynchronouslygetConnectionprepareStatementsetLongexecuteQuerynext

stop

メソッドpublic
public void stop()

動作中の処理やリソースを安全に停止・解放します。

引数

throws

なし

主要な呼び出し順

getSchedulercancelTask

ensureGlobalChatTable

メソッドprivate
private void ensureGlobalChatTable()

必要なテーブル・状態・前提条件が揃っているかを確認し、不足分を補います。

引数

throws

なし

主要な呼び出し順

getConnectioncreateStatementexecuteUpdatewebcoop_global_chat

代表的な処理フロー

  1. 初期化フロー
    ChatRelayService → ds → getConfig → getString → getServer → getMotd
    依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
  2. startPolling フロー
    startPolling → initLastBroadcastId → getScheduler → runTaskTimerAsynchronously → getConnection → prepareStatement
    Web→MC 方向のブリッジ。
  3. initLastBroadcastId フロー
    initLastBroadcastId → getConnection → createStatement → executeQuery → next → getLong
    初期化と各種登録を行い、機能を有効化します。
  4. ensureGlobalChatTable フロー
    ensureGlobalChatTable → getConnection → createStatement → executeUpdate → webcoop_global_chat
    必要なテーブル・状態・前提条件が揃っているかを確認し、不足分を補います。
  5. stop フロー
    stop → getScheduler → cancelTask
    動作中の処理やリソースを安全に停止・解放します。
  6. enqueueFromMc フロー
    enqueueFromMc → isBlank → length → substring → getConnection → prepareStatement
    MC内からの「全サーバー連携チャット」発言を記録。

外部との接点

Web ルート

このクラス内に目立つ Web ルート定義は見つかりませんでした。

SQL / テーブル

webcoop_global_chatwebcoop_chat

関連クラス

補足