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 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 function listen<D>(endpoint: string, deserializer: PROTO.Deserializer<D>, callback: (value: NoInfer<D>, meta: Meta) => Generator<void, void, void>): () => void;
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 (let i = 0; i < listeners.length; i++) {
484
+ for (const listener of [...listeners]) {
485
485
  try {
486
- yield* listeners[i](header, event.message);
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, serialized_packet) {
539
- let fragment = buffer.get(header.meta.guid);
540
- if (!fragment) {
541
- fragment = { size: -1, serialized_packets: [], data_size: 0 };
542
- buffer.set(header.meta.guid, fragment);
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
- fragment.size = header.index + 1;
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
- fragment.serialized_packets[header.index] = serialized_packet;
548
- fragment.data_size += header.index + 1;
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
@@ -3,7 +3,7 @@
3
3
  "author": "OmniacDev",
4
4
  "description": "IPC system for MCBE Script API projects",
5
5
  "license": "MIT",
6
- "version": "3.3.0",
6
+ "version": "3.3.1",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "git+https://github.com/OmniacDev/MCBE-IPC.git"