From 455682f3a5c09f76b120d1e9e253a5ddf8aacdbd Mon Sep 17 00:00:00 2001 From: MayaTheShy Date: Sat, 8 Nov 2025 17:38:34 -0500 Subject: [PATCH] feat: implement OverteNetworkClient class for domain connectivity --- src/OverteNetworkClient.hpp | 65 +++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/OverteNetworkClient.hpp diff --git a/src/OverteNetworkClient.hpp b/src/OverteNetworkClient.hpp new file mode 100644 index 0000000..e009783 --- /dev/null +++ b/src/OverteNetworkClient.hpp @@ -0,0 +1,65 @@ +// OverteNetworkClient.hpp +#pragma once + +#ifdef HAVE_OVERTE_NETWORKING + +#include +#include +#include +#include +#include + +// Forward declarations to avoid including full Overte headers here +class DomainHandler; +class NodeList; +class Node; +class NLPacket; + +namespace OverteNetworking { + +class NetworkClient : public QObject { + Q_OBJECT + +public: + NetworkClient(); + ~NetworkClient(); + + // Connect to domain server + bool connectToDomain(const QString& domainURL, + const QString& username = QString(), + const QString& password = QString()); + + // Disconnect from domain + void disconnect(); + + // Check if connected + bool isConnected() const; + + // Process network events (call from main loop) + void processEvents(); + + // Callback for when entities are received + using EntityCallback = std::function; + void setEntityCallback(EntityCallback callback); + +private slots: + void onDomainChanged(const QUrl& domainURL); + void onDomainConnectionRefused(const QString& reasonMessage, int reasonCode); + void onConnectedToDomain(const QString& hostname); + void onNodeAdded(SharedNodePointer node); + void onNodeActivated(SharedNodePointer node); + +private: + void setupDomainHandler(); + void setupNodeList(); + void handleEntityServerPacket(QSharedPointer message); + + std::unique_ptr m_domainHandler; + QSharedPointer m_nodeList; + EntityCallback m_entityCallback; + bool m_connected{false}; +}; + +} // namespace OverteNetworking + +#endif // HAVE_OVERTE_NETWORKING