Files
echo-nexus/mini-services/star-tide-service
Super_Z 191434e6ad v0.8.2: 工单大清理 - 编年史分页+限时挑战+星潮深化+云排行榜+手写叙事+socket多人星潮+UI打磨
工单 #8 编年史上限+分页:
- engine.ts: slice(-50)→slice(-200)
- ChronicleDialog.tsx: 加分页(每页10条)+上一页/下一页+页码显示

工单 #5 限时挑战 (subagent 10-a):
- beacon.ts: BeaconTimedChallenge + getTimedSlotKey(4h时段) + generateTimedChallenge
- BeaconPanel.tsx: amber主题限时区块 + 倒计时 + <30min紧急状态
- gameStore: trackBeacon 加 timedJustCompleted + claimTimedBeacon action

工单 #3 星潮类型深化 (subagent 10-a):
- starTide.ts: +3种星潮 surge(emerald)/eclipse(rose)/prism(fuchsia)
- TideModifiers: +targetLenBonus/bossWinRateBonus/autoDecodeIntervalMult
- decode.ts: generatePuzzle 加 targetLenBonus 参数
- achievements: ach_tides_all 阈值 6→9

工单 #4/P2 云排行榜 (subagent 10-b):
- mini-services/leaderboard-service/ (端口3030, Hono+bun, 内存1000条)
- API: GET/POST /api/leaderboard + /stats + CORS + 防刷
- beacon.ts: fetchCloudLeaderboard/submitCloudScore
- BeaconPanel: 本地Top20/全球Top100 双tab + YOU徽章高亮

工单 #9 手写叙事 (subagent 10-c):
- chronicle.ts: EPOCH_LORE 5纪元×3节点=15段手写叙事(80-150字/段)
- buildLore 优先手写节点, fallback 模板, 11个变量替换

P3 socket 多人星潮 (subagent 10-c):
- mini-services/star-tide-service/ (端口3031, socket.io)
- 每10-15min广播global-tide, 60s持续, 6种类型权重
- useGlobalTide hook + triggerGlobalTide action
- StarTideIndicator 加 🌐 全球星潮标记

P2 UI打磨:
- page.tsx: CrystalOrb 区加装饰全息环(3层旋转) + 四角标记 + 顶部状态条 + 底部铭文

QA: lint零错误 + dev HTTP200 + VLM 8/10 + 2个mini-service运行中(3030/3031)
2026-06-23 23:57:41 +00:00
..

star-tide-service · 全球星潮同步 mini-service

回响星核 / Echo Nexus · P3 工单 #10-c

socket.io 多人同步星潮 —— 所有在线玩家同时经历同一道全球星潮 60 秒。

设计

  • 端口:固定 3031
  • 网关Caddy 通过 ?XTransformPort=3031 转发;前端用 io("/?XTransformPort=3031")
  • 运行时bun + socket.io 4
  • 存储:纯内存(无状态,重启不影响前端游戏)

星潮节奏

  • 首次星潮:服务端启动后 60 秒(可由 env FIRST_TIDE_DELAY_MS 覆盖,便于 QA
  • 后续星潮:10-15 分钟随机间隔
  • 每次持续:60 秒
  • 类型:从 6 种星潮按权重随机抽取(与前端 TIDE_EVENTS 一致)
    • 晶体潮 22 / 谐振风暴 20 / 遗迹共振 16 / 虚空低语 18 / 星核悸动 14 / 寂静期 10

socket.io 事件

服务端 → 客户端

事件 载荷 触发时机
tide-state { current: GlobalTideState | null, nextTideAt, serverTime } 客户端连接时立即推送
global-tide { type, name, startedAt, endsAt, durationSec } 全球星潮开始
tide-ended { endedAt, nextTideAt } 全球星潮结束
next-tide-info { current, nextTideAt, serverTime, remainingMs } 响应客户端 get-next-tide

客户端 → 服务端

事件 载荷 行为
get-next-tide 查询下次星潮剩余时间
admin-trigger-tide dev/QA 用:立即触发一次全球星潮

HTTP 端点

socket.io path: '/' 拦截所有 HTTP 请求,因此本服务不提供独立 HTTP 健康检查端点。

  • GET / —— socket.io 默认握手响应({"code":0,"message":"Transport unknown"} 表示服务在线)

启动

cd mini-services/star-tide-service
bun run dev   # bun --hot index.ts,热重载
# 或
bun run start # bun index.ts,无热重载

QA 验证

# socket.io 在线验证(收到 JSON 响应即表示服务在线)
curl http://localhost:3031/
# 预期:{"code":0,"message":"Transport unknown"}

前端可在浏览器 console 触发全球星潮(QA 用):

const sock = io("/?XTransformPort=3031");
sock.on("tide-state", (s) => console.log("当前状态:", s));
sock.emit("admin-trigger-tide"); // 立即触发一次全球星潮

离线容错

  • 服务端宕机 → 前端 useGlobalTide 自动重连(socket.io 默认行为)
  • 断连期间 → 前端本地 tickTide 继续按原节奏工作,玩家不会卡住
  • 全球星潮进行中 → 前端本地 tickTide 暂停触发(避免冲突)