feat(rpc,network): 新增 RPC 库并迁移网络模块 (#364)
* feat(rpc,network): 新增 RPC 库并迁移网络模块 ## @esengine/rpc (新增) - 新增类型安全的 RPC 库,支持 WebSocket 通信 - 新增 RpcClient 类:connect/disconnect, call/send/on/off/once 方法 - 新增 RpcServer 类:Node.js WebSocket 服务端 - 新增编解码系统:支持 JSON 和 MessagePack - 新增 TextEncoder/TextDecoder polyfill,兼容微信小游戏平台 - 新增 WebSocketAdapter 接口,支持跨平台 WebSocket 抽象 ## @esengine/network (重构) - 重构 NetworkService:拆分为 RpcService 基类和 GameNetworkService - 新增 gameProtocol:类型安全的 API 和消息定义 - 新增类型安全便捷方法:sendInput(), onSync(), onSpawn(), onDespawn() - 更新 NetworkPlugin 使用新的服务架构 - 移除 TSRPC 依赖,改用 @esengine/rpc ## 文档 - 新增 RPC 模块文档(中英文) - 更新 Network 模块文档(中英文) - 更新侧边栏导航 * fix(network,cli): 修复 CI 构建和更新 CLI 适配器 ## 修复 - 在 tsconfig.build.json 添加 rpc 引用,修复类型声明生成 ## CLI 更新 - 更新 nodejs 适配器使用新的 @esengine/rpc - 生成的服务器代码使用 RpcServer 替代旧的 GameServer - 添加 ws 和 @types/ws 依赖 - 更新 README 模板中的客户端连接示例 * chore: 添加 CLI changeset * fix(ci): add @esengine/rpc to build and check scripts - Add rpc package to CI build step (must build before network) - Add rpc to type-check:framework, lint:framework, test:ci:framework * fix(rpc,network): fix tsconfig for declaration generation - Remove composite mode from rpc (not needed, causes CI issues) - Remove rpc from network project references (resolves via node_modules) - Remove unused references from network tsconfig.build.json
This commit is contained in:
63
packages/framework/rpc/src/define.ts
Normal file
63
packages/framework/rpc/src/define.ts
Normal file
@@ -0,0 +1,63 @@
|
||||
/**
|
||||
* @zh 协议定义模块
|
||||
* @en Protocol Definition Module
|
||||
*/
|
||||
|
||||
import type { ApiDef, MsgDef, ProtocolDef } from './types'
|
||||
|
||||
/**
|
||||
* @zh 创建 API 定义
|
||||
* @en Create API definition
|
||||
*
|
||||
* @example
|
||||
* ```typescript
|
||||
* const join = rpc.api<{ name: string }, { id: string }>()
|
||||
* ```
|
||||
*/
|
||||
function api<TInput = void, TOutput = void>(): ApiDef<TInput, TOutput> {
|
||||
return { _type: 'api' } as ApiDef<TInput, TOutput>
|
||||
}
|
||||
|
||||
/**
|
||||
* @zh 创建消息定义
|
||||
* @en Create message definition
|
||||
*
|
||||
* @example
|
||||
* ```typescript
|
||||
* const chat = rpc.msg<{ from: string; text: string }>()
|
||||
* ```
|
||||
*/
|
||||
function msg<TData = void>(): MsgDef<TData> {
|
||||
return { _type: 'msg' } as MsgDef<TData>
|
||||
}
|
||||
|
||||
/**
|
||||
* @zh 定义协议
|
||||
* @en Define protocol
|
||||
*
|
||||
* @example
|
||||
* ```typescript
|
||||
* export const protocol = rpc.define({
|
||||
* api: {
|
||||
* join: rpc.api<{ name: string }, { id: string }>(),
|
||||
* leave: rpc.api<void, void>(),
|
||||
* },
|
||||
* msg: {
|
||||
* chat: rpc.msg<{ from: string; text: string }>(),
|
||||
* },
|
||||
* })
|
||||
* ```
|
||||
*/
|
||||
function define<T extends ProtocolDef>(protocol: T): T {
|
||||
return protocol
|
||||
}
|
||||
|
||||
/**
|
||||
* @zh RPC 协议定义工具
|
||||
* @en RPC protocol definition utilities
|
||||
*/
|
||||
export const rpc = {
|
||||
define,
|
||||
api,
|
||||
msg,
|
||||
} as const
|
||||
Reference in New Issue
Block a user