ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-MP/eg/chat_server
(Generate patch)

Comparing AnyEvent-MP/eg/chat_server (file contents):
Revision 1.3 by elmex, Fri Aug 7 09:07:37 2009 UTC vs.
Revision 1.4 by root, Fri Aug 14 15:38:02 2009 UTC

1#!/opt/bin/perl 1#!/opt/bin/perl
2 2
3use AnyEvent; 3use common::sense;
4use AnyEvent::MP; 4use AnyEvent::MP;
5 5
6initialise_node "127.0.0.1:1299"; 6initialise_node;
7 7
8print "initialized server\n"; 8my %clients;
9 9
10my $chatter_port = port; 10sub msg {
11 print "relaying: $_[0]\n";
12 snd $_, $_[0]
13 for values %clients;
14}
11 15
12reg $chatter_port, "chatter"; 16sub client_connect {
17 my ($client, $name) = @_;
13 18
14my %client_ports; 19 mon $client;
20 mon $client, sub {
21 delete $clients{$client};
22 msg "$name (quits, @_)";
23 };
15 24
16rcv $chatter_port, 25 $clients{$client} = $client;
17 join => sub {
18 my ($tag, $client_port) = @_;
19 26
20 print "got new client port: $client_port\n"; 27 msg "$name (joins)";
21 $client_ports{$client_port} = 1;
22 28
23 mon $client_port, sub { 29 rcv $SELF, sub {
24 my (@reason) = @_; 30 msg "$name: $_[0]";
25 print "client disconnected: " . join (', ', @reason) . "\n";
26 delete $client_ports{$client_port}
27 };
28
29 0
30 },
31 message => sub {
32 my ($tag, $msg) = @_;
33
34 print "message> $msg\n";
35
36 snd $_, message => $msg
37 for keys %client_ports;
38
39 0 31 0
40 }; 32 };
33}
41 34
42AnyEvent->condvar->recv; 35warn "server ready.\n";
36
37AE::cv->recv;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines