# include <math.h>
#endif
+#include <queue>
#include <vector>
+SG_USING_STD(queue);
SG_USING_STD(vector);
class SGPropertyNode;
};
+// A convenience wrapper around SGMetar
+struct FGMetarResult {
+ string icao;
+ SGMetar *m;
+};
+
+
\f
/**
* Interplation controller using the SGMetar class
virtual void init ();
virtual void reinit ();
virtual void update (double delta_time_sec);
-
virtual void setEnvironment (FGEnvironment * environment);
private:
FGInterpolateEnvironmentCtrl *env;
- float station_elevation_ft;
- float update_interval_sec;
- float elapsed;
- bool fetch_data (const string &icao);
- void update_env_config();
-
string _icao;
+ float station_elevation_ft;
+ float search_interval_sec;
+ float same_station_interval_sec;
+ float search_elapsed;
+ float fetch_elapsed;
+ FGAirport last_apt;
SGPropertyNode *proxy_host;
SGPropertyNode *proxy_port;
SGPropertyNode *proxy_auth;
+ FGMetarResult fetch_data( const string &icao );
+ virtual void update_metar_properties( SGMetar *m );
+ void update_env_config();
+
private:
#ifdef ENABLE_THREADS
/**
* FIFO queue which holds a pointer to the fetched metar data.
*/
- SGBlockingQueue< SGMetar * > metar_queue;
+ SGBlockingQueue < string > request_queue;
+
+ /**
+ * FIFO queue which holds a pointer to the fetched metar data.
+ */
+ SGBlockingQueue < FGMetarResult > result_queue;
+#else
+ /**
+ * FIFO queue which holds a pointer to the fetched metar data.
+ */
+ queue < string > request_queue;
+ /**
+ * FIFO queue which holds a pointer to the fetched metar data.
+ */
+ queue < FGMetarResult > result_queue;
+#endif
+
+#ifdef ENABLE_THREADS
/**
* This class represents the thread of execution responsible for
* fetching the metar data.
~MetarThread() {}
/**
- * Reads the tile from disk.
+ * Fetched the metar data from the NOAA.
*/
void run();