20#ifndef ORES_QT_CLIENT_MANAGER_HPP
21#define ORES_QT_CLIENT_MANAGER_HPP
30#include <boost/asio/io_context.hpp>
31#include <boost/asio/executor_work_guard.hpp>
32#include <boost/uuid/uuid.hpp>
35#include "ores.comms/net/client.hpp"
36#include "ores.comms/net/client_session.hpp"
37#include "ores.comms/service/remote_event_adapter.hpp"
38#include "ores.comms/recording/session_recorder.hpp"
39#include "ores.comms/service/telemetry_streaming_service.hpp"
40#include "ores.eventing/service/event_bus.hpp"
41#include "ores.logging/make_logger.hpp"
42#include "ores.iam/domain/session.hpp"
60 QString error_message;
61 bool password_reset_required =
false;
71 QString error_message;
79 std::vector<iam::domain::session> sessions;
80 std::uint32_t total_count = 0;
94 inline static std::string_view logger_name =
95 "ores.qt.client_manager";
97 [[nodiscard]]
static auto& lg() {
99 static auto instance = make_logger(logger_name);
104 explicit ClientManager(std::shared_ptr<eventing::service::event_bus> event_bus,
105 QObject* parent =
nullptr);
135 LoginResult login(
const std::string& username,
const std::string& password);
150 const std::string& host,
152 const std::string& username,
153 const std::string& password);
169 const std::string& host,
171 const std::string& username,
172 const std::string& password);
189 const std::string& host,
191 const std::string& username,
192 const std::string& email,
193 const std::string& password);
222 [[deprecated(
"Permission checks are now server-side via RBAC")]]
269 return connected_host_ +
":" + std::to_string(connected_port_);
281 return connected_host_;
293 return connected_port_;
303 std::expected<comms::messaging::frame, ores::utility::serialization::error_code>
315 template <
typename RequestType>
330 template <
typename RequestType>
345 template <
typename RequestType>
368 std::uint32_t limit = 100,
369 std::uint32_t offset = 0);
381 std::shared_ptr<comms::net::client>
getClient()
const {
return client_; }
387 return io_context_->get_executor();
419 supported_compression_ = compression;
467 recording_directory_ = directory;
474 return recording_directory_;
527 void connectionError(
const QString& message);
537 const QStringList& entityIds);
567 std::unique_ptr<boost::asio::io_context> io_context_;
568 std::unique_ptr<boost::asio::executor_work_guard<
569 boost::asio::io_context::executor_type>> work_guard_;
570 std::unique_ptr<std::thread> io_thread_;
573 std::shared_ptr<comms::net::client> client_;
579 std::shared_ptr<eventing::service::event_bus> event_bus_;
582 std::string connected_host_;
583 std::uint16_t connected_port_{0};
586 std::uint8_t supported_compression_{0x07};
589 std::filesystem::path recording_directory_;
592 bool recording_enabled_{
false};
595 std::unique_ptr<comms::service::telemetry_streaming_service> telemetry_streaming_;
598 std::optional<comms::service::telemetry_streaming_options> pending_streaming_options_;
601 bool streaming_enabled_{
false};
605 std::atomic<bool> user_disconnecting_{
false};
610 std::string stored_username_;
611 std::string stored_password_;
Implements logging infrastructure for ORE Studio.
Definition boost_severity.hpp:28
Qt-based graphical user interface for ORE Studio.
Definition AboutDialog.hpp:35
Complete frame with header and payload.
Definition frame.hpp:77
Client-side session manager providing auth-aware request handling.
Definition client_session.hpp:125
std::expected< ResponseType, session_error > process_admin_request(RequestType request)
Process a request that requires admin privileges.
Definition client_session.hpp:392
std::optional< boost::uuids::uuid > account_id() const noexcept
Get the account ID if logged in.
Definition client_session.hpp:265
std::string username() const noexcept
Get the current username if logged in.
Definition client_session.hpp:240
bool is_logged_in() const noexcept
Check if logged in.
Definition client_session.hpp:206
std::string email() const noexcept
Get the current email if logged in.
Definition client_session.hpp:247
std::expected< ResponseType, session_error > process_authenticated_request(RequestType request)
Process a request that requires authentication.
Definition client_session.hpp:362
std::expected< ResponseType, session_error > process_request(RequestType request)
Process a request that does not require authentication.
Definition client_session.hpp:287
void set_email(const std::string &email)
Set the current email.
Definition client_session.hpp:256
Configuration options for telemetry streaming.
Definition telemetry_streaming_service.hpp:49
Lightweight bundle info for bootstrap wizard.
Definition ClientManager.hpp:49
Result of a login attempt.
Definition ClientManager.hpp:58
bool bootstrap_mode
True if system is in bootstrap mode (no admin exists)
Definition ClientManager.hpp:62
std::vector< BootstrapBundleInfo > available_bundles
Bundles available when in bootstrap mode.
Definition ClientManager.hpp:63
Result of a signup attempt.
Definition ClientManager.hpp:69
Result of a session list request.
Definition ClientManager.hpp:78
Manages the lifecycle of the network client and IO context.
Definition ClientManager.hpp:90
bool logout()
Logout the current user without disconnecting.
Definition ClientManager.cpp:741
void streamingStopped()
Emitted when telemetry streaming stops.
LoginResult login(const std::string &username, const std::string &password)
Login on an already connected client.
Definition ClientManager.cpp:294
void recordingStarted(const QString &filePath)
Emitted when session recording starts.
void unsubscribeFromEvent(const std::string &eventType)
Unsubscribe from server-push notifications for an event type.
Definition ClientManager.cpp:843
std::string serverAddress() const
Get the server address string.
Definition ClientManager.hpp:265
void enableStreaming(const comms::service::telemetry_streaming_options &options)
Enable telemetry streaming to the server.
Definition ClientManager.cpp:1056
std::string currentUsername() const
Get the current logged-in user's username.
Definition ClientManager.hpp:237
std::filesystem::path recordingFilePath() const
Get the path to the current recording file.
Definition ClientManager.cpp:1042
LoginResult connect(const std::string &host, std::uint16_t port)
Connect to the server without logging in.
Definition ClientManager.cpp:81
void streamingStarted()
Emitted when telemetry streaming starts.
bool isRecording() const
Check if session recording is currently active.
Definition ClientManager.cpp:1038
void setRecordingDirectory(const std::filesystem::path &directory)
Set the recording output directory.
Definition ClientManager.hpp:466
comms::net::client_session & session()
Get the underlying client session.
Definition ClientManager.hpp:356
std::uint16_t connectedPort() const
Get the connected server port.
Definition ClientManager.hpp:289
void disableRecording()
Disable session recording.
Definition ClientManager.cpp:1018
void recordingStopped()
Emitted when session recording stops.
std::optional< SessionListResult > listSessions(const boost::uuids::uuid &accountId, std::uint32_t limit=100, std::uint32_t offset=0)
List sessions for an account.
Definition ClientManager.cpp:863
LoginResult connectAndLogin(const std::string &host, std::uint16_t port, const std::string &username, const std::string &password)
Connect to the server and perform login.
Definition ClientManager.cpp:462
auto process_request(RequestType request)
Process a request that does not require authentication.
Definition ClientManager.hpp:317
void subscribeToEvent(const std::string &eventType)
Subscribe to server-push notifications for an event type.
Definition ClientManager.cpp:823
std::expected< comms::messaging::frame, ores::utility::serialization::error_code > sendRequest(comms::messaging::frame request)
Send a request if connected.
Definition ClientManager.cpp:816
bool isConnected() const
Check if currently connected.
Definition ClientManager.cpp:806
std::filesystem::path recordingDirectory() const
Get the current recording output directory.
Definition ClientManager.hpp:473
std::shared_ptr< comms::net::client > getClient() const
Get the current client (internal use only).
Definition ClientManager.hpp:381
void disconnect()
Logout the current user and disconnect from the server.
Definition ClientManager.cpp:695
bool isStreaming() const
Check if telemetry streaming is currently active.
Definition ClientManager.cpp:1113
void disableStreaming()
Disable telemetry streaming.
Definition ClientManager.cpp:1094
std::string connectedHost() const
Get the connected server hostname.
Definition ClientManager.hpp:277
SignupResult signup(const std::string &host, std::uint16_t port, const std::string &username, const std::string &email, const std::string &password)
Connect to the server and attempt signup.
Definition ClientManager.cpp:575
bool isLoggedIn() const
Check if currently logged in.
Definition ClientManager.hpp:230
std::string currentEmail() const
Get the current logged-in user's email.
Definition ClientManager.hpp:244
void setCurrentEmail(const std::string &email)
Set the current logged-in user's email.
Definition ClientManager.hpp:251
auto process_authenticated_request(RequestType request)
Process a request that requires authentication.
Definition ClientManager.hpp:332
std::optional< boost::uuids::uuid > accountId() const
Get the account ID if logged in.
Definition ClientManager.hpp:258
bool isAdmin() const
Check if the logged-in user has admin privileges.
Definition ClientManager.cpp:810
std::uint64_t streamingTotalSent() const
Get total telemetry records sent successfully.
Definition ClientManager.cpp:1121
boost::asio::any_io_executor getExecutor()
Get the IO context executor.
Definition ClientManager.hpp:386
std::size_t streamingPendingCount() const
Get the number of pending telemetry records.
Definition ClientManager.cpp:1117
LoginResult testConnection(const std::string &host, std::uint16_t port, const std::string &username, const std::string &password)
Test a connection without affecting main client state.
Definition ClientManager.cpp:485
auto process_admin_request(RequestType request)
Process a request that requires admin privileges.
Definition ClientManager.hpp:347
bool enableRecording(const std::filesystem::path &outputDirectory)
Enable session recording to the specified directory.
Definition ClientManager.cpp:992
std::uint64_t streamingTotalDropped() const
Get total telemetry records dropped.
Definition ClientManager.cpp:1125
void notificationReceived(const QString &eventType, const QDateTime ×tamp, const QStringList &entityIds)
Emitted when a notification is received from the server.
std::optional< std::vector< iam::domain::session > > getActiveSessions()
Get active sessions for the current user.
Definition ClientManager.cpp:931
void setSupportedCompression(std::uint8_t compression)
Set the supported compression bitmask for client connections.
Definition ClientManager.hpp:418
Concept for types that have message_traits specialization.
Definition message_traits.hpp:82