Files
scrypted/server/src/rpc-buffer-serializer.ts
2024-08-19 13:20:21 -07:00

32 lines
1.2 KiB
TypeScript

import { RpcSerializer } from "./rpc";
export class BufferSerializer implements RpcSerializer {
serialize(value: Buffer) {
console.warn('Using slow buffer serialization. Ensure the peer supports SidebandBufferSerializer.');
return value.toString('base64');
}
deserialize(serialized: any) {
console.warn('Using slow buffer deserialization. Ensure the peer supports SidebandBufferSerializer.');
return Buffer.from(serialized, 'base64');
}
}
export class SidebandBufferSerializer implements RpcSerializer {
bufferSerializer = new BufferSerializer();
serialize(value: any, serializationContext?: any) {
if (!serializationContext)
return this.bufferSerializer.serialize(value);
const buffers: Buffer[] = serializationContext.buffers = serializationContext.buffers || [];
buffers.push(value);
return buffers.length - 1;
}
deserialize(serialized: any, serializationContext?: any) {
if (!serializationContext?.buffers)
return this.bufferSerializer.deserialize(serialized);
const buffers: Buffer[] = serializationContext.buffers;
return buffers[serialized];
}
}