ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-MP/eg/chat_client2
Revision: 1.7
Committed: Tue Mar 27 16:15:22 2012 UTC (12 years, 2 months ago) by root
Branch: MAIN
CVS Tags: rel-2_02, rel-2_01, rel-2_0, HEAD
Changes since 1.6: +13 -11 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #!/opt/bin/perl
2    
3     # Usage: ./chat_client nickname optional-servernode
4     # implement a chat client using "bridge-head" methodology.
5    
6     use common::sense;
7     use AnyEvent::MP;
8    
9 root 1.2 my $nick = shift;
10 root 1.1
11 root 1.4 configure;
12 root 1.1
13     $| = 1;
14    
15     my $port = port;
16    
17     my ($client, $server);
18    
19     sub server_connect {
20 root 1.7 my $db_mon; $db_mon = db_mon eg_chat_server => sub {
21     return unless %{ $_[0] };
22     undef $db_mon;
23    
24     print "\rconnecting...\n";
25    
26     $client = port { print "\r \r@_\n> " };
27     mon $client, sub {
28     print "\rdisconnected @_\n";
29     &server_connect;
30     };
31 root 1.1
32 root 1.7 $server = spawn (keys %{ $_[0] })[0], "::client_connect", $client, $nick;
33     mon $server, $client;
34 root 1.1 };
35     }
36    
37     server_connect;
38    
39     my $w = AE::io 0, 0, sub {
40     chomp (my $line = <STDIN>);
41     print "> ";
42     snd $server, $line
43     if $server;
44     };
45    
46     print "> ";
47     AE::cv->recv;
48