#pragma once #include "tcpserver_export.h" #include #include #include class QAbstractSocket; class QByteArray; class WorkerBase; class TCPSERVER_EXPORT CommandInterface : public QObject { Q_OBJECT public: explicit CommandInterface(unsigned short port, const QByteArray& command = QByteArray()); virtual ~CommandInterface(); void handleCommand(const QVector& args); virtual void newPlainData(); virtual QString help() const = 0; QByteArray command() const; void setAutoWriteEOL(bool newAutoWriteEOL); bool autoWriteEOL() const; bool errorOccured() const; static void setDefaultSuccessMessage(const QString& msg); static void setDefaultErrorMessage(const QString& msg); template static CommandInterface* factory(unsigned short port) { return new T(port); } virtual void aboutToDestroy() {} protected: virtual void handleCommandInternal(const QVector& args) = 0; void setWriteTimeout(int iMS); void writeData(const QByteArray& payload); void writeData(const char* payload); void writeData(const QString& payload); void writeData(const QStringList& payload); void writeData(const QList& payload); void writeOk(const QString& additionalMsg = QString()); void writeError(const QString& additionalMsg = QString()); void writeEOL(); QByteArray quote(const QByteArray& payload); QAbstractSocket* socket(); void setSocket(QAbstractSocket* socket); WorkerBase* workerBase(); void setWorkerBase(WorkerBase* wb); void conversionError(const QByteArray& arg, const QByteArray& type); bool getValue(const QByteArray& arg, bool& value); bool getValue(const QByteArray& arg, long& value); bool getValue(const QByteArray& arg, unsigned long& value); bool getValue(const QByteArray& arg, int& value); bool getValue(const QByteArray& arg, unsigned int& value); bool getValue(const QByteArray& arg, float& value); bool getValue(const QByteArray& arg, double& value); unsigned short port() const; void closeConnection(); bool socketIsOpen() const; private: friend class WorkerBase; class Private; Private* const d; };