]> git.mxchange.org Git - flightgear.git/commitdiff
Melchior FRANZ:
authorehofman <ehofman>
Mon, 31 Jan 2005 18:18:25 +0000 (18:18 +0000)
committerehofman <ehofman>
Mon, 31 Jan 2005 18:18:25 +0000 (18:18 +0000)
Yesterday night it occurred to me that the current handling of missing METAR
strings isn't good enough:

- in case of missing METAR strings, don't re-send the last successful string,
  but the last successful string sent to *this* client. (If one client is
  running in virtual December, it won't be happy about dropped in summer
  weather.)

- fix a bug that allowed -vc notation (options -v and -c), but broke a lot of
  other notations (-b/var/tmp). Only -v can now be accumulated again, as
  in -vvvv.

utils/metarproxy/README
utils/metarproxy/metarproxy

index 9782dc11482bc17f90e5a82ffa413e4e68b64333..77f6518c9691948bd2fc7ad7c82638e963dbcaee 100644 (file)
@@ -4,7 +4,7 @@
 
 
 metarproxy is a caching proxy server for METAR data strings written in
-Perl. It can be used from the FlightGear flight simulator to:
+Perl. It can be used to:
 
 - provide METAR data for machines without internet connection
 - centralize METAR fetching: one machine in a network runs the proxy, all
@@ -129,7 +129,7 @@ Ranges are allowed, too:
   $ metarproxy --download 0-2     ... download first three hours after
                                       midnight GMT
 
-These three methods can be use in combination:
+These three methods can be used in combination:
 
   $ metarproxy --download 6h 0-2 4
 
@@ -176,7 +176,7 @@ stored in the cache. Additionally, you can specify one or more files
 with station IDs:
 
   $ metarproxy --record --file=$FG_HOME/station-list
-  $ metarproxy --record EDDM --file=tmp/Austria --file=/tmp/Hungary
+  $ metarproxy --record EDDM --file=/tmp/Austria --file=/tmp/Hungary
 
 These files simply contain station IDs separated by spaces in one
 or more lines:
@@ -232,7 +232,8 @@ All you need to do is point FlightGear to the metar proxy and let
 it run at a simulated time for which you actually have cached METAR
 data:
 
-  $ fgfs --proxy=localhost:5509 --start-date-lat=2005:01:12:12:00:00
+  $ fgfs --enable-real-weather-fetch --proxy=localhost:5509 \
+         --start-date-lat=2005:01:12:12:00:00
 
 FlightGear will then fetch the metar data from the proxy as if it
 were weather.noaa.gov. If no appropriate data set is found at all,
index f92f6749fd59b6498f72d16f614a247052e17b68..03a7b87a8b109bb6406ff74d9244299092daff35 100755 (executable)
@@ -113,12 +113,6 @@ sub parse_options()
        while (1) {
                $_ = $ARGV[0];
                defined $_ or last;
-               # dissolve glued together short options (e.g. -cvv)
-               if (/^-([^-]{2,})$/) {
-                       shift @ARGV;
-                       map { unshift @ARGV, "-$_" } split //, $1;
-                       next;
-               }
                if (!/^-/) {
                        push @ITEMS, $_;
                } elsif (/^(-d|--download)$/) {
@@ -148,8 +142,10 @@ sub parse_options()
                        $PROXY = &argument($2, $4);
                        defined $PROXY or &fatal("--proxy option lacks <host> definition");
                        &log($BULK, "set option --proxy: '$PROXY'");
-               } elsif (/^(-v|--verbose)$/) {
+               } elsif (/^--verbose$/) {
                        $VERBOSITY++;
+               } elsif (/^-(v+)$/) {
+                       $VERBOSITY += length($1);
                } elsif (/^(-q|--quiet)$/) {
                        $VERBOSITY = 0;
                } elsif (/^(-h|--help)$/) {
@@ -390,6 +386,7 @@ sub serve()
        my $server = IO::Socket::INET->new(Proto => 'tcp', LocalPort => $PORT, Listen => SOMAXCONN, Reuse => 1);
        $server or &fatal("cannot setup server ($!)");
        &log($BULK, "server $0 accepting clients on port $PORT");
+       my %last_metar;
 
        while (my $client = $server->accept()) {
                $client->autoflush(1);
@@ -425,9 +422,9 @@ sub serve()
                                if ($age <= $METAR_MAX_AGE) {
                                        &log($BULK, "found (" . int($age / 60) . " min old)");
                                        $metar =~ s/\s*$//s;
-                                       $METAR_DEFAULT = $metar;
-                                       $METAR_DEFAULT =~ s/.*\015?\012[A-Z0-9]{4}\s+[0-9]{6}Z\s+//s;
-                                       &log($DEBUG, "setting default to '$METAR_DEFAULT'");
+                                       $last_metar{$addr} = $metar;
+                                       $last_metar{$addr} =~ s/.*\015?\012[A-Z0-9]{4}\s+[0-9]{6}Z\s+//s;
+                                       &log($DEBUG, "setting default for [$addr] to '$last_metar{$addr}'");
                                        $metar =~ s/\015?\012/\015\012/g;
                                } else {
                                        &log($INFO, "found, but too old (" . int($age / 60) . " min)");
@@ -441,8 +438,8 @@ sub serve()
                                &log($INFO, "sending last successful data again");
                                $metar = sprintf "%04d/%02d/%02d %02d:%02d\015\012",
                                                $year, $mon, $day, $hour, $min;
-                               $metar .= sprintf "$icao %02d%02d%02dZ $METAR_DEFAULT",
-                                               $day, $hour, $min;
+                               $metar .= sprintf "$icao %02d%02d%02dZ ", $day, $hour, $min;
+                               $metar .= $last_metar{$addr} || $METAR_DEFAULT;
                        }
                        print $client "Content-Type: text/plain\015\012"
                                        . "X-MetarProxy: nasse Maus\015\012"