修复buffer再浏览器环境不兼容的问题

This commit is contained in:
YHH
2025-10-12 18:49:20 +08:00
parent 701f538e57
commit e3ead8a695
7 changed files with 40 additions and 69 deletions

View File

@@ -742,10 +742,10 @@ export class Scene implements IScene {
/**
* 序列化场景
*
* 将场景及其所有实体、组件序列化为JSON字符串或二进制Buffer
* 将场景及其所有实体、组件序列化为JSON字符串或二进制Uint8Array
*
* @param options 序列化选项
* @returns 序列化后的数据JSON字符串或二进制Buffer
* @returns 序列化后的数据JSON字符串或二进制Uint8Array
*
* @example
* ```typescript
@@ -761,7 +761,7 @@ export class Scene implements IScene {
* });
* ```
*/
public serialize(options?: SceneSerializationOptions): string | Buffer {
public serialize(options?: SceneSerializationOptions): string | Uint8Array {
return SceneSerializer.serialize(this, options);
}
@@ -770,7 +770,7 @@ export class Scene implements IScene {
*
* 从序列化数据恢复场景状态
*
* @param saveData 序列化的数据JSON字符串或二进制Buffer
* @param saveData 序列化的数据JSON字符串或二进制Uint8Array
* @param options 反序列化选项
*
* @example
@@ -786,7 +786,7 @@ export class Scene implements IScene {
* });
* ```
*/
public deserialize(saveData: string | Buffer, options?: SceneDeserializationOptions): void {
public deserialize(saveData: string | Uint8Array, options?: SceneDeserializationOptions): void {
SceneSerializer.deserialize(this, saveData, options);
}
@@ -858,7 +858,7 @@ export class Scene implements IScene {
/**
* 应用增量变更到场景
*
* @param incremental 增量快照数据IncrementalSnapshot对象、JSON字符串或二进制Buffer
* @param incremental 增量快照数据IncrementalSnapshot对象、JSON字符串或二进制Uint8Array
* @param componentRegistry 组件类型注册表(可选,默认使用全局注册表)
*
* @example
@@ -870,21 +870,20 @@ export class Scene implements IScene {
* const jsonData = IncrementalSerializer.serializeIncremental(snapshot, { format: 'json' });
* scene.applyIncremental(jsonData);
*
* // 从二进制Buffer应用
* // 从二进制Uint8Array应用
* const binaryData = IncrementalSerializer.serializeIncremental(snapshot, { format: 'binary' });
* scene.applyIncremental(binaryData);
* ```
*/
public applyIncremental(
incremental: IncrementalSnapshot | string | Buffer,
incremental: IncrementalSnapshot | string | Uint8Array,
componentRegistry?: Map<string, any>
): void {
const isSerializedData = typeof incremental === 'string' ||
(typeof Buffer !== 'undefined' && Buffer.isBuffer(incremental)) ||
incremental instanceof Uint8Array;
const snapshot = isSerializedData
? IncrementalSerializer.deserializeIncremental(incremental as string | Buffer)
? IncrementalSerializer.deserializeIncremental(incremental as string | Uint8Array)
: incremental as IncrementalSnapshot;
const registry = componentRegistry || ComponentRegistry.getAllComponentNames() as Map<string, any>;

View File

@@ -11,7 +11,7 @@ import { Component } from '../Component';
import { ComponentSerializer, SerializedComponent } from './ComponentSerializer';
import { SerializedEntity } from './EntitySerializer';
import { ComponentType } from '../Core/ComponentStorage';
import * as msgpack from 'msgpack-lite';
import { encode, decode } from '@msgpack/msgpack';
/**
* 变更操作类型
@@ -609,7 +609,7 @@ export class IncrementalSerializer {
*
* @param incremental 增量快照
* @param options 序列化选项
* @returns 序列化后的数据JSON字符串或二进制Buffer
* @returns 序列化后的数据JSON字符串或二进制Uint8Array
*
* @example
* ```typescript
@@ -631,7 +631,7 @@ export class IncrementalSerializer {
public static serializeIncremental(
incremental: IncrementalSnapshot,
options?: { format?: IncrementalSerializationFormat; pretty?: boolean }
): string | Buffer {
): string | Uint8Array {
const opts = {
format: 'json' as IncrementalSerializationFormat,
pretty: false,
@@ -639,7 +639,7 @@ export class IncrementalSerializer {
};
if (opts.format === 'binary') {
return msgpack.encode(incremental);
return encode(incremental);
} else {
return opts.pretty
? JSON.stringify(incremental, null, 2)
@@ -650,7 +650,7 @@ export class IncrementalSerializer {
/**
* 反序列化增量快照
*
* @param data 序列化的数据JSON字符串或二进制Buffer
* @param data 序列化的数据JSON字符串或二进制Uint8Array
* @returns 增量快照
*
* @example
@@ -662,13 +662,13 @@ export class IncrementalSerializer {
* const snapshot = IncrementalSerializer.deserializeIncremental(buffer);
* ```
*/
public static deserializeIncremental(data: string | Buffer): IncrementalSnapshot {
public static deserializeIncremental(data: string | Uint8Array): IncrementalSnapshot {
if (typeof data === 'string') {
// JSON格式
return JSON.parse(data);
} else {
// 二进制格式MessagePack
return msgpack.decode(data);
return decode(data) as IncrementalSnapshot;
}
}

View File

@@ -11,7 +11,7 @@ import { ComponentType, ComponentRegistry } from '../Core/ComponentStorage';
import { EntitySerializer, SerializedEntity } from './EntitySerializer';
import { getComponentTypeName } from '../Decorators';
import { getSerializationMetadata } from './SerializationDecorators';
import * as msgpack from 'msgpack-lite';
import { encode, decode } from '@msgpack/msgpack';
/**
* 场景序列化格式
@@ -154,9 +154,9 @@ export class SceneSerializer {
*
* @param scene 要序列化的场景
* @param options 序列化选项
* @returns 序列化后的数据JSON字符串或二进制Buffer
* @returns 序列化后的数据JSON字符串或二进制Uint8Array
*/
public static serialize(scene: IScene, options?: SceneSerializationOptions): string | Buffer {
public static serialize(scene: IScene, options?: SceneSerializationOptions): string | Uint8Array {
const opts: SceneSerializationOptions = {
systems: false,
format: 'json',
@@ -207,7 +207,7 @@ export class SceneSerializer {
: JSON.stringify(serializedScene);
} else {
// 二进制格式(使用 MessagePack
return msgpack.encode(serializedScene);
return encode(serializedScene);
}
}
@@ -215,12 +215,12 @@ export class SceneSerializer {
* 反序列化场景
*
* @param scene 目标场景
* @param saveData 序列化的数据JSON字符串或二进制Buffer
* @param saveData 序列化的数据JSON字符串或二进制Uint8Array
* @param options 反序列化选项
*/
public static deserialize(
scene: IScene,
saveData: string | Buffer,
saveData: string | Uint8Array,
options?: SceneDeserializationOptions
): void {
const opts: SceneDeserializationOptions = {
@@ -237,7 +237,7 @@ export class SceneSerializer {
serializedScene = JSON.parse(saveData);
} else {
// 二进制格式MessagePack
serializedScene = msgpack.decode(saveData);
serializedScene = decode(saveData) as SerializedScene;
}
} catch (error) {
throw new Error(`Failed to parse save data: ${error}`);