File indexing completed on 2024-05-12 05:39:52

0001 #ifndef CONNECTIONPROFILE_H
0002 #define CONNECTIONPROFILE_H
0003 
0004 #include <QObject>
0005 #include <QProperty>
0006 #include <QString>
0007 #include <optional>
0008 
0009 #include "network/network_type.h"
0010 #include "network_global.h"
0011 
0012 typedef std::function<void(void)> StdFunc;
0013 /**
0014  * @brief The ConnectionProfile class stores any data about the connection: Mode (client or server) or role (GM or
0015  * Player)
0016  */
0017 class NETWORK_EXPORT ConnectionProfile : public QObject
0018 {
0019     Q_OBJECT
0020     Q_PROPERTY(bool isServer READ isServer WRITE setServerMode NOTIFY serverChanged)
0021     Q_PROPERTY(QString address READ address WRITE setAddress NOTIFY addressChanged)
0022     Q_PROPERTY(int port READ port WRITE setPort NOTIFY portChanged)
0023     Q_PROPERTY(bool isGM READ isGM WRITE setGm NOTIFY gmChanged)
0024     Q_PROPERTY(QString title READ profileTitle WRITE setProfileTitle NOTIFY titleChanged)
0025     Q_PROPERTY(QString campaignPath READ campaignPath WRITE setCampaignPath NOTIFY campaignPathChanged)
0026     Q_PROPERTY(QColor playerColor READ playerColor WRITE setPlayerColor NOTIFY playerColorChanged)
0027     Q_PROPERTY(QString playerName READ playerName WRITE setPlayerName NOTIFY playerNameChanged)
0028     Q_PROPERTY(QString playerId READ playerId WRITE setPlayerId NOTIFY playerIdChanged)
0029     Q_PROPERTY(QByteArray playerAvatar READ playerAvatar WRITE setPlayerAvatar NOTIFY playerAvatarChanged)
0030 
0031     Q_PROPERTY(bool valid READ valid NOTIFY validChanged)
0032     Q_PROPERTY(bool connectionInfoValid READ connectionInfoValid NOTIFY connectionInfoValidChanged)
0033     Q_PROPERTY(bool playerInfoValid READ playerInfoValid WRITE setPlayerInfoValid NOTIFY playerInfoValidChanged)
0034     Q_PROPERTY(bool campaignInfoValid READ campaignInfoValid WRITE setCampaignInfoValid NOTIFY campaignInfoValidChanged)
0035     Q_PROPERTY(bool charactersValid READ charactersValid WRITE setCharactersValid NOTIFY charactersValidChanged)
0036 public:
0037     ConnectionProfile();
0038 
0039     virtual ~ConnectionProfile();
0040     QString profileTitle() const;
0041     QString playerName() const;
0042     QColor playerColor() const;
0043     QByteArray playerAvatar() const;
0044     QString playerId() const;
0045     QString address() const;
0046     quint16 port() const;
0047     bool isServer() const;
0048     bool isGM() const;
0049     QString campaignPath() const;
0050     QByteArray password() const;
0051 
0052     bool valid() const;
0053     bool connectionInfoValid() const;
0054     bool playerInfoValid() const;
0055     bool charactersValid() const;
0056     bool campaignInfoValid() const;
0057 
0058     const std::vector<connection::CharacterData>& characters();
0059     void setCharacters(const std::vector<connection::CharacterData>& characters);
0060     connection::CharacterData& character(int i);
0061     void addCharacter(const connection::CharacterData& data);
0062     void removeCharacter(int index);
0063     int characterCount();
0064     void clearCharacter();
0065     void cloneProfile(const ConnectionProfile* src);
0066 
0067 public slots:
0068     void setProfileTitle(const QString&);
0069     void setPlayerColor(const QColor&);
0070     void setPlayerAvatar(const QByteArray&);
0071     void setPlayerName(const QString&);
0072     void setAddress(const QString&);
0073     void setPlayerId(const QString& playerId);
0074     void setPort(quint16);
0075     void setServerMode(bool);
0076     void setGm(bool);
0077     void setCampaignPath(const QString& id);
0078     void editPassword(const QByteArray& password);
0079     void setHash(const QByteArray& password);
0080     void setCharactersValid(bool val);
0081     void setCampaignInfoValid(bool val);
0082     void setPlayerInfoValid(bool b);
0083 
0084     void characterHasChanged();
0085 
0086 signals:
0087     void serverChanged();
0088     void addressChanged();
0089     void portChanged();
0090     void gmChanged();
0091     void campaignPathChanged();
0092     void titleChanged();
0093     void playerColorChanged();
0094     void playerNameChanged();
0095     void playerIdChanged();
0096     void playerAvatarChanged();
0097     void characterCountChanged();
0098     void passwordChanged();
0099     void validChanged();
0100     void characterChanged();
0101 
0102     void playerInfoValidChanged();
0103     void charactersValidChanged();
0104     void campaignInfoValidChanged();
0105     void connectionInfoValidChanged();
0106 
0107 private slots:
0108     void setValid(bool b);
0109     void setConnectionInfoValid(bool b);
0110 
0111 private:
0112     // Profile data
0113     QString m_title; ///< @brief defines the name of the profile. It can be what ever users want.
0114 
0115     // Player data
0116     QString m_playerName;
0117     QColor m_playerColor;
0118     QByteArray m_playerAvatar;
0119     QString m_playerId;
0120     bool m_isGM= true;
0121 
0122     // Connection data
0123     bool m_server= false;
0124     quint16 m_port= 6660;
0125     QString m_address;
0126     QByteArray m_password;
0127 
0128     // campaign dir
0129     QString m_campaignDir;
0130 
0131     // Character info
0132     std::vector<connection::CharacterData> m_characters;
0133 
0134     bool m_valid{};
0135     bool m_validConnectionInfo{};
0136     bool m_validPlayerInfo{};
0137     bool m_validCharacter{};
0138     bool m_validCampaign{};
0139 };
0140 
0141 #endif // CONNECTIONPROFILE_H