+
+sub got_record {
+ my($conn, $state, $rs, $event) = @_;
+
+ {
+ # Sanity-checking assertions. These should be impossible
+ my $ns = $state->{next_to_show};
+ my $nf = $state->{next_to_fetch};
+ if ($ns > $nf) {
+ die "next_to_show > next_to_fetch ($ns > $nf)";
+ } elsif ($ns == $nf) {
+ die "next_to_show == next_to_fetch ($ns)";
+ }
+ }
+
+ my $i = $state->{next_to_show}++;
+ my $rec = $rs->record($i);
+ print $conn->option("host"), ": record $i is ", render_record($rec), "\n";
+ request_records($conn, $rs, $state, 3)
+ if $i == $state->{next_to_fetch}-1;
+
+ return 0;
+}
+
+sub exception_thrown {
+ my($conn, $state, $rs, $exception) = @_;
+ print "Uh-oh! $exception\n";
+ return 0;
+}
+
+sub request_records {
+ my($conn, $rs, $state, $count) = @_;
+
+ my $i = $state->{next_to_fetch};
+ ZOOM::Log::log("appl", "requesting $count records from $i");
+ $rs->records($i, $count, 0);
+ $state->{next_to_fetch} += $count;
+}
+
+sub render_record {
+ my($rec) = @_;
+
+ return "undefined" if !defined $rec;
+ return "'" . $rec->render() . "'";
+}