ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/Net-XMPP2/samples/conference_lister
(Generate patch)

Comparing cvsroot/Net-XMPP2/samples/conference_lister (file contents):
Revision 1.1 by elmex, Sun Jul 8 20:56:01 2007 UTC vs.
Revision 1.2 by elmex, Mon Jul 9 20:24:45 2007 UTC

11 11
12our $J = AnyEvent->condvar; 12our $J = AnyEvent->condvar;
13our $datafile = "conferences.stor"; 13our $datafile = "conferences.stor";
14our $data = {}; 14our $data = {};
15 15
16require "rl.pl"; 16sub load_servers {
17 my $parser = XML::DOM::Parser->new;
18 my $doc = $parser->parsefile ("servers.xml");
19
20 my %servers;
21 for ($doc->findnodes ('/query/item')) {
22 my $n = $_->getAttributeNode ('jid');
23 $servers{$n->getValue} = 1;
24 }
25 keys %servers
26}
27
28# locking mechanism for requests
29our %req;
30our $id = 0;
31sub addreq { my $k = $id . "_" . $_[0]; $req{$k} = 1; $id++; $k }
32sub finreq { delete $req{$_[0]}; my @k = keys %req; $J->broadcast if @k == 0 }
33
34# timer for status output
35our $t;
36sub mktimer {
37 $t = AnyEvent->timer (after => 1, cb => sub {
38 my @keys = keys %req;
39 my @ok = grep { $_ !~ /_timer_/ } @keys;
40 my $timers = scalar (grep { $_ =~ /_timer_/ } @keys);
41 print "\t*** pending requests $timers timers, and : " . join (',', @ok) . "\n";
42 mktimer ();
43 });
44}
45mktimer;
46
47# server data cache
48eval { $data = retrieve $datafile };
49print "finished data: " . join (',', keys %$data) . "\n";
50sub sync_data { store $data, $datafile }
17 51
18# MAIN START 52# MAIN START
19my @servers = load_servers (); 53my @servers = load_servers ();
20my $cl = Net::XMPP2::Client->new (); 54my $cl = Net::XMPP2::Client->new ();
21my $d = Net::XMPP2::Ext::Disco->new; 55my $d = Net::XMPP2::Ext::Disco->new;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines