Skip to content

Instantly share code, notes, and snippets.

@dex4er
Last active September 26, 2018 20:05
Show Gist options
  • Save dex4er/bb892085a04681bf7d94 to your computer and use it in GitHub Desktop.
Save dex4er/bb892085a04681bf7d94 to your computer and use it in GitHub Desktop.
Mojo TCP server which emits signal for each line
use v5.14;
use Mojo::IOLoop;
use Data::Dump;
my %opts = (address => '0.0.0.0', port => 1514, map { split /=/, $_, 2 } @ARGV);
Mojo::IOLoop->server(%opts, sub {
my ($loop, $stream, $id) = @_;
my $leftovers = '';
$stream->on(read => sub {
my ($stream, $buf) = @_;
if ($leftovers ne '') {
$buf = $leftovers . $buf;
$leftovers = '';
}
while ($buf =~ s/(.*?)(\x0d?\x0a)//) {
$stream->emit(line => "$1$2");
}
$leftovers = $buf;
});
$stream->on(close => sub {
my ($stream, $buf) = @_;
if ($leftovers ne '') {
$stream->emit(line => $leftovers);
}
});
$stream->on(line => sub {
my ($stream, $line) = @_;
ddx $line;
});
});
# Start event loop
Mojo::IOLoop->start;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment