#!/opt/bin/perl # Usage: ./chat_client nickname optional-servernode # implement a chat client using "bridge-head" methodology. use common::sense; use AnyEvent::MP; my $nick = shift; configure; $| = 1; my $port = port; my ($client, $server); sub server_connect { my $db_mon; $db_mon = db_mon eg_chat_server => sub { return unless %{ $_[0] }; undef $db_mon; print "\rconnecting...\n"; $client = port { print "\r \r@_\n> " }; mon $client, sub { print "\rdisconnected @_\n"; &server_connect; }; $server = spawn (keys %{ $_[0] })[0], "::client_connect", $client, $nick; mon $server, $client; }; } server_connect; my $w = AE::io 0, 0, sub { chomp (my $line = ); print "> "; snd $server, $line if $server; }; print "> "; AE::cv->recv;