Compare commits
4 Commits
@esengine/
...
@esengine/
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9f3f9a547a | ||
|
|
18df9d1cda | ||
|
|
9a4b3388e0 | ||
|
|
66d5dc27f7 |
2
.github/workflows/release-changesets.yml
vendored
2
.github/workflows/release-changesets.yml
vendored
@@ -56,7 +56,9 @@ jobs:
|
|||||||
pnpm --filter "@esengine/network-protocols" build
|
pnpm --filter "@esengine/network-protocols" build
|
||||||
pnpm --filter "@esengine/rpc" build
|
pnpm --filter "@esengine/rpc" build
|
||||||
pnpm --filter "@esengine/network" build
|
pnpm --filter "@esengine/network" build
|
||||||
|
pnpm --filter "@esengine/server" build
|
||||||
pnpm --filter "@esengine/cli" build
|
pnpm --filter "@esengine/cli" build
|
||||||
|
pnpm --filter "create-esengine-server" build
|
||||||
|
|
||||||
- name: Create Release Pull Request or Publish
|
- name: Create Release Pull Request or Publish
|
||||||
id: changesets
|
id: changesets
|
||||||
|
|||||||
@@ -1,5 +1,25 @@
|
|||||||
# @esengine/server
|
# @esengine/server
|
||||||
|
|
||||||
|
## 1.1.2
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- [#370](https://github.com/esengine/esengine/pull/370) [`18df9d1`](https://github.com/esengine/esengine/commit/18df9d1cda4d4cf3095841d93125f9d41ce214f1) Thanks [@esengine](https://github.com/esengine)! - fix: allow define() to be called before start()
|
||||||
|
|
||||||
|
Previously, calling `server.define()` before `server.start()` would throw an error because `roomManager` was initialized inside `start()`. This fix moves the `roomManager` initialization to `createServer()`, allowing the expected usage pattern:
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
const server = await createServer({ port: 3000 });
|
||||||
|
server.define('world', WorldRoom); // Now works correctly
|
||||||
|
await server.start();
|
||||||
|
```
|
||||||
|
|
||||||
|
## 1.1.1
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- [#368](https://github.com/esengine/esengine/pull/368) [`66d5dc2`](https://github.com/esengine/esengine/commit/66d5dc27f740cc81b0645bde61dabf665743a5a0) Thanks [@esengine](https://github.com/esengine)! - fix: 修复发布缺少 dist 目录 | fix missing dist in published packages
|
||||||
|
|
||||||
## 1.1.0
|
## 1.1.0
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@esengine/server",
|
"name": "@esengine/server",
|
||||||
"version": "1.1.0",
|
"version": "1.1.2",
|
||||||
"description": "Game server framework for ESEngine with file-based routing",
|
"description": "Game server framework for ESEngine with file-based routing",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"main": "./dist/index.js",
|
"main": "./dist/index.js",
|
||||||
|
|||||||
@@ -91,8 +91,10 @@ export async function createServer(config: ServerConfig = {}): Promise<GameServe
|
|||||||
let tickInterval: ReturnType<typeof setInterval> | null = null
|
let tickInterval: ReturnType<typeof setInterval> | null = null
|
||||||
let rpcServer: RpcServer<typeof protocol, Record<string, unknown>> | null = null
|
let rpcServer: RpcServer<typeof protocol, Record<string, unknown>> | null = null
|
||||||
|
|
||||||
// 房间管理器
|
// 房间管理器(立即初始化,以便 define() 可在 start() 前调用)
|
||||||
let roomManager: RoomManager | null = null
|
const roomManager = new RoomManager((conn, type, data) => {
|
||||||
|
rpcServer?.send(conn, 'RoomMessage' as any, { type, data } as any)
|
||||||
|
})
|
||||||
|
|
||||||
// 构建 API 处理器映射
|
// 构建 API 处理器映射
|
||||||
const apiMap: Record<string, LoadedApiHandler> = {}
|
const apiMap: Record<string, LoadedApiHandler> = {}
|
||||||
@@ -108,7 +110,7 @@ export async function createServer(config: ServerConfig = {}): Promise<GameServe
|
|||||||
|
|
||||||
// 游戏服务器实例
|
// 游戏服务器实例
|
||||||
const gameServer: GameServer & {
|
const gameServer: GameServer & {
|
||||||
rooms: RoomManager | null
|
rooms: RoomManager
|
||||||
} = {
|
} = {
|
||||||
get connections() {
|
get connections() {
|
||||||
return (rpcServer?.connections ?? []) as ReadonlyArray<ServerConnection>
|
return (rpcServer?.connections ?? []) as ReadonlyArray<ServerConnection>
|
||||||
@@ -127,18 +129,10 @@ export async function createServer(config: ServerConfig = {}): Promise<GameServe
|
|||||||
* @en Define room type
|
* @en Define room type
|
||||||
*/
|
*/
|
||||||
define(name: string, roomClass: new () => unknown): void {
|
define(name: string, roomClass: new () => unknown): void {
|
||||||
if (!roomManager) {
|
|
||||||
throw new Error('Server not started. Call define() after createServer().')
|
|
||||||
}
|
|
||||||
roomManager.define(name, roomClass as RoomClass)
|
roomManager.define(name, roomClass as RoomClass)
|
||||||
},
|
},
|
||||||
|
|
||||||
async start() {
|
async start() {
|
||||||
// 初始化房间管理器
|
|
||||||
roomManager = new RoomManager((conn, type, data) => {
|
|
||||||
rpcServer?.send(conn, 'RoomMessage' as any, { type, data } as any)
|
|
||||||
})
|
|
||||||
|
|
||||||
// 构建 API handlers
|
// 构建 API handlers
|
||||||
const apiHandlersObj: Record<string, (input: unknown, conn: any) => Promise<unknown>> = {}
|
const apiHandlersObj: Record<string, (input: unknown, conn: any) => Promise<unknown>> = {}
|
||||||
|
|
||||||
@@ -151,7 +145,7 @@ export async function createServer(config: ServerConfig = {}): Promise<GameServe
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (roomId) {
|
if (roomId) {
|
||||||
const result = await roomManager!.joinById(roomId, conn.id, conn)
|
const result = await roomManager.joinById(roomId, conn.id, conn)
|
||||||
if (!result) {
|
if (!result) {
|
||||||
throw new Error('Failed to join room')
|
throw new Error('Failed to join room')
|
||||||
}
|
}
|
||||||
@@ -159,7 +153,7 @@ export async function createServer(config: ServerConfig = {}): Promise<GameServe
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (roomType) {
|
if (roomType) {
|
||||||
const result = await roomManager!.joinOrCreate(roomType, conn.id, conn, options)
|
const result = await roomManager.joinOrCreate(roomType, conn.id, conn, options)
|
||||||
if (!result) {
|
if (!result) {
|
||||||
throw new Error('Failed to join or create room')
|
throw new Error('Failed to join or create room')
|
||||||
}
|
}
|
||||||
@@ -171,7 +165,7 @@ export async function createServer(config: ServerConfig = {}): Promise<GameServe
|
|||||||
|
|
||||||
// 内置 LeaveRoom API
|
// 内置 LeaveRoom API
|
||||||
apiHandlersObj['LeaveRoom'] = async (_input, conn) => {
|
apiHandlersObj['LeaveRoom'] = async (_input, conn) => {
|
||||||
await roomManager!.leave(conn.id)
|
await roomManager.leave(conn.id)
|
||||||
return { success: true }
|
return { success: true }
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,7 +186,7 @@ export async function createServer(config: ServerConfig = {}): Promise<GameServe
|
|||||||
// 内置 RoomMessage 处理
|
// 内置 RoomMessage 处理
|
||||||
msgHandlersObj['RoomMessage'] = async (data: any, conn) => {
|
msgHandlersObj['RoomMessage'] = async (data: any, conn) => {
|
||||||
const { type, payload } = data as { type: string; payload: unknown }
|
const { type, payload } = data as { type: string; payload: unknown }
|
||||||
roomManager!.handleMessage(conn.id, type, payload)
|
roomManager.handleMessage(conn.id, type, payload)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 文件路由消息
|
// 文件路由消息
|
||||||
|
|||||||
@@ -1,5 +1,11 @@
|
|||||||
# create-esengine-server
|
# create-esengine-server
|
||||||
|
|
||||||
|
## 1.1.1
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- [#368](https://github.com/esengine/esengine/pull/368) [`66d5dc2`](https://github.com/esengine/esengine/commit/66d5dc27f740cc81b0645bde61dabf665743a5a0) Thanks [@esengine](https://github.com/esengine)! - fix: 修复发布缺少 dist 目录 | fix missing dist in published packages
|
||||||
|
|
||||||
## 1.1.0
|
## 1.1.0
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "create-esengine-server",
|
"name": "create-esengine-server",
|
||||||
"version": "1.1.0",
|
"version": "1.1.1",
|
||||||
"description": "Create ESEngine game server projects",
|
"description": "Create ESEngine game server projects",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"bin": {
|
"bin": {
|
||||||
|
|||||||
Reference in New Issue
Block a user