Helios

Viewer subscription

Callback listeners and bounded async packet streams.

Source: examples/viewer-subscription.ts

Receives universes 1 and 2. Callbacks are for low-latency work; streams are bounded and coalesce queued packets per universe. Opens a real UDP receiver — set iface in production.

import { ViewerService } from "@helioslx/core";
import { NodeSacnReceiver } from "@helioslx/core/node";

const viewer = new ViewerService({
  receiver: new NodeSacnReceiver(),
  ownsReceiver: true,
  streamCapacity: 16,
});

await viewer.start();
await viewer.setSelectedUniverses([1, 2]);

const unsubscribe = viewer.subscribe((packet) => {
  console.info(
    `Universe ${packet.universe} channel 1=${packet.values[0]} ` +
      `from ${packet.source.sourceName ?? packet.source.cid}`,
  );
});

const stream = viewer.packets(8);
const consume = (async (): Promise<void> => {
  for await (const packet of stream) {
    console.info(`Stream received universe ${packet.universe}`);
  }
})();

const close = async (): Promise<void> => {
  unsubscribe();
  stream.close();
  await consume;
  await viewer.close();
};

process.once("SIGINT", () => void close());
process.once("SIGTERM", () => void close());

console.info("Watching universes 1 and 2. Press Ctrl-C to stop.");

Related: Viewing packets.