#!/usr/bin/perl $VERSION = 'APRS-IS-MULTIRX 1.0'; use POSIX; use IO::Multiplex; use Ham::APRS::IS; select STDOUT; $| = 1; my $quit = 0; my $APRSIS; my $mycall = $ARGV[0] . '-'; my $server = $ARGV[1]; #my $filter = 'p/OH2R'; #my $filter = 'p/OH'; my $filter = 'p/OH2R -p/OH2 p/OH '; $filter = 'p/OH/OI/OJ/OF'; my @APRS = (); my $n = $ARGV[2]; my $MUX = new IO::Multiplex; warn "Connecting to $server as $mycall with $n sockets\n"; my $call_n = 0; sub connect_new() { my $call = sprintf("%s%d",$mycall,$call_n); $call_n++; $APRSIS = Ham::APRS::IS->new($server, $call); if (!defined($APRSIS)) { printf "Failed to init Ham::APRS::IS socket!\n"; exit 4; } if (!$APRSIS->connect()) { printf "Failed to connect\n"; exit 4; } $MUX->add( $APRSIS->{'sock'} ); } foreach my $i (1 .. $n) { connect_new(); } $MUX->set_callback_object(__PACKAGE__); $MUX->loop(); # #my $now = time; #my $last = $now + 60*60; #local $line; # #while (1) { # $now = time; # foreach my $A (@APRS) { # $line = $A->getline; # } #} exit 0; sub mux_input { my $package = shift; my $mux = shift; my $fh = shift; my $data = shift; $$data = ''; } my $eofs = 0; sub mux_eof { my $package = shift; my $mux = shift; my $fh = shift; $eofs++; warn "eof $eofs\n"; $MUX->close($fh); connect_new(); }