aboutsummaryrefslogtreecommitdiff
path: root/include/dchat/Room.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/dchat/Room.hpp')
-rw-r--r--include/dchat/Room.hpp40
1 files changed, 37 insertions, 3 deletions
diff --git a/include/dchat/Room.hpp b/include/dchat/Room.hpp
index 5dd0e3f..a39f2f0 100644
--- a/include/dchat/Room.hpp
+++ b/include/dchat/Room.hpp
@@ -28,9 +28,17 @@ namespace dchat
DISABLE_COPY(Room)
public:
Room(Rooms *rooms, std::shared_ptr<odhtdb::Hash> id);
- std::shared_ptr<User> addUser(const odhtdb::Signature::PublicKey &userPublicKey, const odhtdb::DataView groupId);
+ // Throws exception on failure if we are not allowed to add the user to the group
+ void addUser(const odhtdb::Signature::PublicKey &userPublicKey, std::shared_ptr<Group> group);
+ // Returns null if the user already exists in the room
+ std::shared_ptr<User> addUserLocally(const odhtdb::Signature::PublicKey &userPublicKey, std::shared_ptr<Group> group);
+ // Returns null if the group already exists in the room
+ std::shared_ptr<Group> addGroupLocally(const odhtdb::DataView groupId);
// Returns null if user doesn't exist in room
std::shared_ptr<User> getUserByPublicKey(const odhtdb::Signature::PublicKey &userPublicKey);
+ // Returns null if group doesn't exist in room
+ std::shared_ptr<Group> getGroupById(const odhtdb::DataView groupId);
+ void setLocalUser(std::shared_ptr<User> user, std::shared_ptr<odhtdb::Signature::KeyPair> keyPair);
void publishMessage(const std::string &msg);
Rooms *rooms;
@@ -38,10 +46,12 @@ namespace dchat
std::shared_ptr<odhtdb::OwnedByteArray> encryptionKey;
std::string name;
odhtdb::Signature::MapPublicKey<std::shared_ptr<User>> userByPublicKey;
+ std::vector<std::shared_ptr<Group>> groups;
std::vector<RoomMessage> messages;
std::shared_ptr<User> localUser;
// Used for local users
odhtdb::Signature::MapPublicKey<std::shared_ptr<odhtdb::Signature::KeyPair>> publicKeyToKeyPairMap;
+ std::string inviteKey;
void *userdata;
};
@@ -70,13 +80,31 @@ namespace dchat
std::string newName;
};
+ struct InviteUserRequest
+ {
+ std::shared_ptr<Room> room;
+ odhtdb::Signature::PublicKey userPublicKey;
+ std::string message;
+ };
+
+ struct RoomAddUserRequest
+ {
+ std::shared_ptr<Room> room;
+ std::shared_ptr<User> user;
+ std::shared_ptr<User> addedByUser;
+ uint32_t timestampSeconds;
+ bool loadedFromCache;
+ bool isLocalUser;
+ };
+
// if connection failed then @rooms is null and errMsg contains the error
using ConnectBoostrapNodeCallbackFunc = std::function<void(std::shared_ptr<Rooms> rooms, const char *errMsg)>;
using CreateRoomCallbackFunc = std::function<void(std::shared_ptr<Room> room)>;
- using RoomAddUserCallbackFunc = std::function<void(std::shared_ptr<Room> room, std::shared_ptr<User> user)>;
+ using RoomAddUserCallbackFunc = std::function<void(const RoomAddUserRequest &request)>;
using RoomAddMessageCallbackFunc = std::function<void(const RoomAddMessageRequest &request)>;
using UserChangeNicknameCallbackFunc = std::function<void(const UserChangeNicknameRequest &request)>;
using ChangeRoomNameCallbackFunc = std::function<void(const RoomChangeNameRequest &request)>;
+ using ReceiveInviteUserCallbackFunc = std::function<void(const InviteUserRequest &request)>;
struct RoomCallbackFuncs
{
ConnectBoostrapNodeCallbackFunc connectCallbackFunc;
@@ -85,10 +113,12 @@ namespace dchat
RoomAddMessageCallbackFunc addMessageCallbackFunc;
UserChangeNicknameCallbackFunc userChangeNicknameCallbackFunc;
ChangeRoomNameCallbackFunc changeRoomNameCallbackFunc;
+ ReceiveInviteUserCallbackFunc receiveInviteUserCallbackFunc;
};
class Rooms
{
+ friend Room;
DISABLE_COPY(Rooms)
public:
// @callbackFuncs.connectCallbackFunc can't be null
@@ -98,7 +128,8 @@ namespace dchat
// Throws on failure
void registerUser(const std::string &username, const std::string &password);
// Throws on failure
- void createRoom(const std::string &name);
+ std::shared_ptr<Room> createRoom(const std::string &name);
+ void requestJoinRoom(const std::string &inviteKey, const std::string &message);
std::shared_ptr<odhtdb::Database> database;
private:
@@ -116,5 +147,8 @@ namespace dchat
std::string currentUsername;
std::string currentUserPassword;
std::recursive_mutex roomModifyMutex;
+
+ odhtdb::MapHash<std::shared_ptr<odhtdb::Signature::KeyPair>> waitingToJoinRoom;
+ std::recursive_mutex waitingToJoinRoomMutex;
};
} \ No newline at end of file