AnyEvent-XMPP
view release on metacpan or search on metacpan
samples/disco_version view on Meta::CPAN
#!/opt/perl/bin/perl
use strict;
use utf8;
use AnyEvent;
use AnyEvent::XMPP::Client;
use AnyEvent::XMPP::Ext::Version;
use POSIX qw/strftime/;
my ($jid,$pass) = qw/net_xmpp2@jabber.org test/;
($jid, $pass) = @ARGV if @ARGV;
sub timestamp {
strftime "%d%m%Y_%H%M", localtime (time);
}
my $TIMESTAMP = timestamp ();
sub append_outputfile {
open OUT, ">>disco_version.\Q$TIMESTAMP\E.output"
or die "Couldn't open disco_version.output: $!\n";
print OUT $_[0];
close OUT;
}
sub append_failed {
open OUT, ">>disco_version.\Q$TIMESTAMP\E.failed"
or die "Couldn't open disco_version.output: $!\n";
print OUT $_[0];
close OUT;
}
my %req;
my ($out_cnt, $in_cnt);
sub version_req {
my ($vers, $con, $dest) = @_;
return if $req{$dest};
$out_cnt++;
$vers->request_version ($con, $dest, sub {
my ($version, $error) = @_;
$in_cnt++;
if ($error) {
warn "$dest: DISCO VERSION ERROR $dest: " . $error->string . "\n";
append_failed ("$dest\t".$error->string."\n");
} else {
my $from = $version->{jid};
my $name = $version->{name};
my $ver = $version->{version};
my $os = $version->{os};
$ver =~ s/[\n\t]//g;
$name =~ s/[\n\t]//g;
$os =~ s/[\n\t]//g;
print "$dest: $from: name: $name version: $ver os: $os\n";
append_outputfile ("$from\t$name\t$ver\t$os\n");
}
});
}
my $j = AnyEvent->condvar;
my $cl = AnyEvent::XMPP::Client->new;# (debug => 1);
my $vers = AnyEvent::XMPP::Ext::Version->new;
$cl->add_extension ($vers);
my $t = undef;
( run in 1.118 second using v1.01-cache-2.11-cpan-39bf76dae61 )