#!/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;
