aprsc/tools/aprs-is-multirx

93 lines
1.4 KiB
Perl

#!/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();
}