Class GuiApiServer

java.lang.Object
server.gui.GuiApiServer

public final class GuiApiServer extends Object
GUI 管理控制台的輕量 HTTP API,提供 gui/ 前端讀取「即時」伺服器狀態。

使用 JDK 內建 HttpServer(零新相依),僅綁定 127.0.0.1 ——永遠不對外可達,符合本專案 localhost 信任的安全姿態 (與 DatabaseConnection 對 loopback DB 的特例一致)。回應為 UTF-8 JSON。

server.Start.run() 在三個 Netty 伺服器與遊戲資料皆就緒後啟動 (start()),於關服流程停止(stop())。可由 settings.inigui.api.enabled / gui.api.port 開關與設定埠號。

端點:

  • GET /api/health —— 存活檢查。
  • GET /api/overview —— 總覽頁所需的即時資訊(在線、歷史最高、運行時間、 今日註冊、倍率、各頻道狀態、最近嚴重事件、管理員模式、倒數關機狀態)。
  • GET /api/players —— 玩家管理頁的角色清單(characters 表內容聯結 accounts 取遊戲帳號名,並依目前在線玩家集合標記 online 狀態)。
  • GET /api/players/{id} —— 單一角色 + 其帳號的完整詳情(供詳情/編輯視窗)。
  • POST /api/players/{id} —— 儲存詳情視窗的修改(帳號欄位、角色欄位, 以及帳號/MAC/IP 的封鎖狀態);角色在線時變更會即時套用到遊戲中(見 LiveCharacterEditor)。
  • POST /api/players/{id}/password —— 以 {"password":"…"} 變更該角色所屬帳號的密碼。
  • GET /api/bans/related —— 封鎖/解封頁的「關聯帳號」:以創建與最後連線的 IP/MAC 連動歸群(union-find 連通分量),回傳每組共用 IP/MAC 的帳號(含其所有角色名與封鎖狀態)。
  • POST /api/bans/account/{id} —— 以 {"banned":bool} 切換單一帳號的封鎖狀態 (accounts.banned)。
  • POST /api/control/shutdown —— 以 {"minutes":N} 排程倒數關機 (等同遊戲內 !shutdowntime N);{"cancel":true} 取消倒數。
  • POST /api/control/admin-mode —— 以 {"enabled":bool} 切換 「管理員模式」(只有 GM 帳號可登入),並寫回 settings.ini 以便重啟後記住。
  • GET /api/chatlog?type=N&names=a,b —— 對話紀錄頁的訊息清單(依頻道型別、可選角色名稱 篩選;chatlog 表聯結 characters 取角色名,依時間遞增回傳最近 N 筆)。
  • GET /api/chatlog/context?id=N —— 某句話前後的對話上下文(同頻道、不套用名稱篩選),供「跳到」檢視。
  • GET /api/chatlog/check-name?name=X —— 驗證遊戲暱稱是否存在(供加入篩選前檢查)。
  • GET /api/logs/lookup?q=X —— 統一紀錄頁的查詢:以遊戲帳號或角色暱稱解析出帳號 + 其所有角色 (角色暱稱搜尋會一併回傳預選的角色 id)。
  • GET /api/logs/entries?accId=N&charId=M —— 某角色(CHAR 範圍)與其帳號(ACC 範圍) 在當前週期_acc_char_log 計數(依日/週/月/永久分類,與遊戲端 getLog 讀同一列)。
  • POST /api/logs/entry —— 以 {accId,charId,scope,resetType,eventName,count} 覆蓋當前週期某筆計數。
  • POST /api/logs/entry/delete —— 以 {accId,charId,scope,resetType,eventName} 刪除當前週期某筆計數。
  • GET /api/drops/monsters —— 「掉落物設定 / 怪物掉落」頁的怪物清單(WZ Mob.img 的 怪物 id → 名稱,附各怪在 drop_data 的掉落列數 dropCount)。
  • GET /api/drops/monster/{id} —— 單一怪物的掉落列(drop_data 聯結 wz_itemdata 取道具名)。
  • POST /api/drops/monster/{id} —— 以 {itemId,min,max,chance,questId} 新增一筆掉落, 寫入 drop_data 並重載掉落表使其即時生效(等同 !reloaddrops)。
  • PUT /api/drops/drop/{id} —— 以 {min,max,chance,questId} 修改既有掉落列 (以 drop_data.id 定位,不更換物品),並重載掉落表使其即時生效。
  • DELETE /api/drops/drop/{id} —— 刪除既有怪物掉落列(以 drop_data.id 定位),並重載掉落表使其即時生效。
  • GET /api/drops/item-lookup?code=X|name=Y —— 道具代碼↔名稱互查(讀 wz_itemdata),供新增視窗自動帶入另一欄。
  • GET /api/drops/global —— 全部全域掉落(drop_data_global 聯結 wz_itemdata 取道具名; 含怪物等級門檻 mobLevel、活動旗標 eventOnly 與起訖時間 startDateendDate)。
  • POST /api/drops/global —— 以 {itemId,min,max,chance,mobLevel,eventOnly,startDate,endDate} 新增一筆全域掉落(continent=-1 套用所有地圖),寫入 drop_data_global 並重載掉落表使其即時生效。
  • PUT /api/drops/global/{id} —— 以 {min,max,chance,mobLevel,eventOnly,startDate,endDate} 修改既有全域掉落 (以 drop_data_global.id 定位,不更換物品),並重載掉落表使其即時生效。
  • DELETE /api/drops/global/{id} —— 刪除既有全域掉落列(以 drop_data_global.id 定位),並重載掉落表使其即時生效。

寫入端點同樣只綁 127.0.0.1,沿用本專案 localhost 信任的安全姿態。

  • Method Details

    • start

      public static void start()
      啟動 HTTP API(依 settings.ini 開關;重複呼叫無作用)。
    • stop

      public static void stop()
      停止 HTTP API(關服流程呼叫;未啟動則無作用)。