You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.3 KiB
72 lines
2.3 KiB
#ifndef AIRMAP_MONITOR_CLIENT_H_ |
|
#define AIRMAP_MONITOR_CLIENT_H_ |
|
|
|
#include <airmap/do_not_copy_or_move.h> |
|
#include <airmap/error.h> |
|
#include <airmap/traffic.h> |
|
|
|
#include <memory> |
|
#include <vector> |
|
|
|
namespace airmap { |
|
/// namespace monitor bundles up types and functions to |
|
/// interact with the AirMap monitor daemon. |
|
namespace monitor { |
|
|
|
/// Client provides access to the AirMap monitor service. |
|
class Client : DoNotCopyOrMove { |
|
public: |
|
/// Configuration bundles up creation-time parameters of a Client. |
|
struct Configuration { |
|
std::string endpoint; ///< The remote endpoint hosting the service. |
|
std::shared_ptr<Logger> logger; ///< The logger instance. |
|
}; |
|
|
|
/// Updates models updates delivered to clients. |
|
struct Update { |
|
std::vector<Traffic::Update> traffic; ///< Traffic updates. |
|
}; |
|
|
|
/// UpdateStream abstracts a source of incoming updates. |
|
class UpdateStream : DoNotCopyOrMove { |
|
public: |
|
/// Reveiver models an entity interested in receiving updates. |
|
class Receiver : DoNotCopyOrMove { |
|
public: |
|
/// handle_update is invoked for every update sent out by the service. |
|
virtual void handle_update(const Update& update) = 0; |
|
}; |
|
|
|
/// subscribe connects 'receiver' to the stream of updates. |
|
virtual void subscribe(const std::shared_ptr<Receiver>& receiver) = 0; |
|
|
|
/// unsubscribe disconnects 'receiver' from the stream of updates. |
|
virtual void unsubscribe(const std::shared_ptr<Receiver>& receiver) = 0; |
|
|
|
protected: |
|
UpdateStream() = default; |
|
}; |
|
|
|
/// ConnectToUpdates bundles up types for calls to Client::connect_to_updates. |
|
struct ConnectToUpdates { |
|
/// Result models the outcome of calling Client::connect_to_updates. |
|
using Result = Outcome<std::shared_ptr<UpdateStream>, Error>; |
|
/// Callback models the async receiver for a call to Client::connect_to_updates. |
|
using Callback = std::function<void(const Result&)>; |
|
}; |
|
|
|
/// connect_to_updates connects to incoming updates. |
|
virtual void connect_to_updates(const ConnectToUpdates::Callback& cb) = 0; |
|
|
|
protected: |
|
Client() = default; |
|
}; |
|
|
|
} // namespace monitor |
|
} // namespace airmap |
|
|
|
/// @example monitor/client.cpp |
|
/// Illustrates how to use airmap::monitor::Client to connect |
|
/// to an AirMap monitor instance. |
|
|
|
#endif // AIRMAP_MONITOR_CLIENT_H_
|