client.hpp 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include <QDialog>
  2. #include <QComboBox>
  3. #include <QPushButton>
  4. #include <QMessageBox>
  5. #include <QLineEdit>
  6. #include <QTimer>
  7. #include <QLabel>
  8. #include <QString>
  9. #include <QVector>
  10. #include <QThread>
  11. #include <QMetaType>
  12. #include <thread>
  13. #include <string>
  14. #include <utility>
  15. static constexpr int MESSAGE_UPDATE_TYPE = 1;
  16. static constexpr int COMMANDS_UPDATE_TYPE = 2;
  17. typedef std::map<int, std::string> CommandMap;
  18. typedef std::map<int, std::vector<std::string>> CommandArgMap;
  19. typedef QVector<QString> StringVec;
  20. Q_DECLARE_METATYPE(StringVec)
  21. class Client : public QDialog
  22. {
  23. Q_OBJECT
  24. QThread workerThread;
  25. public:
  26. class MessageHandler {
  27. public:
  28. MessageHandler(std::function<void()> cb) : m_cb(cb) {}
  29. void operator()() { m_cb(); }
  30. private:
  31. std::function<void()> m_cb;
  32. };
  33. Client(QWidget *parent = nullptr);
  34. Client(QWidget *parent, int count, char** arguments);
  35. ~Client();
  36. void start();
  37. void closeConnection();
  38. void execute();
  39. MessageHandler createMessageHandler(std::function<void()> cb);
  40. public slots:
  41. void sendMessage(const QString& s);
  42. void sendEncoded(std::string message);
  43. void sendFileEncoded(QByteArray bytes);
  44. void setSelectedApp(std::vector<QString> app_names);
  45. void sendFile(QByteArray bytes);
  46. signals:
  47. void messageReceived(int t, QString s,QVector<QString> args);
  48. private:
  49. void handleMessages();
  50. void sendPackets(uint8_t* data, int size);
  51. int argc;
  52. char** argv;
  53. int m_client_socket_fd;
  54. bool executing;
  55. CommandMap m_commands;
  56. CommandArgMap m_command_arg_map;
  57. std::vector<int> selected_commands;
  58. QByteArray outgoing_file;
  59. };