#!/opt/bin/perl

# Usage: ./chat_server
# implement a chat server using "traditional message passing"

use common::sense;
use AnyEvent::MP;
use AnyEvent::MP::Global;

initialise_node;

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;
