summaryrefslogtreecommitdiff
path: root/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h')
-rw-r--r--plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h144
1 files changed, 144 insertions, 0 deletions
diff --git a/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h
new file mode 100644
index 0000000..85acff9
--- /dev/null
+++ b/plugins/Listener/catchcopy-v0002/catchcopy-api-0002/ServerCatchcopy.h
@@ -0,0 +1,144 @@
+/** \file ServerCatchcopy.h
+\brief Define the server of catchcopy
+\author alpha_one_x86
+\licence GPL3, see the file COPYING */
+
+#ifndef SERVERCATCHCOPY_H
+#define SERVERCATCHCOPY_H
+
+#include <QObject>
+#include <QLocalSocket>
+#include <QLocalServer>
+#include <vector>
+#include <string>
+#include <QByteArray>
+#include <QTimer>
+
+/// \brief Define the server of catchcopy
+class ServerCatchcopy : public QObject
+{
+ Q_OBJECT
+ public:
+ ServerCatchcopy();
+ ~ServerCatchcopy();
+ /// \brief return if is listening
+ bool isListening() const;
+ /// \brief try listen
+ bool listen();
+ /// \brief try close the server
+ void close();
+ /// \brief get the error string on the QLocalServer
+ const std::string errorStringServer() const;
+ /// \brief get the general error string
+ const std::string errorString() const;
+ /// \brief set the name of the server
+ void setName(const std::string & name);
+ /// \brief get the name
+ std::string getName() const;
+ /// \brief to get a client list
+ std::vector<std::string> clientsList() const;
+ private:
+ std::string pathSocket;
+ std::string name;
+ std::string error_string;
+ QLocalServer server;
+ uint32_t idNextClient;
+ struct Client
+ {
+ uint32_t id;
+ QLocalSocket *socket;
+ QByteArray data;
+ bool haveData;
+ uint32_t dataSize;
+ bool firstProtocolReplied;
+ QList<uint32_t> queryNoReplied;
+ QTimer *detectTimeOut;
+ std::string name;
+ };
+ QList<Client> clientList;
+ struct LinkGlobalToLocalClient
+ {
+ uint32_t idClient;
+ uint32_t orderId;
+ uint32_t globalOrderId;
+ };
+ QList<LinkGlobalToLocalClient> LinkGlobalToLocalClientList;
+ enum inputReturnType{Ok,Replied,ExtensionWrong,WrongArgument,WrongArgumentListSize,UnknowOrder};
+ inputReturnType parseInputCurrentProtocol(const uint32_t &client,const uint32_t &orderId,const std::vector<std::string> &returnList);
+ bool clientIdFound(const uint32_t &id) const;
+ uint32_t nextOrderId;
+ QList<uint32_t> orderList;
+ uint32_t incrementOrderId();
+ void emitNewCopyWithoutDestination(const uint32_t &client,const uint32_t &orderId,const std::vector<std::string> &sources);
+ void emitNewCopy(const uint32_t &client,const uint32_t &orderId,const std::vector<std::string> &sources,const std::string &destination);
+ void emitNewMoveWithoutDestination(const uint32_t &client,const uint32_t &orderId,const std::vector<std::string> &sources);
+ void emitNewMove(const uint32_t &client,const uint32_t &orderId,const std::vector<std::string> &sources,const std::string &destination);
+ bool checkDataIntegrity(const QByteArray &data);
+ protected:
+ void parseInput(const uint32_t &client,const uint32_t &orderId,const std::vector<std::string> &returnList);
+ private slots:
+ void newConnection();
+ void connectionError(const QLocalSocket::LocalSocketError &error);
+ void disconnected();
+ void readyRead();
+ void checkTimeOut();
+ public slots:
+ /// \brief disconnect one client
+ void disconnectClient(const uint32_t &id);
+ /// \brief reply to a client with std::vector<std::string>
+ void reply(const uint32_t &client,const uint32_t &orderId,const uint32_t &returnCode,const std::vector<std::string> &returnList);
+ /// \brief reply to a client
+ void reply(const uint32_t &client,const uint32_t &orderId,const uint32_t &returnCode,const std::string &returnString);
+ //reply
+ /// \brief send if the protocol is supported
+ void protocolSupported(const uint32_t &client,const uint32_t &orderId,const bool &value);
+ /// \brief send incorrect arguement list size
+ void incorrectArgumentListSize(const uint32_t &client,const uint32_t &orderId);
+ /// \brief send incorrect arguement
+ void incorrectArgument(const uint32_t &client,const uint32_t &orderId);
+ /// \brief the client is registred
+ void clientRegistered(const uint32_t &client,const uint32_t &orderId);
+ /// \brief send the server name
+ void serverName(const uint32_t &client,const uint32_t &orderId,const std::string &name);
+ /// \brief send the copy is finished
+ void copyFinished(const uint32_t &client,const uint32_t &orderId,const bool &withError);
+ /// \brief send the copy is canceled
+ void copyCanceled(const uint32_t &client,const uint32_t &orderId);
+ /// \brief send the copy is finished by global is order
+ void copyFinished(const uint32_t &globalOrderId,const bool &withError);
+ /// \brief send copy cancel by global is order
+ void copyCanceled(const uint32_t &globalOrderId);
+ /// \brief send the unknow order
+ void unknowOrder(const uint32_t &client,const uint32_t &orderId);
+ signals:
+ /// \brief send connected client
+ void connectedClient(const uint32_t &id);
+ /// \brief send disconnect client
+ void disconnectedClient(const uint32_t &id);
+ /// \brief have new query
+ void newQuery(const uint32_t &client,const uint32_t &orderId,const std::vector<std::string> &returnList);
+ /// \brief have new error
+ void error(const std::string &error);
+ void communicationError(const std::string &error);
+ //query
+ /// \brief ask the protocol compatility
+ void askProtocolCompatibility(const uint32_t &client,const uint32_t &orderId,const std::string &version);
+ /// \brief ask protocol extension
+ void askProtocolExtension(const uint32_t &client,const uint32_t &orderId,const std::string &extension);
+ /// \brief ask protocol extension with version
+ void askProtocolExtension(const uint32_t &client,const uint32_t &orderId,const std::string &extension,const std::string &version);
+ /// \brief send the client name, without query id
+ void clientName(const uint32_t &client,const std::string &name);
+ /// \brief send the client have ask the server name
+ void askServerName(const uint32_t &client,const uint32_t &orderId);
+ /// \brief copy is send, by globalOrderId, without destination
+ void newCopyWithoutDestination(const uint32_t &globalOrderId,const std::vector<std::string> &sources);
+ /// \brief copy is send, by globalOrderId, with destination
+ void newCopy(const uint32_t &globalOrderId,const std::vector<std::string> &sources,const std::string &destination);
+ /// \brief move is send, by globalOrderId, without destination
+ void newMoveWithoutDestination(const uint32_t &globalOrderId,const std::vector<std::string> &sources);
+ /// \brief move is send, by globalOrderId, with destination
+ void newMove(const uint32_t &globalOrderId,const std::vector<std::string> &sources,const std::string &destination);
+};
+
+#endif // SERVERCATCHCOPY_H