diff options
author | Zoffix Znet <cpan@zoffix.com> | 2016-07-28 15:52:34 -0400 |
---|---|---|
committer | Zoffix Znet <cpan@zoffix.com> | 2016-07-28 15:52:34 -0400 |
commit | e3d18b7f1a7c415a41d793c7a3f5a02ab4b19d40 (patch) | |
tree | 25b54e696f3d93826c9b2ccbadbde44afef165c7 /test.p6 | |
parent | e12af8b6369352c7776447ab39f8fd7e61d16614 (diff) |
Socket watcher temp
Diffstat (limited to 'test.p6')
-rw-r--r-- | test.p6 | 42 |
1 files changed, 42 insertions, 0 deletions
@@ -0,0 +1,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; + } +} |