Skip to content

Instantly share code, notes, and snippets.

@moritz
Created July 21, 2016 21:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save moritz/e632e4df754efe12fa7ef69d10e12e62 to your computer and use it in GitHub Desktop.
Save moritz/e632e4df754efe12fa7ef69d10e12e62 to your computer and use it in GitHub Desktop.
#!/usr/bin/env perl6
sub source (Str $msg --> Supply) {
my $supplier = Supplier.new;
my $supply = $supplier.Supply;
start {
for ^Inf -> $i {
my $rand = (^2e3).pick / 1000;
sleep $rand; # 0–2 seconds
$supplier.emit( "$msg $i = $rand ms" );
}
}
return $supply;
}
my $timeout = 1;
my $source = source('Message');
my $heartbeat-supplier = Supplier.new;
my $heartbeat = $heartbeat-supplier.Supply.delayed($timeout);
class Heartbeat { }
$heartbeat-supplier.emit(Heartbeat);
react {
whenever $source.zip-latest($heartbeat) -> $item {
given $item {
when Heartbeat {
say 'Timeout';
}
default {
say $item;
}
}
$heartbeat-supplier.emit(Heartbeat)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment