#!/opt/bin/perl

# Usage: ./chat_client nickname optional-servernode
# implement a chat client using "bridge-head" methodology.

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

my $nick = shift;

configure;

$| = 1;

my $port = port;

my ($client, $server);

sub server_connect {
   my $servernodes = grp_get "eg_chat_server2"
      or return after 1, \&server_connect;

   print "\rconnecting...\n";

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

   $server = spawn $servernodes->[0], "::client_connect", $client, $nick;
   mon $server, $client;
}

server_connect;

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

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

