@faiber/faiber-state-sdk (英语)
被打入了状态世界,房间,WASM输出绑定,服务器授权游戏和票证认证的WebSockets.
npm install @faiber/faiber-state-sdk
import { FaiberClient } from "@faiber/sdk-core";
import { StateApi, StateRealtimeClient } from "@faiber/faiber-state-sdk";
const state = new StateApi(new FaiberClient("state", {
domains: { state: "https://state.example.com" },
authMode: "cookie",
}));
const options = { headers: { "x-organization-id": organizationId }, signal };
const world = await state.createWorld({ name: "Arena", slug: "arena" }, options);
const room = await state.createRoom(world.data.data.id, { name: "Room 1", capacity: 8 }, options);
const ticket = (await state.join(room.data.data.id, userId, options)).data.data;
const realtime = new StateRealtimeClient(ticket);
realtime.on("patch", patch => applyServerPatch(patch));
realtime.on("pong", ({ tick }) => observeServerTick(tick));
await realtime.connect();
realtime.sendInput({ move_x: 5, move_z: -1 });
// On leaving the room:
realtime.close();
使用安全的 Http 只使用 cookie withCredentials,或配置 FaiberClient 带有 TokenProvider 提供纪念物 每一次HTTP呼叫都保留了全部Axios响应,选项,出错和取消信号. 抓取Axios错误进行验证(400/422),缺失记录(404),许可失败(401/403),冲突(409)和运输失败. 中止 signal 取消 HTTP 请求 。 完整的外观是: @faiber/faiber-ts-sdk。 。 。 .
v1 世界/房间/WASM操作需要认证用户,非无 x-organization-id UUID,以及 state:read, (中文(简体) ), state:write,或 state:execute 每项行动都有记录。 国家管理、通配和管理员别名也被接受。 为另一个用户加入/援引需要管理机构。 管理游戏世界曝光 managed: true 并用409拒绝更新/删除。 所有 v1 和 v2 成功响应使用 { data }。 。 。 .
浏览器在WebSocket上携带房间输入. 本地主机可以注射 DatagramTransport 用于JSON UDP输入网关;每个数据格包含有范围的房间票. acked UDP 发送返回确认 。 5分钟后房票过期,升级时会检查;再入场获得新玩家和出场券. close() 停止重试。 后端既可作为输入响应提供补丁,也可作为广播;消费者应当跟踪实体修改/顺序. PredictionBuffer 可以在权威更新后重放待定输入.
生成的 state.operations 覆盖所有挂载的HTTP API和WebSocket的升级. v2 游戏目录读取为公开; 受保护的游戏操作需要 state:execute 和适用的所有人/成员支票。 SQL游戏运行时间使用服务所配置的租户. 游戏操作摘要,节俭,会话页和事件页都命名了响应模型. 他们的查询键使用蛇 case( Namepage_size, (中文(简体) ), settlement_status, (中文(简体) ), user_id;返回的页面元数据使用骆驼Case. 会话页面默认为25个条目,事件页面默认为50个,同时夹住大小为10–100个.
const created = await state.operations.gamesRoutesCreateSessionPost(gameId, {
difficulty: "11-14", paid: false,
}, { signal });
const page = await state.operations.routesGameOperationSessionsGet({
page: 1, page_size: 25, paid: false,
}, options);
const connection = await state.createMatchConnection(matchId, { signal });
const socket = await state.operations.connectMatchRealtime(connection.data.data, { signal });
游戏命令包括一个稳定的指令UUID和预期状态版本. Stale HTTP 游戏版本返回 409;匹配 WebSocket 命令拒绝使用 command_result 框架和一个新鲜的快照。 棋盘、挑战、衡量标准、事件有效载荷和游戏答案/动作JSON因注册的游戏/规则集而刻意不同,被记录为 GamePayload;组件/输入JSON因作者的世界计划而异.
connectMatchRealtime 验证所配置的服务来源,并在5秒内在初始Hello框架中发出30秒一使用接通票. 复通后取出新票. MatchRealtimeClient 仅在提供时自动重新连接 refreshTicket;消费的票不能被再使用。 服务器验证允许浏览器Origins. routesRealtimeGet(ticket, { signal }) 对照配置的服务源打开 v1 房间复制。 Socket 操作返回连接的 WebSocket/客户端 .
health() 财务报告和审定财务报表 operations.mainProcessHealthGet() 读取静态 /health 广告service, (中文(简体) ), status, (中文(简体) ), transports, (中文(简体) ), rulesets, (中文(简体) ), wasm) (中文(简体) ). 这广告的WebSocket和 kheradgah.v1;它不验证数据库,游戏玩法,持久性,网关或WebSocket准备状态.