1 # $Id: async.pl,v 1.3 2006-11-02 17:48:25 mike Exp $
3 # See ../README for a description of this program.
4 # perl -I../../blib/lib -I../../blib/arch zoomtst3.pl <t1> [...] <tN> <query>
6 # perl -I../../blib/lib -I../../blib/arch async.pl z3950.loc.gov:7090/Voyager z3950.indexdata.com:210/gils endeavor.flo.org:7090/Voyager mineral
13 print STDERR "Usage: $0 target1 target2 ... targetN query\n";
14 print STDERR " eg. $0 z3950.indexdata.dk/gils localhost:9999 fish\n";
19 my(@z, @r); # connections, result sets
20 my $o = Net::Z3950::ZOOM::options_create();
21 Net::Z3950::ZOOM::options_set($o, async => 1);
23 # Get first 10 records of result set (using piggyback)
24 Net::Z3950::ZOOM::options_set($o, count => 10);
26 # Preferred record syntax
27 Net::Z3950::ZOOM::options_set($o, preferredRecordSyntax => "usmarc");
28 Net::Z3950::ZOOM::options_set($o, elementSetName => "B");
30 # Connect to all targets: options are the same for all of them
31 for (my $i = 0; $i < $n; $i++) {
32 $z[$i] = Net::Z3950::ZOOM::connection_create($o);
33 Net::Z3950::ZOOM::connection_connect($z[$i], $ARGV[$i], 0);
37 for (my $i = 0; $i < $n; $i++) {
38 $r[$i] = Net::Z3950::ZOOM::connection_search_pqf($z[$i], $ARGV[-1]);
41 # Network I/O. Pass number of connections and array of connections
45 while (($i = Net::Z3950::ZOOM::event(\@z)) != 0) {
46 my $ev = Net::Z3950::ZOOM::connection_last_event($z[$i-1]);
47 print("connection ", $i-1, ": event $ev (",
48 Net::Z3950::ZOOM::event_str($ev), ")\n");
49 last if $ev == Net::Z3950::ZOOM::EVENT_END;
53 # Not the end of the whole loop; one server is ready to display
55 my($error, $errmsg, $addinfo) = (undef, "dummy", "dummy");
56 my $tname = $ARGV[$i];
58 # Display errors if any
59 $error = Net::Z3950::ZOOM::connection_error($z[$i], $errmsg, $addinfo);
61 print STDERR "$tname error: $errmsg ($error) $addinfo\n";
65 # OK, no major errors. Look at the result count
66 my $size = Net::Z3950::ZOOM::resultset_size($r[$i]);
67 print "$tname: $size hits\n";
69 # Go through all records at target
70 $size = 10 if $size > 10;
71 for (my $pos = 0; $pos < $size; $pos++) {
72 my $len = 0; # length of buffer rec
73 print "$tname: fetching ", $pos+1, " of $size\n";
74 my $tmp = Net::Z3950::ZOOM::resultset_record($r[$i], $pos);
76 print "$tname: can't get record ", $pos+1, "\n";
79 my $rec = Net::Z3950::ZOOM::record_get($tmp, "render", $len);
81 print "$tname: can't render record ", $pos+1, "\n";
84 print $pos+1, "\n", $rec, "\n";
89 if (--$nremaining > 0) {
94 for (my $i = 0; $i < $n; $i++) {
95 Net::Z3950::ZOOM::resultset_destroy($r[$i]);
96 Net::Z3950::ZOOM::connection_destroy($z[$i]);
99 Net::Z3950::ZOOM::options_destroy($o);