Server Battle Manager に関する管理・集約処理を担当します。

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

クラス説明

クラス直前の Javadoc は見つかりませんでした。ソースとメソッド構成から責務を補完しています。

責務と見どころ

重点クラスの詳細解説

Server Battle Manager に関する管理・集約処理を担当します。battle パッケージの中でも 893 行規模の中核クラスで、運用中の主ループ・永続化境界・スケジューラが一か所に集まっています。中規模クラス群の中では変更影響が広く、章立てで読む価値が高いため重点解説へ追加しています。

最初に追う読む順番

  1. ServerBattleManager
    依存オブジェクトと初期状態を束ね、このクラスが担当するランタイムの前提を固めます。
  2. ensureColumnExists
    不足テーブル・設定・内部状態を先に揃える入口です。変更を入れる前提条件の確認地点になります。
  3. ensureServerStatsRow
    不足テーブル・設定・内部状態を先に揃える入口です。変更を入れる前提条件の確認地点になります。
  4. setupDatabase
    不足テーブル・設定・内部状態を先に揃える入口です。変更を入れる前提条件の確認地点になります。
  5. startHeartbeat
    定期処理や公開 API の起動地点で、外部から見える挙動がここから立ち上がります。
  6. startSelectionWindowScheduler
    定期処理や公開 API の起動地点で、外部から見える挙動がここから立ち上がります。
  7. startEventMonitor
    定期処理や公開 API の起動地点で、外部から見える挙動がここから立ち上がります。
  8. createBattleEvent
    実体や対象状態を作る段階で、後続フローがどのデータを前提に動くかを掴めます。
  9. attachToLocalEvent
    attachToLocalEvent の主要処理を担当します。

内部サブシステムの地図

永続化と状態同期

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

代表フロー詳解

変更時の注意点

外部接点

主な永続化テーブル

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

server_battle_server_statsserver_battle_serversserver_battle_eventsserver_battle_metaserver_idlast_heartbeatmeta_valuebattle_exp

フィールド

VisibilityTypeName役割
privatelongHEARTBEAT_PERIOD_TICKSHEARTBEAT_PERIOD_TICKS の状態を保持します。
privatelongEVENT_WINDOW_CHECK_PERIOD_TICKSEVENT_WINDOW_CHECK_PERIOD_TICKS の状態を保持します。
privatelongEVENT_MONITOR_PERIOD_TICKSEVENT_MONITOR_PERIOD_TICKS の状態を保持します。
privateintEVENT_START_CHANCE_PERCENTEVENT_START_CHANCE_PERCENT の状態を保持します。
privateDurationEVENT_DURATIONEVENT_DURATION の状態を保持します。
privateDurationEVENT_SELECTION_INTERVALEVENT_SELECTION_INTERVAL の状態を保持します。
privateDurationHEARTBEAT_FRESHNESSHEARTBEAT_FRESHNESS の状態を保持します。
privateStringSELECTION_LOCK_NAMESELECTION_LOCK_NAME の状態を保持します。
privateStringMETA_KEY_NEXT_SELECTION_ATMETA_KEY_NEXT_SELECTION_AT の状態を保持します。
privateList<String>TARGET_MOB_POOLTARGET_MOB_POOL の状態を保持します。
privateJavaPluginpluginプラグイン本体参照です。
privateDataSourcedsDB 接続元を保持します。
privateStringserverIdserverId の状態を保持します。
privateRandomrandomrandom の状態を保持します。
privateBattleQuestquestquest の状態を保持します。
privateintcurrentEventIdcurrentEventId の状態を保持します。
privateStringcurrentOpponentIdcurrentOpponentId の状態を保持します。
privatebooleanlocalEventStartedlocalEventStarted の状態を保持します。

コンストラクタ / 初期化

Signature説明主要呼び出し
public ServerBattleManager(JavaPlugin plugin, HikariDataSource ds, String serverId, BattleQuest quest)依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。setupDatabase → ensureServerStatsRow → startHeartbeat → startSelectionWindowScheduler → startEventMonitor

メソッド索引

NameVisibilityKind説明
ServerBattleManagerpublicコンストラクタ依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
setBattleQuestpublicメソッドsetBattleQuest の主要処理を担当します。
recordProgresspublicメソッドrecordProgress の主要処理を担当します。
getLocalBattleLevelpublicメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
getLocalScorePerKillpublicメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
getBattleLevelpublicメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
getScorePerKillpublicメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
setupDatabaseprivateメソッド初期化と各種登録を行い、機能を有効化します。
ensureColumnExistsprivateメソッド必要なテーブル・状態・前提条件が揃っているかを確認し、不足分を補います。
ensureServerStatsRowprivateメソッド必要なテーブル・状態・前提条件が揃っているかを確認し、不足分を補います。
ensureServerStatsRowprivateメソッド必要なテーブル・状態・前提条件が揃っているかを確認し、不足分を補います。
startHeartbeatprivateメソッド初期化と各種登録を行い、機能を有効化します。
startSelectionWindowSchedulerprivateメソッド初期化と各種登録を行い、機能を有効化します。
processSelectionWindowprivateメソッドDB への問い合わせまたは更新処理を担当します。
getMetaInstantprivateメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
setMetaInstantprivateメソッドDB への問い合わせまたは更新処理を担当します。
settleExpiredEventsprivateメソッドDB への問い合わせまたは更新処理を担当します。
reconcileActiveEventsprivateメソッドDB への問い合わせまたは更新処理を担当します。
cancelActiveEventprivateメソッド条件判定を行い、後続処理の分岐に使える真偽値を返します。
hasAnyActiveEventprivateメソッド条件判定を行い、後続処理の分岐に使える真偽値を返します。
findCandidateServersprivateメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
createBattleEventprivateメソッドDB への問い合わせまたは更新処理を担当します。
selectTargetMobNameprivateメソッドselectTargetMobName の主要処理を担当します。
startEventMonitorprivateメソッド初期化と各種登録を行い、機能を有効化します。
monitorCurrentServerEventprivateメソッドmonitorCurrentServerEvent の主要処理を担当します。
silentlySettleExpiredEventsForCurrentServerprivateメソッドDB への問い合わせまたは更新処理を担当します。
findActiveEventForServerprivateメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
getEventSnapshotprivateメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
readSnapshotprivateメソッドreadSnapshot の主要処理を担当します。
attachToLocalEventprivateメソッドattachToLocalEvent の主要処理を担当します。
settleEventIfNeededprivateメソッドsettleEventIfNeeded の主要処理を担当します。
settleEventIfNeededprivateメソッドDB への問い合わせまたは更新処理を担当します。
calculateWinnerRewardprivateメソッドcalculateWinnerReward の主要処理を担当します。
calculateLoserPenaltyprivateメソッドcalculateLoserPenalty の主要処理を担当します。
applyBattleExpChangeprivateメソッドDB への問い合わせまたは更新処理を担当します。
getBattleStatsprivateメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
levelFromExpprivateメソッドlevelFromExp の主要処理を担当します。
getRequiredExpForNextLevelprivateメソッド必要な状態を取得し、呼び出し側で利用しやすい形へ返します。
notifyResolvedBattleprivateメソッドnotifyResolvedBattle の主要処理を担当します。
cleanupLocalStateprivateメソッドcleanupLocalState の主要処理を担当します。
tryAcquireNamedLockprivateメソッドDB への問い合わせまたは更新処理を担当します。
releaseNamedLockprivateメソッドDB への問い合わせまたは更新処理を担当します。

メソッド詳細

ServerBattleManager

コンストラクタpublic
public ServerBattleManager(JavaPlugin plugin, HikariDataSource ds, String serverId, BattleQuest quest)

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

引数

throws

なし

主要な呼び出し順

setupDatabaseensureServerStatsRowstartHeartbeatstartSelectionWindowSchedulerstartEventMonitor

setBattleQuest

メソッドpublic
public void setBattleQuest(BattleQuest quest)

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

引数

throws

なし

主要な呼び出し順

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

recordProgress

メソッドpublic
public void recordProgress(long amount)

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

引数

throws

なし

主要な呼び出し順

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

getLocalBattleLevel

メソッドpublic
public int getLocalBattleLevel()

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

getBattleLevel

getLocalScorePerKill

メソッドpublic
public long getLocalScorePerKill()

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

getScorePerKill

getBattleLevel

メソッドpublic
public int getBattleLevel(String targetServerId)

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

isBlankgetConnectionprepareStatementsetStringexecuteQuerynextmaxgetInt

getScorePerKill

メソッドpublic
public long getScorePerKill(String targetServerId)

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

getBattleLevelmax

setupDatabase

メソッドprivate
private void setupDatabase()

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

引数

throws

なし

主要な呼び出し順

getConnectioncreateStatementexecuteUpdateserver_battle_serversserver_battle_eventsserver_battle_server_statsserver_battle_metagetLogger

ensureColumnExists

メソッドprivate
private void ensureColumnExists(String tableName, String columnName, String alterSql)

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

引数

throws

なし

主要な呼び出し順

getConnectiongetMetaDatagetColumnsgetCatalognextcreateStatementexecuteUpdategetLogger

ensureServerStatsRow

メソッドprivate
private void ensureServerStatsRow(String targetServerId)

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

引数

throws

なし

主要な呼び出し順

getConnectiongetLoggerwarninggetMessage

ensureServerStatsRow

メソッドprivate
private void ensureServerStatsRow(Connection c, String targetServerId) throws SQLException

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

引数

throws

SQLException

主要な呼び出し順

prepareStatementserver_battle_server_statssetStringexecuteUpdate

startHeartbeat

メソッドprivate
private void startHeartbeat()

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

引数

throws

なし

主要な呼び出し順

rungetServergetOnlinePlayerssizegetSchedulerrunTaskAsynchronouslygetConnectionprepareStatement

startSelectionWindowScheduler

メソッドprivate
private void startSelectionWindowScheduler()

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

引数

throws

なし

主要な呼び出し順

rungetSchedulerrunTaskAsynchronouslyrunTaskTimer

processSelectionWindow

メソッドprivate
private void processSelectionWindow()

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

引数

throws

なし

主要な呼び出し順

getConnectiontryAcquireNamedLocksettleExpiredEventsreconcileActiveEventsnowgetMetaInstantsetMetaInstantplus

getMetaInstant

メソッドprivate
private Instant getMetaInstant(Connection c, String key) throws SQLException

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

SQLException

主要な呼び出し順

prepareStatementsetStringexecuteQuerynextgetStringisBlankparsetrim

setMetaInstant

メソッドprivate
private void setMetaInstant(Connection c, String key, Instant instant) throws SQLException

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

引数

throws

SQLException

主要な呼び出し順

prepareStatementserver_battle_metasetStringtoStringexecuteUpdate

settleExpiredEvents

メソッドprivate
private void settleExpiredEvents(Connection c) throws SQLException

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

引数

throws

SQLException

主要な呼び出し順

prepareStatementexecuteQuerynextgetIntsettleEventIfNeeded

reconcileActiveEvents

メソッドprivate
private void reconcileActiveEvents(Connection c) throws SQLException

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

引数

throws

SQLException

主要な呼び出し順

prepareStatementexecuteQuerynextreadSnapshotnowisAftersettleEventIfNeededisBlank

cancelActiveEvent

メソッドprivate
private void cancelActiveEvent(Connection c, int eventId) throws SQLException

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

引数

throws

SQLException

主要な呼び出し順

prepareStatementsetIntexecuteUpdate

hasAnyActiveEvent

メソッドprivate
private boolean hasAnyActiveEvent(Connection c) throws SQLException

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

引数

throws

SQLException

主要な呼び出し順

prepareStatementexecuteQuerynext

findCandidateServers

メソッドprivate
private List<String> findCandidateServers(Connection c) throws SQLException

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

SQLException

主要な呼び出し順

prepareStatementsetTimestampfromnowminusexecuteQuerynextgetString

createBattleEvent

メソッドprivate
private int createBattleEvent(Connection c, String s1, String s2) throws SQLException

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

引数

throws

SQLException

主要な呼び出し順

selectTargetMobNameprepareStatementserver_battle_eventsnowsetStringsetTimestampfromplus

selectTargetMobName

メソッドprivate
private String selectTargetMobName()

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

引数

throws

なし

主要な呼び出し順

nextIntsize

startEventMonitor

メソッドprivate
private void startEventMonitor()

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

引数

throws

なし

主要な呼び出し順

runmonitorCurrentServerEventrunTaskTimerAsynchronously

monitorCurrentServerEvent

メソッドprivate
private void monitorCurrentServerEvent()

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

引数

throws

なし

主要な呼び出し順

getEventSnapshotcleanupLocalStateisAfternowsettleEventIfNeededattachToLocalEventnotifyResolvedBattlefindActiveEventForServer

silentlySettleExpiredEventsForCurrentServer

メソッドprivate
private void silentlySettleExpiredEventsForCurrentServer()

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

引数

throws

なし

主要な呼び出し順

getConnectionprepareStatementsetStringexecuteQuerynextgetIntsettleEventIfNeededgetLogger

findActiveEventForServer

メソッドprivate
private EventSnapshot findActiveEventForServer()

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

getConnectionprepareStatementsetStringexecuteQuerynextreadSnapshotgetLoggerwarning

getEventSnapshot

メソッドprivate
private EventSnapshot getEventSnapshot(int eventId)

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

getConnectionprepareStatementsetIntexecuteQuerynextreadSnapshotgetLoggerwarning

readSnapshot

メソッドprivate
private EventSnapshot readSnapshot(ResultSet rs) throws SQLException

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

引数

throws

SQLException

主要な呼び出し順

getTimestampgetIntgetStringtoInstantgetLonggetBoolean

attachToLocalEvent

メソッドprivate
private void attachToLocalEvent(EventSnapshot snapshot)

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

引数

throws

なし

主要な呼び出し順

othergetSchedulerrunTaskstartEvent

settleEventIfNeeded

メソッドprivate
private void settleEventIfNeeded(int eventId)

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

引数

throws

なし

主要な呼び出し順

getConnectiongetLoggerwarninggetMessage

settleEventIfNeeded

メソッドprivate
private void settleEventIfNeeded(Connection c, int eventId) throws SQLException

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

引数

throws

SQLException

主要な呼び出し順

getAutoCommitsetAutoCommitprepareStatementsetIntexecuteQuerynextrollbackreadSnapshot

calculateWinnerReward

メソッドprivate
private long calculateWinnerReward(long winnerScore, long loserScore)

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

引数

throws

なし

主要な呼び出し順

maxmin

calculateLoserPenalty

メソッドprivate
private long calculateLoserPenalty(long winnerScore, long loserScore)

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

引数

throws

なし

主要な呼び出し順

maxmin

applyBattleExpChange

メソッドprivate
private void applyBattleExpChange(Connection c, String targetServerId, long delta, boolean win, boolean loss) throws SQLException

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

引数

throws

SQLException

主要な呼び出し順

getBattleStatsmaxlevelFromExpprepareStatementserver_battle_server_statssetStringsetLongsetInt

getBattleStats

メソッドprivate
private BattleStats getBattleStats(Connection c, String targetServerId) throws SQLException

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

SQLException

主要な呼び出し順

ensureServerStatsRowprepareStatementsetStringexecuteQuerynextgetLongmaxgetInt

levelFromExp

メソッドprivate
private int levelFromExp(long totalExp)

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

引数

throws

なし

主要な呼び出し順

getRequiredExpForNextLevel

getRequiredExpForNextLevel

メソッドprivate
private long getRequiredExpForNextLevel(int currentLevel)

必要な状態を取得し、呼び出し側で利用しやすい形へ返します。

引数

throws

なし

主要な呼び出し順

max

notifyResolvedBattle

メソッドprivate
private void notifyResolvedBattle(EventSnapshot snapshot)

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

引数

throws

なし

主要な呼び出し順

equalsotherisBlankgetLocalBattleLevelgetLocalScorePerKillgetSchedulerrunTaskgetServer

cleanupLocalState

メソッドprivate
private void cleanupLocalState(boolean callQuestEnd)

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

引数

throws

なし

主要な呼び出し順

getSchedulerrunTaskendEvent

tryAcquireNamedLock

メソッドprivate
private boolean tryAcquireNamedLock(Connection c, String lockName)

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

引数

throws

なし

主要な呼び出し順

prepareStatementsetStringexecuteQuerynextgetInt

releaseNamedLock

メソッドprivate
private void releaseNamedLock(Connection c, String lockName)

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

引数

throws

なし

主要な呼び出し順

prepareStatementsetStringexecuteQuery

代表的な処理フロー

  1. 初期化フロー
    ServerBattleManager → setupDatabase → ensureServerStatsRow → startHeartbeat → startSelectionWindowScheduler → startEventMonitor
    依存オブジェクトや初期状態を受け取り、このクラスの動作を開始できる状態へ組み立てます。
  2. setupDatabase フロー
    setupDatabase → getConnection → createStatement → executeUpdate → server_battle_servers → server_battle_events
    初期化と各種登録を行い、機能を有効化します。
  3. startHeartbeat フロー
    startHeartbeat → run → getServer → getOnlinePlayers → size → getScheduler
    初期化と各種登録を行い、機能を有効化します。
  4. startSelectionWindowScheduler フロー
    startSelectionWindowScheduler → run → getScheduler → runTaskAsynchronously → runTaskTimer
    初期化と各種登録を行い、機能を有効化します。
  5. ensureColumnExists フロー
    ensureColumnExists → getConnection → getMetaData → getColumns → getCatalog → next
    必要なテーブル・状態・前提条件が揃っているかを確認し、不足分を補います。
  6. startEventMonitor フロー
    startEventMonitor → run → monitorCurrentServerEvent → runTaskTimerAsynchronously
    初期化と各種登録を行い、機能を有効化します。

外部との接点

Web ルート

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

SQL / テーブル

server_battle_server_statsserver_battle_serversserver_battle_eventsCURRENT_TIMESTAMPserver_battle_metaserver_idlast_heartbeatmeta_valuebattle_exp

関連クラス

補足