BEGIN {
use File::Basename ();
use File::Spec ();
my $root = File::Basename::dirname(__FILE__);
$root = File::Spec->rel2abs($root);
unshift @INC, "$root/../lib";
}
use Plack::Builder;
use Plack::App::File;
use Plack::Middleware::Static;
use Plack::Middleware::SocketIO;
my $path_to_socket_io = "/path/to/Socket.IO-node";
builder {
mount '/socket.io/socket.io.js' => Plack::App::File->new(
file => "$path_to_socket_io/support/socket.io-client/socket.io.js");
mount '/' => builder {
enable "Static",
path => qr/\.(?:js|css|jpe?g|gif|png|html?|js|css|swf|ico)$/,
root => "$path_to_socket_io/example";
enable "SimpleLogger", level => 'debug';
enable "SocketIO", handler => sub {
my $self = shift;
$self->on_message(
sub {
my $self = shift;
my ($message) = @_;
$self->send_broadcast({message => [$self->id, $message]});
}
);
$self->on_disconnect(
sub {
$self->send_broadcast(
{announcement => $self->id . ' disconnected'});
}
);
$self->send_message({buffer => []});
$self->send_broadcast({announcement => $self->id . ' connected'});
};
sub {
[ 200,
['Content-Type' => 'text/html'],
['Open <a href="/chat.html">chat</a>.']
];
};
};
};