45 lines
1.5 KiB
TypeScript
45 lines
1.5 KiB
TypeScript
import * as plugins from './plugins.js';
|
|
|
|
export class VirtualStream {
|
|
public streamId: string = plugins.isounique.uni();
|
|
|
|
constructor() {}
|
|
|
|
public static encodePayloadForNetwork(objectPayload: any): any {
|
|
if (objectPayload instanceof VirtualStream) {
|
|
return {
|
|
_isVirtualStream: true,
|
|
streamId: objectPayload.streamId,
|
|
};
|
|
} else if (Array.isArray(objectPayload)) {
|
|
return objectPayload.map(VirtualStream.encodePayloadForNetwork);
|
|
} else if (objectPayload !== null && typeof objectPayload === 'object') {
|
|
return Object.keys(objectPayload).reduce((acc, key) => {
|
|
acc[key] = VirtualStream.encodePayloadForNetwork(objectPayload[key]);
|
|
return acc;
|
|
}, {});
|
|
} else {
|
|
return objectPayload;
|
|
}
|
|
}
|
|
|
|
public static decodePayloadFromNetwork(objectPayload: any): any {
|
|
if (objectPayload !== null && typeof objectPayload === 'object') {
|
|
if (objectPayload._isVirtualStream) {
|
|
const virtualStream = new VirtualStream();
|
|
virtualStream.streamId = objectPayload.streamId;
|
|
return virtualStream;
|
|
} else if (Array.isArray(objectPayload)) {
|
|
return objectPayload.map(VirtualStream.decodePayloadFromNetwork);
|
|
} else {
|
|
return Object.keys(objectPayload).reduce((acc, key) => {
|
|
acc[key] = VirtualStream.decodePayloadFromNetwork(objectPayload[key]);
|
|
return acc;
|
|
}, {});
|
|
}
|
|
} else {
|
|
return objectPayload;
|
|
}
|
|
}
|
|
}
|