… | |
… | |
3 | # Usage: ./chat_server |
3 | # Usage: ./chat_server |
4 | # implement a chat client using "bridge-head" methodology. |
4 | # implement a chat client using "bridge-head" methodology. |
5 | |
5 | |
6 | use common::sense; |
6 | use common::sense; |
7 | use AnyEvent::MP; |
7 | use AnyEvent::MP; |
8 | use AnyEvent::MP::Global; |
|
|
9 | |
8 | |
10 | configure; |
9 | configure; |
11 | |
10 | |
12 | grp_reg eg_chat_server2 => $NODE; |
11 | db_set eg_chat_server2 => $NODE; |
13 | |
12 | |
14 | my %clients; |
13 | my %clients; |
15 | |
14 | |
16 | sub msg { |
15 | sub msg { |
17 | print "relaying: $_[0]\n"; |
16 | print "relaying: $_[0]\n"; |
… | |
… | |
21 | |
20 | |
22 | sub client_connect { |
21 | sub client_connect { |
23 | my ($client, $nick) = @_; |
22 | my ($client, $nick) = @_; |
24 | |
23 | |
25 | mon $client; |
24 | mon $client; |
26 | mon $client, sub { |
25 | mon $client, psub { |
27 | delete $clients{$client}; |
26 | delete $clients{$client}; |
28 | msg "$nick (quits, @_)"; |
27 | msg "$nick (quits, @_)"; |
29 | }; |
28 | }; |
30 | |
29 | |
31 | $clients{$client} = $client; |
30 | $clients{$client} = $client; |
… | |
… | |
36 | } |
35 | } |
37 | |
36 | |
38 | warn "server ready.\n"; |
37 | warn "server ready.\n"; |
39 | |
38 | |
40 | AE::cv->recv; |
39 | AE::cv->recv; |
|
|
40 | |