qmlfrontend/net_session.h
changeset 14915 a3ad06ac390e
child 15039 a4a058dcbbd6
equal deleted inserted replaced
14914:9ab78e08a34c 14915:a3ad06ac390e
       
     1 #ifndef NET_SESSION_H
       
     2 #define NET_SESSION_H
       
     3 
       
     4 #include <QSharedPointer>
       
     5 #include <QSslSocket>
       
     6 #include <QStringList>
       
     7 #include <QUrl>
       
     8 
       
     9 class NetSession : public QObject {
       
    10   Q_OBJECT
       
    11 
       
    12   // clang-format off
       
    13   Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged)
       
    14   Q_PROPERTY(QAbstractSocket::SocketState state READ state NOTIFY stateChanged)
       
    15   Q_PROPERTY(QString nickname READ nickname WRITE setNickname NOTIFY nicknameChanged)
       
    16   Q_PROPERTY(QString password READ password WRITE setPassword NOTIFY passwordChanged)
       
    17   Q_PROPERTY(SessionState sessionState READ sessionState NOTIFY sessionStateChanged)
       
    18   // clang-format on
       
    19 
       
    20  public:
       
    21   enum SessionState { NotConnected, Login, Lobby, Room, Game };
       
    22   Q_ENUMS(SessionState)
       
    23 
       
    24   explicit NetSession(QObject *parent = nullptr);
       
    25 
       
    26   QUrl url() const;
       
    27   QAbstractSocket::SocketState state() const;
       
    28 
       
    29   Q_INVOKABLE void open();
       
    30 
       
    31   QString nickname() const;
       
    32   QString password() const;
       
    33   SessionState sessionState() const;
       
    34 
       
    35  public slots:
       
    36   void setUrl(const QUrl &url);
       
    37   void setNickname(const QString &nickname);
       
    38   void setPassword(const QString &password);
       
    39   void close();
       
    40 
       
    41  signals:
       
    42   void urlChanged(const QUrl url);
       
    43   void stateChanged(QAbstractSocket::SocketState state);
       
    44   void nicknameChanged(const QString &nickname);
       
    45   void passwordChanged(const QString &password);
       
    46   void sessionStateChanged(SessionState sessionState);
       
    47 
       
    48  private slots:
       
    49   void onReadyRead();
       
    50   void parseNetMessage(const QStringList &message);
       
    51   void handleConnected(const QStringList &parameters);
       
    52   void handlePing(const QStringList &parameters);
       
    53   void handleBye(const QStringList &parameters);
       
    54   void handleUnknownCommand(const QStringList &parameters);
       
    55   void send(const QString &message);
       
    56   void send(const QString &message, const QString &param);
       
    57   void send(const QString &message, const QStringList &parameters);
       
    58   void send(const QStringList &message);
       
    59   void setSessionState(SessionState sessionState);
       
    60 
       
    61  private:
       
    62   QUrl m_url;
       
    63   QSharedPointer<QTcpSocket> m_socket;
       
    64   QString m_nickname;
       
    65   QString m_password;
       
    66   QStringList m_buffer;
       
    67   SessionState m_sessionState;
       
    68 };
       
    69 
       
    70 #endif  // NET_SESSION_H