If you are reading telemetry from one port and writing (derived?) waypoints to the other, why do you need concurrency? On the surface, it sounds much like a simple filter program using sockets instead of pipes?
Something as simple as this might be all you need:
use IO::Socket;
use XML::Simple;
my $cTelemetry = IO::Socket::INET->new( 'localhost:12345' ) or die $!;
my $cWaypoints = IO::Socket::INET->new( 'localhost:6789' ) or die $!;
while( <cTelemetry> ) {
my $xmlTelemetry = XMLin( $_ );
if( my $xmlWaypoint = deriveWaypoint( $xmlTelemetry ) ){
print $cWaypoints $xmlTelemetry;
}
}
That leaves you to write the code for deriving waypoints from telemetry data, but unless that is a slow process, there does not seem much scope for concurrency here?
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
|