#!/usr/bin/env raku

use EventSource::Server;

use Cro::HTTP::Router;
use Cro::HTTP::Server;

use Net::AMQP;

my $supply = supply {
    my $n = Net::AMQP.new;
    my $connection = $n.connect.result;
    whenever $n.open-channel(1) -> $channel {
        whenever $channel.declare-queue("hello") -> $queue {
            $queue.consume;
            whenever $queue.message-supply.map( -> $v { $v.body.decode }) -> $data {
                emit EventSource::Server::Event.new(type => 'hello', :$data);
            }
        }
    }
};

my $es = EventSource::Server.new(:$supply);

my $app = route {
    get -> {
        content 'text/event-stream', $es.out-supply;
    }
};

my Cro::Service $tick = Cro::HTTP::Server.new(:host<localhost>, :port<7798>, application => $app);

$tick.start;

react whenever signal(SIGINT) { $tick.stop; exit; }

# vim: ft=raku
