1 | #!/opt/bin/perl |
1 | #!/opt/bin/perl |
|
|
2 | |
|
|
3 | # Usage: ./chat_client nickname optional-servername |
|
|
4 | # implement a chat client using "traditional message passing" |
2 | |
5 | |
3 | use common::sense; |
6 | use common::sense; |
4 | use AnyEvent::MP; |
7 | use AnyEvent::MP; |
5 | use AnyEvent::MP::Global; |
8 | use AnyEvent::MP::Global; |
6 | |
9 | |
… | |
… | |
18 | my $servernodes = AnyEvent::MP::Global::find "eg_chat_server" |
21 | my $servernodes = AnyEvent::MP::Global::find "eg_chat_server" |
19 | or return after 1, \&server_connect; |
22 | or return after 1, \&server_connect; |
20 | |
23 | |
21 | print "\rconnecting...\n"; |
24 | print "\rconnecting...\n"; |
22 | |
25 | |
|
|
26 | $server = $servernodes->[0]; |
|
|
27 | |
23 | $client = port { print "\r \r@_\n> " }; |
28 | $client = port { print "\r \r@_\n> " }; |
24 | mon $client, sub { |
29 | mon $client, sub { |
25 | print "\rdisconnected @_\n"; |
30 | print "\rdisconnected @_\n"; |
26 | &server_connect; |
31 | &server_connect; |
27 | }; |
32 | }; |
28 | |
33 | |
29 | $server = spawn $servernodes->[0], "::client_connect", $client, $nick; |
34 | snd $server, join => $client, $nick; |
30 | mon $server, $client; |
35 | mon $server, $client; |
31 | } |
36 | } |
32 | |
37 | |
33 | server_connect; |
38 | server_connect; |
34 | |
39 | |
35 | my $w = AE::io 0, 0, sub { |
40 | my $w = AE::io 0, 0, sub { |
36 | chomp (my $line = <STDIN>); |
41 | chomp (my $line = <STDIN>); |
37 | print "> "; |
42 | print "> "; |
38 | snd $server, $line; |
43 | snd $server, privmsg => $nick, $line |
|
|
44 | if $server; |
39 | }; |
45 | }; |
40 | |
46 | |
41 | print "> "; |
47 | print "> "; |
42 | AE::cv->recv; |
48 | AE::cv->recv; |
43 | |
49 | |