#!/opt/bin/perl

# Usage: ./chat_client nickname optional-servername
# implement a chat client using "traditional message passing"

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

my $nick = shift;

initialise_node "anon/";

$| = 1;

my $port = port;

my ($client, $server);

sub server_connect {
   my $servernodes = AnyEvent::MP::Global::find "eg_chat_server"
      or return after 1, \&server_connect;

   print "\rconnecting...\n";

   $server = $servernodes->[0];

   $client = port { print "\r  \r@_\n> " };
   mon $client, sub {
      print "\rdisconnected @_\n";
      &server_connect;
   };

   snd $server, join => $client, $nick;
   mon $server, $client;
}

server_connect;

my $w = AE::io 0, 0, sub {
   chomp (my $line = <STDIN>);
   print "> ";
   snd $server, privmsg => $nick, $line
     if $server;
};

print "> ";
AE::cv->recv;

