#!/opt/bin/perl # Usage: ./chat_server # implement a chat server using "traditional message passing" use common::sense; use AnyEvent::MP; use AnyEvent::MP::Global; configure; my %clients; sub msg { print "relaying: $_[0]\n"; snd $_, $_[0] for values %clients; } our $server = port; rcv $server, join => sub { my ($client, $nick) = @_; $clients{$client} = $client; mon $client, sub { delete $clients{$client}; msg "$nick (quits, @_)"; }; msg "$nick (joins)"; }; rcv $server, privmsg => sub { my ($nick, $msg) = @_; msg "$nick: $msg"; }; AnyEvent::MP::Global::register $server, "eg_chat_server"; warn "server ready.\n"; AE::cv->recv;