#pragma once #include "item-selection-helpers.hpp" #include "websocket-helpers.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include namespace advss { class ConnectionSelection; class ConnectionSettingsDialog; class Connection : public Item { public: Connection(bool useCustomURI, std::string customURI, std::string name, std::string address, uint64_t port, std::string pass, bool connectOnStart, bool reconnect, int reconnectDelay, bool useOBSWebsocketProtocol); Connection() = default; Connection(const Connection &); Connection &operator=(const Connection &); ~Connection(); static std::shared_ptr Create() { return std::make_shared(); } void Reconnect(); void SendMsg(const std::string &msg); void Load(obs_data_t *obj); void Save(obs_data_t *obj) const; std::string GetName() const { return _name; } WebsocketMessageBuffer RegisterForEvents(); bool IsUsingOBSProtocol() const { return _useOBSWSProtocol; } private: void UseOBSWebsocketProtocol(bool); std::string GetURI(); bool _useCustomURI = false; std::string _customURI = "ws://localhost:4455"; std::string _address = "localhost"; uint64_t _port = 4455; std::string _password = "password"; bool _connectOnStart = true; bool _reconnect = true; int _reconnectDelay = 3; bool _useOBSWSProtocol = true; WSConnection _client; friend ConnectionSelection; friend ConnectionSettingsDialog; }; Connection *GetConnectionByName(const QString &); Connection *GetConnectionByName(const std::string &); std::weak_ptr GetWeakConnectionByName(const std::string &name); std::weak_ptr GetWeakConnectionByQString(const QString &name); std::string GetWeakConnectionName(std::weak_ptr); std::deque> &GetConnections(); class ConnectionSettingsDialog : public ItemSettingsDialog { Q_OBJECT public: ConnectionSettingsDialog(QWidget *parent, const Connection &); static bool AskForSettings(QWidget *parent, Connection &settings); private slots: void UseCustomURIChanged(int); void ProtocolChanged(int); void ReconnectChanged(int); void ShowPassword(); void HidePassword(); void SetStatus(); void TestConnection(); private: QCheckBox *_useCustomURI; QLineEdit *_customUri; QLineEdit *_address; QSpinBox *_port; QLineEdit *_password; QPushButton *_showPassword; QCheckBox *_connectOnStart; QCheckBox *_reconnect; QSpinBox *_reconnectDelay; QCheckBox *_useOBSWSProtocol; QPushButton *_test; QLabel *_status; QGridLayout *_layout; QTimer _statusTimer; WSConnection _testConnection; int _customURIRow = -1; int _addressRow = -1; int _portRow = -1; }; class ConnectionSelection : public ItemSelection { Q_OBJECT public: ConnectionSelection(QWidget *parent = 0); void SetConnection(const std::string &); void SetConnection(const std::weak_ptr &); }; } // namespace advss