-
Notifications
You must be signed in to change notification settings - Fork 0
/
anyevent-websockettest.pl~
55 lines (37 loc) · 1.11 KB
/
anyevent-websockettest.pl~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/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);
warn "New Connection";
$hdl->on_read(
sub {
warn "Incoming Data";
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) {
warn "Message: ".$message;
$hdl->push_write($frame->new($message)->to_bytes);
}
}
);
};
$cv->wait;