2025-12-28 12:25:51 +08:00
# @esengine/server
2025-12-30 18:08:38 +08:00
## 4.0.0
### Patch Changes
- Updated dependencies [[`1f3a76a` ](https://github.com/esengine/esengine/commit/1f3a76aabea2d3eb8a5eb8b73e29127da57e2028 )]:
- @esengine/ecs -framework@2 .7.0
2025-12-30 16:19:01 +08:00
## 3.0.0
### Minor Changes
- feat(ecs): 添加 @NetworkEntity 装饰器,支持自动广播实体生成/销毁
### 新功能
* * @NetworkEntity 装饰器**
- 标记组件为网络实体,自动广播 spawn/despawn 消息
- 支持 `autoSpawn` 和 `autoDespawn` 配置选项
- 通过事件系统(`ECSEventType.COMPONENT_ADDED` / `ECSEventType.ENTITY_DESTROYED` )实现
**ECSRoom 增强 **
- 新增 `enableAutoNetworkEntity` 配置选项(默认启用)
- 自动监听组件添加和实体销毁事件
- 简化 GameRoom 实现,无需手动回调
### 改进
**Entity 事件 **
- `Entity.destroy()` 现在发出 `entity:destroyed` 事件
- `Entity.active` 变化时发出 `entity:enabled` / `entity:disabled` 事件
- 使用 `ECSEventType` 常量替代硬编码字符串
### 使用示例
```typescript
import { Component, ECSComponent, sync, NetworkEntity } from '@esengine/ecs -framework';
@ECSComponent ('Enemy')
@NetworkEntity ('Enemy')
class EnemyComponent extends Component {
@sync ('float32') x: number = 0;
@sync ('float32') y: number = 0;
}
// 服务端
const entity = scene.createEntity('Enemy');
entity.addComponent(new EnemyComponent()); // 自动广播 spawn
entity.destroy(); // 自动广播 despawn
```
### Patch Changes
- Updated dependencies []:
- @esengine/ecs -framework@2 .6.0
2025-12-29 21:10:36 +08:00
## 2.0.0
### Minor Changes
- [#390 ](https://github.com/esengine/esengine/pull/390 ) [`1f297ac` ](https://github.com/esengine/esengine/commit/1f297ac769e37700f72fb4425639af7090898256 ) Thanks [@esengine ](https://github.com/esengine )! - feat: ECS 网络状态同步系统
## @esengine/ecs -framework
新增 `@sync` 装饰器和二进制编解码器,支持基于 Component 的网络状态同步:
```typescript
import { Component, ECSComponent, sync } from '@esengine/ecs -framework';
@ECSComponent ('Player')
class PlayerComponent extends Component {
@sync ('string') name: string = '';
@sync ('uint16') score: number = 0;
@sync ('float32') x: number = 0;
@sync ('float32') y: number = 0;
}
```
### 新增导出
- `sync` - 标记需要同步的字段装饰器
- `SyncType` - 支持的同步类型
- `SyncOperation` - 同步操作类型( FULL/DELTA/SPAWN/DESPAWN)
- `encodeSnapshot` / `decodeSnapshot` - 批量编解码
- `encodeSpawn` / `decodeSpawn` - 实体生成编解码
- `encodeDespawn` / `processDespawn` - 实体销毁编解码
- `ChangeTracker` - 字段级变更追踪
- `initChangeTracker` / `clearChanges` / `hasChanges` - 变更追踪工具函数
### 内部方法标记
将以下方法标记为 `@internal` ,用户应通过 `Core.update()` 驱动更新:
- `Scene.update()`
- `SceneManager.update()`
- `WorldManager.updateAll()`
## @esengine/network
新增 `ComponentSyncSystem` ,基于 `@sync` 装饰器自动同步组件状态:
```typescript
import { ComponentSyncSystem } from '@esengine/network ';
// 服务端:编码状态
const data = syncSystem.encodeAllEntities(false);
// 客户端:解码状态
syncSystem.applySnapshot(data);
```
### 修复
- 将 `@esengine/ecs-framework` 从 devDependencies 移到 peerDependencies
## @esengine/server
新增 `ECSRoom` ,带有 ECS World 支持的房间基类:
```typescript
import { ECSRoom } from '@esengine/server/ecs ';
// 服务端启动
Core.create();
setInterval(() => Core.update(1 / 60), 16);
// 定义房间
class GameRoom extends ECSRoom {
onCreate() {
this.addSystem(new PhysicsSystem());
}
onJoin(player: Player) {
const entity = this.createPlayerEntity(player.id);
entity.addComponent(new PlayerComponent());
}
}
```
### 设计
- 每个 `ECSRoom` 在 `Core.worldManager` 中创建独立的 World
- `Core.update()` 统一更新 Time 和所有 World
- `onTick()` 只处理状态同步逻辑
### Patch Changes
- Updated dependencies [[`1f297ac` ](https://github.com/esengine/esengine/commit/1f297ac769e37700f72fb4425639af7090898256 )]:
- @esengine/ecs -framework@2 .5.0
2025-12-29 17:14:53 +08:00
## 1.3.0
### Minor Changes
- [#388 ](https://github.com/esengine/esengine/pull/388 ) [`afdeb00` ](https://github.com/esengine/esengine/commit/afdeb00b4df9427e7f03b91558bf95804a837b70 ) Thanks [@esengine ](https://github.com/esengine )! - feat(server): 添加可插拔速率限制系统 | add pluggable rate limiting system
- 新增令牌桶策略 (`TokenBucketStrategy` ) - 推荐用于一般场景
- 新增滑动窗口策略 (`SlidingWindowStrategy` ) - 精确跟踪
- 新增固定窗口策略 (`FixedWindowStrategy` ) - 简单高效
- 新增房间速率限制 mixin (`withRateLimit` )
- 新增速率限制装饰器 (`@rateLimit` , `@noRateLimit` )
- 新增按消息类型限流装饰器 (`@rateLimitMessage` , `@noRateLimitMessage` )
- 支持与认证系统组合使用
- 导出路径: `@esengine/server/ratelimit`
2025-12-29 16:12:03 +08:00
## 1.2.0
### Minor Changes
- [#386 ](https://github.com/esengine/esengine/pull/386 ) [`61a13ba` ](https://github.com/esengine/esengine/commit/61a13baca2e1e8fba14e23d439521ec0e6b7ca6e ) Thanks [@esengine ](https://github.com/esengine )! - feat(server): 添加可插拔认证系统 | add pluggable authentication system
- 新增 JWT 认证提供者 (`createJwtAuthProvider` )
- 新增 Session 认证提供者 (`createSessionAuthProvider` )
- 新增服务器认证 mixin (`withAuth` )
- 新增房间认证 mixin (`withRoomAuth` )
- 新增认证装饰器 (`@requireAuth` , `@requireRole` )
- 新增测试工具 (`MockAuthProvider` )
- 导出路径: `@esengine/server/auth` , `@esengine/server/auth/testing`
2025-12-28 14:11:27 +08:00
## 1.1.4
### Patch Changes
- Updated dependencies [[`a000cc0` ](https://github.com/esengine/esengine/commit/a000cc07d7cebe8ccbfa983fde610296bfba2f1b )]:
- @esengine/rpc @1 .1.1
2025-12-28 13:49:34 +08:00
## 1.1.3
### Patch Changes
- [#372 ](https://github.com/esengine/esengine/pull/372 ) [`9c41181` ](https://github.com/esengine/esengine/commit/9c4118187539e39ead48ef2fa7af3ff45285fde5 ) Thanks [@esengine ](https://github.com/esengine )! - fix: expose `id` property on ServerConnection type
TypeScript was not properly resolving the inherited `id` property from the base `Connection` interface in some module resolution scenarios. This fix explicitly declares the `id` property on `ServerConnection` to ensure it's always visible to consumers.
2025-12-28 13:32:44 +08:00
## 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();
```
2025-12-28 12:51:20 +08:00
## 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
2025-12-28 12:25:51 +08:00
## 1.1.0
### Minor Changes
- [#366 ](https://github.com/esengine/esengine/pull/366 ) [`b6f1235` ](https://github.com/esengine/esengine/commit/b6f1235239c049abc62b6827554eb941e73dae65 ) Thanks [@esengine ](https://github.com/esengine )! - feat(server): 添加游戏服务器框架与房间系统 | add game server framework with Room system
* * @esengine/server ** - 游戏服务器框架 | Game server framework
- 文件路由系统 | File-based routing
- Room 生命周期管理 (onCreate, onJoin, onLeave, onTick, onDispose) | Room lifecycle management
- `@onMessage` 装饰器处理消息 | Message handler decorator
- 玩家管理与断线处理 | Player management with auto-disconnect
- 内置 JoinRoom/LeaveRoom API | Built-in room APIs
- defineApi/defineMsg 类型安全辅助函数 | Type-safe helper functions
**create-esengine-server ** - CLI 脚手架工具 | CLI scaffolding tool
- 生成 shared/server/client 项目结构 | Creates project structure
- 类型安全的协议定义 | Type-safe protocol definitions
- 包含 GameRoom 示例实现 | Includes example implementation