Files
pilotclient/src/blackcore/simulator.h
Klaus Basan a94bceddab refs #335, refs #342 improved simulator states
* new signal sending all 3 states together (connected, running, paused)
* renamed ISimulator::Status to ConnectionStatus
* consolidated some member / signal names
* for FS9/XPlane implemented stub functions
2014-11-30 00:54:07 +01:00

162 lines
5.3 KiB
C++

/* Copyright (C) 2013
* swift Project Community / Contributors
*
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
* including this file, may be copied, modified, propagated, or distributed except according to the terms
* contained in the LICENSE file.
*/
//! \file
#ifndef BLACKCORE_SIMULATOR_H
#define BLACKCORE_SIMULATOR_H
#include "blacksim/simulatorinfo.h"
#include "blackmisc/statusmessagelist.h"
#include "blackmisc/avaircraft.h"
#include "blackmisc/avairportlist.h"
#include "blackmisc/nwaircraftmodellist.h"
#include "blackmisc/nwtextmessage.h"
#include <QObject>
namespace BlackCore
{
/*!
* Interface to a simulator.
*/
class ISimulator : public QObject
{
Q_OBJECT
Q_ENUMS(ConnectionStatus)
public:
//! ISimulator connection
enum ConnectionStatus
{
Disconnected,
Connected,
ConnectionFailed
};
//! Constructor
ISimulator(QObject *parent = nullptr);
//! Destructor
virtual ~ISimulator() {}
//! Are we connected to the simulator?
virtual bool isConnected() const = 0;
//! Can we connect?
//! \todo currently some code in XPlane implementation prevents to make the function const, can we fix this
virtual bool canConnect() const = 0;
//! Is time synchronization on?
virtual bool isTimeSynchronized() const = 0;
//! Simulator paused?
virtual bool isPaused() const = 0;
//! Simulator running?
virtual bool isRunning() const = 0;
public slots:
//! Connect to simulator
virtual bool connectTo() = 0;
//! Connect asynchronously to simulator
virtual void asyncConnectTo() = 0;
//! Disconnect from simulator
virtual bool disconnectFrom() = 0;
//! Return user aircraft object
virtual BlackMisc::Aviation::CAircraft getOwnAircraft() const = 0;
//! Add new remote aircraft to the simulator
//! \todo Add parameter: aircraft model
virtual void addRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &initialSituation) = 0;
//! Add new aircraft situation
virtual void addAircraftSituation(const BlackMisc::Aviation::CCallsign &callsign, const BlackMisc::Aviation::CAircraftSituation &situation) = 0;
//! Remove remote aircraft from simulator
virtual void removeRemoteAircraft(const BlackMisc::Aviation::CCallsign &callsign) = 0;
//! Update own aircraft cockpit (usually from context)
virtual bool updateOwnSimulatorCockpit(const BlackMisc::Aviation::CAircraft &aircraft) = 0;
//! Simulator info
virtual BlackSim::CSimulatorInfo getSimulatorInfo() const = 0;
//! Display a status message in the simulator
virtual void displayStatusMessage(const BlackMisc::CStatusMessage &message) const = 0;
//! Display a text message
virtual void displayTextMessage(const BlackMisc::Network::CTextMessage &message) const = 0;
//! Own aircraft Model
virtual BlackMisc::Network::CAircraftModel getAircraftModel() const = 0;
//! Aircraft models for available remote aircraft
virtual BlackMisc::Network::CAircraftModelList getInstalledModels() const = 0;
//! Airports in range
virtual BlackMisc::Aviation::CAirportList getAirportsInRange() const = 0;
//! Set time synchronization between simulator and user's computer time
//! \remarks not all drivers implement this, e.g. if it is an intrinsic simulator feature
virtual void setTimeSynchronization(bool enable, BlackMisc::PhysicalQuantities::CTime offset) = 0;
//! Time synchronization offset
virtual BlackMisc::PhysicalQuantities::CTime getTimeSynchronizationOffset() const = 0;
signals:
//! Emitted when the connection status has changed
void connectionStatusChanged(ISimulator::ConnectionStatus status);
//! Emitted when own aircraft model has changed
void aircraftModelChanged(BlackMisc::Network::CAircraftModel model);
//! Simulator combined status
void simulatorStatusChanged(bool connected, bool running, bool paused);
//! Simulator started
void simulatorStarted();
//! Simulator stopped;
void simulatorStopped();
protected:
//! Emit the combined status
//! \sa simulatorStatusChanged;
void emitSimulatorCombinedStatus();
};
//! Factory pattern class to create instances of ISimulator
class ISimulatorFactory
{
public:
//! ISimulatorVirtual destructor
virtual ~ISimulatorFactory() {}
//! Create a new instance
virtual ISimulator *create(QObject *parent = nullptr) = 0;
//! Simulator info
virtual BlackSim::CSimulatorInfo getSimulatorInfo() const = 0;
};
} // namespace BlackCore
// TODO: Use CProject to store this string
Q_DECLARE_INTERFACE(BlackCore::ISimulatorFactory, "net.vatsim.PilotClient.BlackCore.SimulatorInterface")
Q_DECLARE_METATYPE(BlackCore::ISimulator::ConnectionStatus)
#endif // guard