-/* -------------------------------------------------------------------------------- */
-
-class NoaaMetarRealWxController : public BasicRealWxController {
-public:
- NoaaMetarRealWxController( SGPropertyNode_ptr rootNode );
- virtual ~NoaaMetarRealWxController();
- virtual void update (bool first, double delta_time_sec);
-
- class MetarLoadRequest {
- public:
- MetarLoadRequest( const string & stationId ) {
- _stationId = stationId;
- _proxyHost = fgGetNode("/sim/presets/proxy/host", true)->getStringValue();
- _proxyPort = fgGetNode("/sim/presets/proxy/port", true)->getStringValue();
- _proxyAuth = fgGetNode("/sim/presets/proxy/authentication", true)->getStringValue();
- }
- string _stationId;
- string _proxyHost;
- string _proxyPort;
- string _proxyAuth;
- private:
- };
-private:
- double _metarTimeToLive;
- double _positionTimeToLive;
- double _minimumRequestInterval;
-
- SGPropertyNode_ptr _metarDataNode;
- SGPropertyNode_ptr _metarValidNode;
- SGPropertyNode_ptr _metarStationIdNode;
-
-
-#if defined(ENABLE_THREADS)
- class MetarLoadThread : public OpenThreads::Thread {
- public:
- MetarLoadThread( long maxAge );
- void requestMetar( const MetarLoadRequest & metarRequest, bool background = true );
- bool hasMetar() { return _responseQueue.size() > 0; }
- string getMetar() { return _responseQueue.pop(); }
- virtual void run();
- private:
- void fetch( const MetarLoadRequest & );
- long _maxAge;
- SGBlockingQueue <MetarLoadRequest> _requestQueue;
- SGBlockingQueue <string> _responseQueue;
- };
-
- MetarLoadThread * _metarLoadThread;
-#endif
-};
-
-NoaaMetarRealWxController::NoaaMetarRealWxController( SGPropertyNode_ptr rootNode ) :
- BasicRealWxController(rootNode),
- _metarTimeToLive(0.0),
- _positionTimeToLive(0.0),
- _minimumRequestInterval(0.0),
- _metarDataNode(_metarProperties.get_root_node()->getNode("data",true)),
- _metarValidNode(_metarProperties.get_root_node()->getNode("valid",true)),
- _metarStationIdNode(_metarProperties.get_root_node()->getNode("station-id",true))