X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FTraffic%2FTrafficMgr.hxx;h=15a3467c8ef6df9ec223e9f68f1a11881f2e1356;hb=070dba29f9390806457206c2660f2daebd3d847c;hp=b287ef62bfcbdd784b25c0f80c8519dde87a329f;hpb=c9813d1b5d79b4aad13c263690a0223086af25ac;p=flightgear.git diff --git a/src/Traffic/TrafficMgr.hxx b/src/Traffic/TrafficMgr.hxx index b287ef62b..15a3467c8 100644 --- a/src/Traffic/TrafficMgr.hxx +++ b/src/Traffic/TrafficMgr.hxx @@ -22,57 +22,103 @@ /************************************************************************** * This file contains the class definitions for a (Top Level) traffic * manager for FlightGear. + * + * This is traffic manager version II. The major difference from version + * I is that the Flight Schedules are decoupled from the AIAircraft + * entities. This allows for a much greater flexibility in setting up + * Irregular schedules. Traffic Manager II also makes no longer use of .xml + * based configuration files. + * + * Here is a step plan to achieve the goal of creating Traffic Manager II + * + * 1) Read aircraft data from a simple text file, like the one provided by + * Gabor Toth + * 2) Create a new database structure of SchedFlights. This new database + * should not be part of the Schedule class, but of TrafficManager itself + * 3) Each aircraft should have a list of possible Flights it can operate + * (i.e. airline and AC type match). + * 4) Aircraft processing proceeds as current. During initialization, we seek + * the most urgent flight that needs to be operated + * 5) Modify the getNextLeg function so that the next flight is loaded smoothly. + **************************************************************************/ #ifndef _TRAFFICMGR_HXX_ #define _TRAFFICMGR_HXX_ +#include +#include + #include -#include +#include +#include #include "SchedFlight.hxx" #include "Schedule.hxx" +class Heuristic +{ +public: + std::string registration; + unsigned int runCount; + unsigned int hits; + unsigned int lastRun; +}; + +typedef std::vector heuristicsVector; +typedef std::vector::iterator heuristicsVectorIterator; -typedef vector IdList; -typedef vector::iterator IdListIterator; +typedef std::map < std::string, Heuristic> HeuristicMap; +typedef HeuristicMap::iterator HeuristicMapIterator; -class FGTrafficManager : public SGSubsystem, public XMLVisitor + +class ScheduleParseThread; + +class FGTrafficManager : public SGSubsystem { private: + bool inited; + bool doingInit; + bool trafficSyncRequested; + + double waitingMetarTime; + std::string waitingMetarStation; + ScheduleVector scheduledAircraft; ScheduleVectorIterator currAircraft, currAircraftClosest; - string value; + + FGScheduledFlightMap flights; - string mdl, livery, registration, callsign, fltrules, - port, timeString, departurePort, departureTime, arrivalPort, arrivalTime, - repeat, acType, airline, m_class, flighttype; - int cruiseAlt; - double radius, offset; - bool heavy; + void readTimeTableFromFile(SGPath infilename); + void Tokenize(const std::string& str, std::vector& tokens, const std::string& delimiters = " "); - IdList releaseList; - - FGScheduledFlightVec flights; + 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); - - // 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