feat(framework): protocol routes 常量 + login 请求构造/响应解析

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-06-28 14:25:29 +08:00
co-authored by Claude Opus 4.8
parent 540cf286a5
commit 0ada512464
3 changed files with 70 additions and 0 deletions
@@ -0,0 +1,29 @@
import type { LoginRequestData, LoginResponseData } from '../core/types/login.ts';
/** 构造 player_login 请求 data。字段以 docs/protocol/01 §6、02 为准。 */
export function buildLoginRequest(identity: LoginRequestData): LoginRequestData {
return { ...identity };
}
export interface ParsedLogin {
ok: boolean; // state===0
playerid: number;
inRoom: boolean; // 含 roomcode → 需恢复房间
hasBattle: boolean; // isbattle===1 或含 deskinfo → 需重连对局
deskinfo: unknown; // 子游戏对局快照(原样透传,见 docs/protocol/05)
raw: LoginResponseData;
}
/** 解析 player_login 响应(最小集)。完整字段见 docs/protocol/04。 */
export function parseLoginResponse(data: LoginResponseData): ParsedLogin {
const roomcode = (data as any).roomcode;
const deskinfo = (data as any).deskinfo;
return {
ok: data.state === 0,
playerid: data.playerid,
inRoom: roomcode != null && roomcode !== '',
hasBattle: (data as any).isbattle === 1 || deskinfo != null,
deskinfo,
raw: data,
};
}
@@ -0,0 +1,9 @@
import { Route } from '../core/constants.ts';
export { Route };
/** 平台层会用到的 rpc 名(最小集)。完整清单见 docs/protocol/02、03。 */
export const Rpc = {
player_login: 'player_login',
kick_server: 'kick_server',
connect_roomserver: 'connect_roomserver',
connect_agentserver: 'connect_agentserver',
} as const;