93 lines
1.4 KiB
Perl
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();
|
|
}
|
|
|