diff -r 9ab78e08a34c -r a3ad06ac390e qmlfrontend/net_session.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/qmlfrontend/net_session.h Sat May 11 22:39:55 2019 +0200 @@ -0,0 +1,70 @@ +#ifndef NET_SESSION_H +#define NET_SESSION_H + +#include +#include +#include +#include + +class NetSession : public QObject { + Q_OBJECT + + // clang-format off + Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged) + Q_PROPERTY(QAbstractSocket::SocketState state READ state NOTIFY stateChanged) + Q_PROPERTY(QString nickname READ nickname WRITE setNickname NOTIFY nicknameChanged) + Q_PROPERTY(QString password READ password WRITE setPassword NOTIFY passwordChanged) + Q_PROPERTY(SessionState sessionState READ sessionState NOTIFY sessionStateChanged) + // clang-format on + + public: + enum SessionState { NotConnected, Login, Lobby, Room, Game }; + Q_ENUMS(SessionState) + + explicit NetSession(QObject *parent = nullptr); + + QUrl url() const; + QAbstractSocket::SocketState state() const; + + Q_INVOKABLE void open(); + + QString nickname() const; + QString password() const; + SessionState sessionState() const; + + public slots: + void setUrl(const QUrl &url); + void setNickname(const QString &nickname); + void setPassword(const QString &password); + void close(); + + signals: + void urlChanged(const QUrl url); + void stateChanged(QAbstractSocket::SocketState state); + void nicknameChanged(const QString &nickname); + void passwordChanged(const QString &password); + void sessionStateChanged(SessionState sessionState); + + private slots: + void onReadyRead(); + void parseNetMessage(const QStringList &message); + void handleConnected(const QStringList ¶meters); + void handlePing(const QStringList ¶meters); + void handleBye(const QStringList ¶meters); + void handleUnknownCommand(const QStringList ¶meters); + void send(const QString &message); + void send(const QString &message, const QString ¶m); + void send(const QString &message, const QStringList ¶meters); + void send(const QStringList &message); + void setSessionState(SessionState sessionState); + + private: + QUrl m_url; + QSharedPointer m_socket; + QString m_nickname; + QString m_password; + QStringList m_buffer; + SessionState m_sessionState; +}; + +#endif // NET_SESSION_H