#!/usr/bin/env perl
use strict;
use warnings;
use IO::Socket;
use IO::Multiplex;
use Protocol::WebSocket::Handshake::Server;
use Protocol::WebSocket::Frame;
my $mux = new IO::Multiplex;
my $sock = new IO::Socket::INET(
Proto => 'tcp',
LocalPort => 3000,
Listen => 1
) or die "socket: $@";
$mux->listen($sock);
$mux->set_callback_object(__PACKAGE__);
$mux->loop;
my $hs;
my $frame;
sub mux_input {
my $package = shift;
my $mux = shift;
my $fh = shift;
my $input = shift;
$hs ||= Protocol::WebSocket::Handshake::Server->new;
$frame ||= Protocol::WebSocket::Frame->new;
foreach my $c ($mux->handles) {
if (!$hs->is_done) {
$hs->parse($$input);
if ($hs->is_done) {
print $c $hs->to_string;
}
$$input = '';
return;
}
$frame->append($$input);
while (my $message = $frame->next) {
print $c $frame->new($message)->to_bytes;
}
}
$$input = '';
}