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