#ifndef AIRMAP_CLIENT_H_ #define AIRMAP_CLIENT_H_ #include #include #include #include #include #include #include #include #include namespace airmap { class Advisory; class Aircrafts; class Airspaces; class Authenticator; class FlightPlans; class Flights; class Pilots; class RuleSets; class Status; class Telemetry; class Traffic; /// Client enables applications to use the AirMap services and APIs. class Client : DoNotCopyOrMove { public: /// Version enumerates all known versions available to clients. enum class Version { production, staging }; /// Configuration bundles up parameters enabling /// customization of a Client implementation behavior. struct Configuration { std::string host; ///< Address of the host exposing the AirMap services. Version version; ///< The version of the AirMap services that should be used. struct { std::string host; ///< Address of the host exposing the sso service. std::uint16_t port; ///< Port on the host exposing the sso service. } sso; ///< The SSO endpoint used for the authenticating with the AirMap services. struct { std::string host; ///< Address of the host exposing the AirMap telemetry endpoints. std::uint16_t port; ///< Port of the host exposing the AirMap telemetry endpoints. } telemetry; ///< The telemetry submission endpoint. struct { std::string host; ///< Address of the mqtt broker serving air traffic information. std::uint16_t port; ///< Port of the mqtt broker serving air traffic information. } traffic; ///< The traffic endpoint. Credentials credentials; ///< Credentials that are required to authorize access to the AirMap services. }; /// default_production_configuration returns a Configuration instance that works /// against the AirMap production API and telemetry endpoints. static Configuration default_production_configuration(const Credentials& credentials); /// default_staging_configuration returns a Configuration instance that works /// against the AirMap staging API and telemetry endpoints. static Configuration default_staging_configuration(const Credentials& credentials); /// default_configuration returns a Configuration instance that works against /// the AirMap API and telemetry endpoints indicated by 'version'. static Configuration default_configuration(Version version, const Credentials& credentials); /// load_configuration_from_json loads a configuration from 'in', assuming the following /// JSON format: /// /// @code{.json} /// { /// "host": "api.airmap.com", /// "version": "production", /// "sso": { /// "host": "sso.airmap.io", /// "port": 443 /// }, /// "telemetry": { /// "host": "api-udp-telemetry.airmap.com", /// "port": 16060 /// }, /// "traffic": { /// "host": "mqtt-prod.airmap.io", /// "port": 8883 /// }, /// "credentials": { /// "api-key": "your api key should go here", /// "oauth": { /// "client-id": "your client id should go here", /// "device-id": "your device id should go here, or generate one with uuid-gen", /// "username": "your AirMap username should go here", /// "password": "your AirMap password should go here" /// }, /// "anonymous": { /// "id": "some id" /// } /// } /// } /// @endcode static Configuration load_configuration_from_json(std::istream& in); /// authenticator returns the Authenticator implementation provided by the client. virtual Authenticator& authenticator() = 0; /// advisory returns the Advisory implementation provided by the client. virtual Advisory& advisory() = 0; /// aircrafts returns the Aircrafts implementation provided by the client. virtual Aircrafts& aircrafts() = 0; /// airspaces returns the Airspaces implementation provided by the client. virtual Airspaces& airspaces() = 0; /// flight_plans returns the FlightPlans implementation provided by the client. virtual FlightPlans& flight_plans() = 0; /// flights returns the Flights implementation provided by the client. virtual Flights& flights() = 0; /// pilots returns the Pilots implementation provided by the client. virtual Pilots& pilots() = 0; /// rulesets returns the RuleSets implementation provided by the client. virtual RuleSets& rulesets() = 0; /// status returns the Status implementation provided by the client. virtual Status& status() = 0; /// telemetry returns the Telemetry implementation provided by the client. virtual Telemetry& telemetry() = 0; /// traffic returns the Traffic implementation provided by the client. virtual Traffic& traffic() = 0; protected: /// @cond Client() = default; /// @endcond }; /// @cond std::istream& operator>>(std::istream& in, Client::Version& version); std::ostream& operator<<(std::ostream& out, Client::Version version); /// @endcond } // namespace airmap #endif // AIRMAP_CLIENT_H_