#pragma once #include "MessageBoard.hpp" #include "Chatbar.hpp" #include "User.hpp" #include "Channel.hpp" #include "types.hpp" #include #include #include #include namespace odhtdb { class Database; } namespace dchat { enum class ChannelDataType : u8 { MESSAGE, NICKNAME_CHANGE }; class Channel { public: Channel(const std::string &name, const odhtdb::DatabaseNode &databaseNodeInfo = odhtdb::DatabaseNode(), User *localUser = nullptr, odhtdb::Database *database = nullptr); virtual ~Channel(); Channel(const Channel& other) = delete; Channel& operator = (const Channel &other) = delete; User* getLocalUser(); SystemUser* getSystemUser(); MessageBoard& getMessageBoard(); const std::string& getName() const; const std::vector getUsers() const; OnlineUser* getUserByPublicKey(const odhtdb::Signature::PublicKey &publicKey); const odhtdb::DatabaseNode& getNodeInfo() const; // If timestamp is 0, then current time is used void addLocalMessage(const std::string &msg, User *owner, u64 timestampSeconds = 0); void addMessage(const std::string &msg); void addUserLocally(User *user); bool addUser(const odhtdb::Signature::PublicKey &userId, const std::string &groupId); void replaceLocalUser(User *newLocalUser); void changeNick(const std::string &newNick); void processEvent(const sf::Event &event); void draw(sf::RenderWindow &window, Cache &cache); static void setCurrent(Channel *channel); static Channel* getCurrent(); protected: odhtdb::Database *database; odhtdb::DatabaseNode databaseNodeInfo; std::string name; MessageBoard messageBoard; Chatbar chatbar; User *localUser; SystemUser systemUser; std::vector users; odhtdb::Signature::MapPublicKey publicKeyOnlineUsersMap; }; }