X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FTraffic%2FTrafficMgr.hxx;h=15a3467c8ef6df9ec223e9f68f1a11881f2e1356;hb=070dba29f9390806457206c2660f2daebd3d847c;hp=ab1e19880deea5faeb6aadad453539df1212e3cd;hpb=317302004332ed5b6082ea548c1b06b68fc4350c;p=flightgear.git diff --git a/src/Traffic/TrafficMgr.hxx b/src/Traffic/TrafficMgr.hxx index ab1e19880..15a3467c8 100644 --- a/src/Traffic/TrafficMgr.hxx +++ b/src/Traffic/TrafficMgr.hxx @@ -46,24 +46,23 @@ #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: std::string registration; unsigned int runCount; unsigned int hits; + unsigned int lastRun; }; typedef std::vector heuristicsVector; @@ -74,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