#!/usr/bin/env perl use strict; use warnings; use AnyEvent::Socket; use AnyEvent::Handle; use Protocol::WebSocket::Handshake::Server; use Protocol::WebSocket::Frame; my $cv = AnyEvent->condvar; my $hdl; AnyEvent::Socket::tcp_server undef, 3000, sub { my ($clsock, $host, $port) = @_; my $hs = Protocol::WebSocket::Handshake::Server->new; my $frame = Protocol::WebSocket::Frame->new; $hdl = AnyEvent::Handle->new(fh => $clsock); $hdl->on_read( sub { my $hdl = shift; my $chunk = $hdl->{rbuf}; $hdl->{rbuf} = undef; if (!$hs->is_done) { $hs->parse($chunk); if ($hs->is_done) { $hdl->push_write($hs->to_string); return; } } $frame->append($chunk); while (my $message = $frame->next) { $hdl->push_write($frame->new($message)->to_bytes); } } ); }; $cv->wait;