X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FTraffic%2FTrafficMgr.hxx;h=15a3467c8ef6df9ec223e9f68f1a11881f2e1356;hb=070dba29f9390806457206c2660f2daebd3d847c;hp=c8f9faca1d5b4e94c72e9d489095a4b3b6b4f6af;hpb=35abe6d0ab947a8cd2a5eca703d7f731ad5dac65;p=flightgear.git diff --git a/src/Traffic/TrafficMgr.hxx b/src/Traffic/TrafficMgr.hxx index c8f9faca1..15a3467c8 100644 --- a/src/Traffic/TrafficMgr.hxx +++ b/src/Traffic/TrafficMgr.hxx @@ -46,18 +46,16 @@ #ifndef _TRAFFICMGR_HXX_ #define _TRAFFICMGR_HXX_ +#include +#include + #include #include -#include #include #include "SchedFlight.hxx" #include "Schedule.hxx" - -typedef std::vector IdList; -typedef std::vector::iterator IdListIterator; - class Heuristic { public: @@ -75,52 +73,52 @@ typedef HeuristicMap::iterator HeuristicMapIterator; +class ScheduleParseThread; -class FGTrafficManager : public SGSubsystem, public XMLVisitor +class FGTrafficManager : public SGSubsystem { private: bool inited; + bool doingInit; + bool trafficSyncRequested; + + double waitingMetarTime; + std::string waitingMetarStation; ScheduleVector scheduledAircraft; ScheduleVectorIterator currAircraft, currAircraftClosest; - vector elementValueStack; - - std::string mdl, livery, registration, callsign, fltrules, - port, timeString, departurePort, departureTime, arrivalPort, arrivalTime, - repeat, acType, airline, m_class, flighttype, requiredAircraft, homePort; - int cruiseAlt; - int score, runCount, acCounter; - double radius, offset; - bool heavy; - - IdList releaseList; FGScheduledFlightMap flights; void readTimeTableFromFile(SGPath infilename); - void Tokenize(const string& str, vector& tokens, const string& delimiters = " "); + void Tokenize(const std::string& str, std::vector& tokens, const std::string& delimiters = " "); simgear::PropertyObject enabled, aiEnabled, realWxEnabled, metarValid; + + void loadHeuristics(); + + void finishInit(); + void shutdown(); + + friend class ScheduleParseThread; + std::auto_ptr scheduleParser; + + // helper to read and parse the schedule data. + // this is run on a helper thread, so be careful about + // accessing properties during parsing + void parseSchedule(const SGPath& path); + + bool metarReady(double dt); + public: FGTrafficManager(); ~FGTrafficManager(); void init(); void update(double time); - void release(int ref); - bool isReleased(int id); - - FGScheduledFlightVecIterator getFirstFlight(const string &ref) { return flights[ref].begin(); } - FGScheduledFlightVecIterator getLastFlight(const string &ref) { return flights[ref].end(); } - - // Some overloaded virtual XMLVisitor members - virtual void startXML (); - virtual void endXML (); - virtual void startElement (const char * name, const XMLAttributes &atts); - virtual void endElement (const char * name); - virtual void data (const char * s, int len); - virtual void pi (const char * target, const char * data); - virtual void warning (const char * message, int line, int column); - virtual void error (const char * message, int line, int column); + + FGScheduledFlightVecIterator getFirstFlight(const std::string &ref) { return flights[ref].begin(); } + FGScheduledFlightVecIterator getLastFlight(const std::string &ref) { return flights[ref].end(); } + }; #endif