#ifndef SERVICE_H #define SERVICE_H #include #include #include #include #include #include #include #include #include #include #include class Service : public QObject { Q_OBJECT private: Service(uint64_t p_id, const QString& p_name, const QString& p_address, const QString& p_port, const QString& p_login, const QString& p_password, const QString& p_logFile, const QString& p_command ); public: ~Service(); static Service* create(const QMap& params); static Service* fromSerialized(const QMap& params); QVariant saveState() const; void registerContollers(W::Dispatcher* dp); void unregisterControllers(W::Dispatcher* dp); QMap getData() const; void passNewData(const QMap data); private: enum State { Disconnected, Connecting, Echo, Listening, Connected, Disconnecting }; enum AppState { Unknown, Checking, Dead, Launching, WaitingWebSocket, Active, Stopping }; W::Socket* socket; W::SshSocket* dataSsh; W::SshSocket* commandSsh; C::Attributes* attributes; C::Vocabulary* commands; static uint64_t lastId; QString login; QString password; QString logFile; QString command; std::list psResults; QString pid; State state; AppState appState; void requestPid(); void connectWebsocket(); public: QString name; QString address; QString port; const uint64_t id; signals: void serviceMessage(const QString& msg); void connecting(); void connected(); void disconnecting(); void disconnected(); void launching(); void launched(); void stopping(); void stopped(); void log(const QString& data); void attributeChanged(const QString& name, const QString& value); void addCommand(const QString& name, const QMap& arguments); void removeCommand(const QString& name); void clearCommands(); void changeName(const QString& name); public slots: void connect(); void disconnect(); void launch(); void stop(); void launchCommand(const QString& name, const QMap& args); private slots: void onDataSshOpened(); void onCommandSshOpened(); void onSshClosed(); void onDataSshData(const QString& data); void onCommandSshData(const QString& data); void onSshError(W::SshSocket::Error errCode, const QString& msg); void onDataSshFinished(); void onCommandSshFinished(); void onSocketConnected(); void onSocketDisconnected(); void onSocketError(W::Socket::SocketError err, const QString& msg); void onAttrChange(const W::String& key, const W::Object& value); void onAddCommand(const W::String& key, const W::Object& value); void onRemoveCommand(const W::String& key); void onClearCommands(); }; #endif // SERVICE_H