WebCoop (イベント/チャット) を SparkJava でマウントする薄いアダプタ。

15Fields
1Constructors
14Methods
830Lines
Package
com.example.rankingplugin.webcoop
Source
webcoop/WebCoopSpark.java
Kind
class
Roles
DB / 永続化Web / HTTP非同期 / スケジューラ初期化 / ブートストラップ
このクラスにも章立て解説を追加しています。 自動抽出の一覧だけでなく、下の『重点クラスの詳細解説』で読む順番・内部サブシステム・変更時の注意点まで追えます。 全クラス章立てガイドを見る
サブシステム横断ガイドもあります。 このクラスを含む上位の流れは こちらの処理遷移図ページ から読むと把握しやすいです。

クラス説明

WebCoop (イベント/チャット) を SparkJava でマウントする薄いアダプタ。
まずはダッシュボード/管理画面/疎通APIだけを提供する最小実装です。
今後、/webevent/api/* の各エンドポイントを段階的に実装していけます。

責務と見どころ

重点クラスの詳細解説

WebCoop (イベント/チャット) を SparkJava でマウントする薄いアダプタ。webcoop パッケージの中でも 830 行規模の中核クラスで、永続化境界・Web 導線・スケジューラが一か所に集まっています。中規模クラス群の中では変更影響が広く、章立てで読む価値が高いため重点解説へ追加しています。

最初に追う読む順番

  1. WebCoopSpark
    依存オブジェクトと初期状態を束ね、このクラスが担当するランタイムの前提を固めます。
  2. applyAdminPassword
    結果を反映・永続化する境界です。表示だけ直って保存が壊れる系の切り分けに向きます。
  3. isAdmin
    Web 側で露出する機能と内部状態の接点です。ルート追加時の読み始めに向いています。
  4. requireAdmin
    Web 側で露出する機能と内部状態の接点です。ルート追加時の読み始めに向いています。
  5. randToken
    Web 側で露出する機能と内部状態の接点です。ルート追加時の読み始めに向いています。
  6. cfg
    Web 側で露出する機能と内部状態の接点です。ルート追加時の読み始めに向いています。
  7. currentMcid
    Web 側で露出する機能と内部状態の接点です。ルート追加時の読み始めに向いています。
  8. register
    定期処理や公開 API の起動地点で、外部から見える挙動がここから立ち上がります。
  9. escape
    Web 側で露出する機能と内部状態の接点です。ルート追加時の読み始めに向いています。

内部サブシステムの地図

代表フロー詳解

初期化と起動の流れ

  1. WebCoopSpark
  2. register

このクラスが前提状態を揃え、外部から利用可能な形まで立ち上がる流れです。新規依存の追加や起動失敗の調査はまずここから追います。

通常運用の中心フロー

  1. applyAdminPassword

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

反映・保存・終了の流れ

  1. applyAdminPassword

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

変更時の注意点

外部接点

外部ルート

このクラス内で直接見つかる主な Web ルート/項目名です。

GET admin_sidGET /webevent/apiPOST /webevent/api/loginGET /webevent/api/stateGET /webeventGET /webevent/adminPOST /webevent/api/admin/loginGET /webevent/api/admin/statusGET /webevent/api/mePOST /webevent/api/logoutPOST /webevent/api/pingGET /webevent/api/viewers

主な永続化テーブル

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

webcoop_sessionswebcoop_userswebcoop_event_levelwebcoop_active_eventwebcoop_adminwebcoop_chatwebcoop_scheduleswebcoop_global_chatwebcoop_banpassword_hash

フィールド

VisibilityTypeName役割
privatejava.util.concurrent.ConcurrentMap<String, Long>VIEWERSVIEWERS の状態を保持します。
privatelongVIEWER_TTL_MSVIEWER_TTL_MS の状態を保持します。
privatejava.util.concurrent.ConcurrentMap<String, Long>ADMIN_SESSADMIN_SESS の状態を保持します。
privatelongADMIN_TTL_MSADMIN_TTL_MS の状態を保持します。
privateStringADMIN_PASSWORD_PLAINADMIN_PASSWORD_PLAIN の状態を保持します。
privatebooleanADMIN_PASSWORD_FORCEADMIN_PASSWORD_FORCE の状態を保持します。
privateJavaPluginpluginRefプラグイン本体参照です。
privateDataSourcedsDB 接続元を保持します。
privateEventServiceeventsevents の状態を保持します。
privateChatRelayServicechatchat の状態を保持します。
privateStringSERVER_IDSERVER_ID の状態を保持します。
privateStringSERVER_NAMESERVER_NAME の状態を保持します。
privateStringSESSION_COOKIESESSION_COOKIE の状態を保持します。
privatejava.util.Map<String, Long>GLOBAL_COOLDOWNGLOBAL_COOLDOWN の状態を保持します。
privatelongGLOBAL_CT_MSGLOBAL_CT_MS の状態を保持します。

コンストラクタ / 初期化

Signature説明主要呼び出し
private WebCoopSpark()依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。主要呼び出しなし

メソッド索引

NameVisibilityKind説明
WebCoopSparkprivateコンストラクタ依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
isAdminprivateメソッド条件判定を行い、後続処理の分岐に使える真偽値を返します。
requireAdminprivateメソッドrequireAdmin の主要処理を担当します。
randTokenprivateメソッドrandToken の主要処理を担当します。
cfgprivateメソッドcfg の主要処理を担当します。
currentMcidprivateメソッドDB への問い合わせまたは更新処理を担当します。
registerpublicメソッド初期化と各種登録を行い、機能を有効化します。
escapeprivateメソッドescape の主要処理を担当します。
applyAdminPasswordpackageメソッドDB への問い合わせまたは更新処理を担当します。
typeLabelprivateメソッドtypeLabel の主要処理を担当します。
isBannedprivateメソッド条件判定を行い、後続処理の分岐に使える真偽値を返します。
mcidFromSessionprivateメソッドmcidFromSession の主要処理を担当します。
serverDisplayNameprivateメソッドserverDisplayName の主要処理を担当します。
migrateWebcoopChatprivateメソッドDB への問い合わせまたは更新処理を担当します。

メソッド詳細

WebCoopSpark

コンストラクタprivate
private WebCoopSpark()

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

引数

throws

なし

主要な呼び出し順

目立つ内部呼び出しは抽出されませんでした。

isAdmin

メソッドprivatestatic
private static boolean isAdmin(Request req)

条件判定を行い、後続処理の分岐に使える真偽値を返します。

引数

throws

なし

主要な呼び出し順

cookiescurrentTimeMillis

requireAdmin

メソッドprivatestatic
private static boolean requireAdmin(spark.Request req, spark.Response res)

requireAdmin の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

isAdminstatustypebody

randToken

メソッドprivatestatic
private static String randToken()

randToken の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

randomUUIDtoStringreplace

cfg

メソッドprivatestatic
private static String cfg(String key, String def)

cfg の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

getConfiggetStringisEmpty

currentMcid

メソッドprivatestatic
private static String currentMcid(spark.Request req)

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

引数

throws

なし

主要な呼び出し順

cookieisEmptygetConnectionprepareStatementsetStringexecuteQuerynextgetString

register

メソッドpublicstatic
public static void register(JavaPlugin plugin, DataSource dataSource, EventService eventService, ChatRelayService chatService, String serverId, String serverName)

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

引数

throws

なし

主要な呼び出し順

isEmptygetConfiggetStringgetServergetMotdapplyAdminPasswordtypepost

escape

メソッドprivatestatic
private static String escape(String s)

escape の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

replace

applyAdminPassword

メソッドpackagestatic
static void applyAdminPassword(javax.sql.DataSource ds, String plaintext, boolean force)

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

引数

throws

なし

主要な呼び出し順

isBlankgetConnectionprepareStatementexecuteQuerynextgetIntwebcoop_adminsetString

typeLabel

メソッドprivatestatic
private static String typeLabel(String code)

typeLabel の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

目立つ内部呼び出しは抽出されませんでした。

isBanned

メソッドprivatestatic
private static boolean isBanned(DataSource ds, String mcid)

条件判定を行い、後続処理の分岐に使える真偽値を返します。

引数

throws

なし

主要な呼び出し順

isBlankgetConnectionprepareStatementsetStringexecuteQuerynext

mcidFromSession

メソッドprivatestatic
private static String mcidFromSession(Request req, DataSource ds)

mcidFromSession の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

cookiesgetConnectionprepareStatementsetStringexecuteQuerynextgetString

serverDisplayName

メソッドprivatestatic
private static String serverDisplayName(JavaPlugin plugin)

serverDisplayName の主要処理を担当します。

引数

throws

なし

主要な呼び出し順

getConfiggetStringgetServergetMotd

migrateWebcoopChat

メソッドprivatestatic
private static void migrateWebcoopChat(DataSource ds, String serverId)

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

引数

throws

なし

主要な呼び出し順

getConnectioncreateStatementexecuteUpdatewebcoop_chatexecuteQuerynextprepareStatementsetString

代表的な処理フロー

  1. register フロー
    register → isEmpty → getConfig → getString → getServer → getMotd
    初期化と各種登録を行い、機能を有効化します。
  2. applyAdminPassword フロー
    applyAdminPassword → isBlank → getConnection → prepareStatement → executeQuery → next
    DB への問い合わせまたは更新処理を担当します。
  3. currentMcid フロー
    currentMcid → cookie → isEmpty → getConnection → prepareStatement → setString
    DB への問い合わせまたは更新処理を担当します。
  4. migrateWebcoopChat フロー
    migrateWebcoopChat → getConnection → createStatement → executeUpdate → webcoop_chat → executeQuery
    DB への問い合わせまたは更新処理を担当します。
  5. mcidFromSession フロー
    mcidFromSession → cookies → getConnection → prepareStatement → setString → executeQuery
    mcidFromSession の主要処理を担当します。

外部との接点

Web ルート

GET admin_sidGET /webevent/apiPOST /webevent/api/loginGET /webevent/api/stateGET /webeventGET /webevent/adminPOST /webevent/api/admin/loginGET /webevent/api/admin/statusGET /webevent/api/mePOST /webevent/api/logoutPOST /webevent/api/pingGET /webevent/api/viewersGET /webevent/api/chat/listPOST /webevent/api/chat/sendGET /webevent/api/schedule/listPOST /webevent/api/admin/schedule/addGET /webevent/api/admin/schedule/listPOST /webevent/api/admin/schedule/togglePOST /webevent/api/admin/schedule/deletePOST /webevent/api/admin/startPOST /webevent/api/admin/chat/delete_by_userPOST /webevent/api/admin/banPOST /webevent/api/admin/unbanGET /webevent/api/admin/ban/listGET sid

SQL / テーブル

webcoop_sessionswebcoop_userswebcoop_event_levelwebcoop_active_eventwebcoop_adminwebcoop_chatwebcoop_scheduleswebcoop_global_chatwebcoop_banpassword_hash

関連クラス

補足