mcbe-ipc 3.3.0 → 3.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ipc.d.ts +4 -1
- package/dist/ipc.js +22 -13
- package/package.json +1 -1
package/dist/ipc.d.ts
CHANGED
|
@@ -96,7 +96,10 @@ export declare namespace NET {
|
|
|
96
96
|
metaOverride?: Partial<Meta>;
|
|
97
97
|
}
|
|
98
98
|
export function emit<S>(endpoint: string, serializer: PROTO.Serializer<S>, value: NoInfer<S>, options?: EmitOptions): Generator<void, void, void>;
|
|
99
|
-
export
|
|
99
|
+
export interface ListenOptions {
|
|
100
|
+
filter?: (meta: Meta) => boolean;
|
|
101
|
+
}
|
|
102
|
+
export function listen<D>(endpoint: string, deserializer: PROTO.Deserializer<D>, callback: (value: NoInfer<D>, meta: Meta) => Generator<void, void, void>, options?: ListenOptions): () => void;
|
|
100
103
|
export {};
|
|
101
104
|
}
|
|
102
105
|
export declare namespace IPC {
|
package/dist/ipc.js
CHANGED
|
@@ -481,9 +481,9 @@ export var NET;
|
|
|
481
481
|
const header_stream = yield* PROTO.MIPS.deserialize(serialized_header);
|
|
482
482
|
const header = yield* Header.deserialize(header_stream);
|
|
483
483
|
const errors = [];
|
|
484
|
-
for (
|
|
484
|
+
for (const listener of [...listeners]) {
|
|
485
485
|
try {
|
|
486
|
-
yield*
|
|
486
|
+
yield* listener(header, event.message);
|
|
487
487
|
}
|
|
488
488
|
catch (e) {
|
|
489
489
|
errors.push(e);
|
|
@@ -533,21 +533,28 @@ export var NET;
|
|
|
533
533
|
}
|
|
534
534
|
}
|
|
535
535
|
NET.emit = emit;
|
|
536
|
-
function listen(endpoint, deserializer, callback) {
|
|
536
|
+
function listen(endpoint, deserializer, callback, options) {
|
|
537
537
|
const buffer = new Map();
|
|
538
|
-
const listener = function* (header,
|
|
539
|
-
let
|
|
540
|
-
if (
|
|
541
|
-
|
|
542
|
-
|
|
538
|
+
const listener = function* (header, fragment) {
|
|
539
|
+
let packet = buffer.get(header.meta.guid);
|
|
540
|
+
if (packet === undefined) {
|
|
541
|
+
if (options?.filter?.(header.meta) === false)
|
|
542
|
+
return;
|
|
543
|
+
packet = { size: -1, fragments: [], received: 0 };
|
|
544
|
+
buffer.set(header.meta.guid, packet);
|
|
543
545
|
}
|
|
544
546
|
if (header.final) {
|
|
545
|
-
|
|
547
|
+
packet.size = header.index + 1;
|
|
548
|
+
}
|
|
549
|
+
if (packet.fragments[header.index] === undefined) {
|
|
550
|
+
packet.fragments[header.index] = fragment;
|
|
551
|
+
packet.received++;
|
|
552
|
+
}
|
|
553
|
+
else {
|
|
554
|
+
throw new Error(`received duplicate fragment ${header.index} for packet ${header.meta.guid}`);
|
|
546
555
|
}
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
if (fragment.size !== -1 && fragment.data_size === (fragment.size * (fragment.size + 1)) / 2) {
|
|
550
|
-
const stream = yield* deserialize(fragment.serialized_packets);
|
|
556
|
+
if (packet.size !== -1 && packet.size === packet.received) {
|
|
557
|
+
const stream = yield* deserialize(packet.fragments);
|
|
551
558
|
const value = yield* deserializer.deserialize(stream);
|
|
552
559
|
yield* callback(value, header.meta);
|
|
553
560
|
buffer.delete(header.meta.guid);
|
|
@@ -573,6 +580,8 @@ export var IPC;
|
|
|
573
580
|
return;
|
|
574
581
|
resolve(value);
|
|
575
582
|
terminate();
|
|
583
|
+
}, {
|
|
584
|
+
filter: meta => !meta.signature.includes(`+correlation`) || meta.guid === id
|
|
576
585
|
});
|
|
577
586
|
system.runJob(NET.emit(`ipc:${channel}:invoke`, serializer, value, {
|
|
578
587
|
metaOverride: {
|
package/package.json
CHANGED