lobby_moc.h 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. #ifndef LOBBY_MOC_H
  2. #define LOBBY_MOC_H
  3. #include <QWidget>
  4. #include <QTcpSocket>
  5. #include <QAbstractSocket>
  6. class ProtocolError: public std::runtime_error
  7. {
  8. public:
  9. ProtocolError(const char * w): std::runtime_error(w) {}
  10. };
  11. enum ProtocolConsts
  12. {
  13. //client consts
  14. GREETING, USERNAME, MESSAGE, VERSION, CREATE, JOIN, LEAVE, READY,
  15. //server consts
  16. SESSIONS, CREATED, JOINED, KICKED, ERROR, CHAT, START, STATUS, HOST
  17. };
  18. const QMap<ProtocolConsts, QString> ProtocolStrings
  19. {
  20. //client consts
  21. {GREETING, "<GREETINGS>%1<VER>%2"},
  22. {USERNAME, "<USER>%1"},
  23. {MESSAGE, "<MSG>%1"},
  24. {CREATE, "<NEW>%1<PSWD>%2<COUNT>%3"},
  25. {JOIN, "<JOIN>%1<PSWD>%2"},
  26. {LEAVE, "<LEAVE>%1"}, //session
  27. {READY, "<READY>%1"}, //session
  28. //server consts
  29. {CREATED, "CREATED"},
  30. {SESSIONS, "SESSIONS"}, //amount:session_name:joined_players:total_players:is_protected
  31. {JOINED, "JOIN"}, //session_name:username
  32. {KICKED, "KICK"}, //session_name:username
  33. {START, "START"}, //session_name:uuid
  34. {HOST, "HOST"}, //host_uuid:players_count
  35. {STATUS, "STATUS"}, //joined_players:player_name:is_ready
  36. {ERROR, "ERROR"},
  37. {CHAT, "MSG"} //username:message
  38. };
  39. class ServerCommand
  40. {
  41. public:
  42. ServerCommand(ProtocolConsts, const QStringList & arguments);
  43. const ProtocolConsts command;
  44. const QStringList arguments;
  45. };
  46. class SocketLobby : public QObject
  47. {
  48. Q_OBJECT
  49. public:
  50. explicit SocketLobby(QObject *parent = 0);
  51. void connectServer(const QString & host, int port, const QString & username);
  52. void disconnectServer();
  53. void requestNewSession(const QString & session, int totalPlayers, const QString & pswd);
  54. void requestJoinSession(const QString & session, const QString & pswd);
  55. void requestLeaveSession(const QString & session);
  56. void requestReadySession(const QString & session);
  57. void send(const QString &);
  58. signals:
  59. void text(QString);
  60. void receive(QString);
  61. void disconnect();
  62. public slots:
  63. void connected();
  64. void disconnected();
  65. void bytesWritten(qint64 bytes);
  66. void readyRead();
  67. private:
  68. QTcpSocket *socket;
  69. bool isConnected = false;
  70. QString username;
  71. };
  72. namespace Ui {
  73. class Lobby;
  74. }
  75. class Lobby : public QWidget
  76. {
  77. Q_OBJECT
  78. public:
  79. explicit Lobby(QWidget *parent = nullptr);
  80. ~Lobby();
  81. private slots:
  82. void on_messageEdit_returnPressed();
  83. void chatMessage(QString);
  84. void dispatchMessage(QString);
  85. void serverCommand(const ServerCommand &);
  86. void on_connectButton_toggled(bool checked);
  87. void on_newButton_clicked();
  88. void on_joinButton_clicked();
  89. void on_buttonLeave_clicked();
  90. void on_buttonReady_clicked();
  91. void onDisconnected();
  92. private:
  93. Ui::Lobby *ui;
  94. SocketLobby socketLobby;
  95. QString hostSession;
  96. QString session;
  97. QString username;
  98. private:
  99. void protocolAssert(bool);
  100. };
  101. #endif // LOBBY_MOC_H