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 )