const pubsubEff = PubSub.bounded<number>(2);
let runningNumber = 1;
const publishProgram = pubsubEff.pipe(
Effect.flatMap(PubSub.publish(runningNumber)),
Effect.flatMap(() => Effect.sync(() => (runningNumber += 1))),
Effect.tap(Console.log('running number', runningNumber)),
);
const publishSchedual = Schedule.addDelay(Schedule.forever, () =>
Duration.seconds(1),
);
const repeatPublishProgram = Effect.repeat(publishProgram, publishSchedual);
Effect.runPromise(repeatPublishProgram);
const dequeueProgram = pubsubEff.pipe(
Effect.flatMap((pubsub) =>
Effect.scoped(PubSub.subscribe(pubsub)).pipe(
Effect.map((dq) => dq),
Effect.tap((dq) => {
// setInterval(() => {
const d = Queue.poll(dq);
console.log('d', d);
const data = Effect.runSync(d);
console.log('data', data);
// }, 1000);
return Effect.succeed(true);
}),
),
),
);
Effect.runPromise(dequeueProgram);
const pubsubEff = PubSub.bounded<number>(2);
let runningNumber = 1;
const publishProgram = pubsubEff.pipe(
Effect.flatMap(PubSub.publish(runningNumber)),
Effect.flatMap(() => Effect.sync(() => (runningNumber += 1))),
Effect.tap(Console.log('running number', runningNumber)),
);
const publishSchedual = Schedule.addDelay(Schedule.forever, () =>
Duration.seconds(1),
);
const repeatPublishProgram = Effect.repeat(publishProgram, publishSchedual);
Effect.runPromise(repeatPublishProgram);
const dequeueProgram = pubsubEff.pipe(
Effect.flatMap((pubsub) =>
Effect.scoped(PubSub.subscribe(pubsub)).pipe(
Effect.map((dq) => dq),
Effect.tap((dq) => {
// setInterval(() => {
const d = Queue.poll(dq);
console.log('d', d);
const data = Effect.runSync(d);
console.log('data', data);
// }, 1000);
return Effect.succeed(true);
}),
),
),
);
Effect.runPromise(dequeueProgram);