aboutsummaryrefslogtreecommitdiff
path: root/test.p6
blob: 5a6e9699476896f46c4ba901c50f8426422b3146 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

my @s = %( :host<localhost>,   :6667port, :promise(''), :sock(''), :!q, :0e ),
        %( :host<localhost>,   :4444port, :promise(''), :sock(''), :!q, :0e );

my Channel $c .= new;

sub connect-it ($s) {
    say "Connecting $s<host>:$s<port>";
    $s<sock> = '';
    $s<promise> = IO::Socket::Async.connect(|$s<host port>).then: sub ($_) {
        if .status ~~ Broken {
            dd "ZOMFG! Can't connect!";
            $s<q> = True if $s<e>++ > 4;
            sleep 1;
            $c.send: ['broken', $s];
            return;
        }

        $s<sock> = .result;
        react {
            say "Loooop";
            whenever $s<sock>.Supply {
                say "Got stuff! $_";
            }
        }
        $s<q> = True if $s<e>++ > 3;
        $c.send: ['closed', $s];
        CATCH { default { warn $_; warn .backtrace; } }
    }
}

connect-it $_ for @s;
loop {
    say "Starting listen";
    my $v = $c.receive;
    dd $v;
    connect-it $v[1] unless $v[1]<q>;
    unless @s.grep({!.<q>}) {
        say 'Bailing out';
        last;
    }
}