X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fwsjtl.pl;h=f991366e34dc0a9b19ab943620194ac007dfd30f;hb=7b01da28872dd9fb93e9dc29683869a851efd6cc;hp=e6f1c0482f0cbe65d8495f4cf16996e8d7946e33;hpb=b9241950296fe353177143eb3cdb02de6f9929f2;p=spider.git diff --git a/perl/wsjtl.pl b/perl/wsjtl.pl old mode 100644 new mode 100755 index e6f1c048..f991366e --- a/perl/wsjtl.pl +++ b/perl/wsjtl.pl @@ -1,4 +1,4 @@ -#!/usr/binenv perl +#!/usr/bin/env perl # # A basic listener and decoder of wsjtx packets # @@ -70,44 +70,81 @@ use DXUDP; use WSJTX; -our $udp_host = '0.0.0.0'; -our $udp_port = 59387; # 2237; +our $udp_host = '::'; +our $udp_port = 2237; our $tcp_host = '::'; our $tcp_port = 2238; my $uh; # the mojo handle for the UDP listener my $th; # ditto TCP my $wsjtx; # the wsjtx decoder - +my $cease; our %slot; # where the connected TCP client structures live dbginit('wsjtl'); -dbgadd('udp'); + +my @queue; $uh = DXUDP->new; $uh->start(host => $udp_host, port => $udp_port) or die "Cannot listen on $udp_host:$udp_port $!\n"; -$wsjtx = WSJTX->new; -$uh->on(read => \&_read); +$wsjtx = WSJTX->new(); +$uh->on(read => \&_udpread); + +$th = Mojo::IOLoop::Server->new; +$th->on(accept => \&_accept); +$th->listen(address => $tcp_host, port => $tcp_port); +$th->start; Mojo::IOLoop->start() unless Mojo::IOLoop->is_running; -sub _read +exit; + +sub _udpread { my ($handle, $data) = @_; -# say "before handle"; + my $host = $handle->peerhost; + my $port = $handle->peerport; + + my $in = $wsjtx->handle($handle, $data, "$host:$port"); + + distribute($in); +} + +sub _accept +{ + my ($id, $handle) = @_; + my $host = $handle->peerhost; + my $port = $handle->peerport; + - $wsjtx->handle($handle, $data); + my $s = $slot{"$host:$port"} = { addr => "$host:$port"}; + my $stream = $s->{stream} = Mojo::IOLoop::Stream->new($handle); + $stream->on(error => sub { $stream->close; delete $s->{addr}}); + $stream->on(close => sub { delete $s->{addr}}); + $stream->on(read => sub {_tcpread($s, $_[1])}); + $stream->timeout(0); + $stream->start; +} -# say "after handle"; +sub _tcpread +{ + my $s = shift; + my $data = shift; -# my $lth = length $data; -# dbgdump('udp', "UDP IN lth: $lth", $data); + dbg("incoming: $data"); +} + +sub distribute +{ + my $in = shift; + foreach my $c (values %slot) { + $c->{stream}->write("$in\r\n"); + } } -exit;