#!/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 = AnyEvent::MP::Global::find "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 = ); print "> "; snd $server, $line if $server; }; print "> "; AE::cv->recv;