diff options
author | dec05eba <dec05eba@protonmail.com> | 2018-05-03 13:16:04 +0200 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2018-05-03 13:16:10 +0200 |
commit | c2841e19c227f9c0f7cef3023e012c5c80f6def4 (patch) | |
tree | b29328141537e54d5d53d1636c7d6c1b20ec72f9 /src/Channel.cpp | |
parent | 9bb631f1e1861c63f38125fffb91081c98a1cfcc (diff) |
Support different types of channel data. Add nickname change command
Diffstat (limited to 'src/Channel.cpp')
-rw-r--r-- | src/Channel.cpp | 27 |
1 files changed, 25 insertions, 2 deletions
diff --git a/src/Channel.cpp b/src/Channel.cpp index d89a23f..a76a2c6 100644 --- a/src/Channel.cpp +++ b/src/Channel.cpp @@ -3,6 +3,7 @@ #include <odhtdb/Database.hpp> #include <odhtdb/bin2hex.hpp> #include <cstring> +#include <sibs/SafeSerializer.hpp> using namespace std; @@ -93,7 +94,7 @@ namespace dchat return users; } - User* Channel::getUserByPublicKey(const odhtdb::Signature::PublicKey &publicKey) + OnlineUser* Channel::getUserByPublicKey(const odhtdb::Signature::PublicKey &publicKey) { auto userIt = publicKeyOnlineUsersMap.find(publicKey); if(userIt != publicKeyOnlineUsersMap.end()) @@ -118,7 +119,12 @@ namespace dchat { auto localOnlineUser = static_cast<OnlineUser*>(localUser); assert(localOnlineUser->databaseUser->getType() == odhtdb::User::Type::LOCAL); - database->addData(databaseNodeInfo, static_cast<const odhtdb::LocalUser*>(localOnlineUser->databaseUser), odhtdb::DataView((void*)msg.data(), msg.size())); + + sibs::SafeSerializer serializer; + serializer.add(ChannelDataType::MESSAGE); + serializer.add((const u8*)msg.data(), msg.size()); + + database->addData(databaseNodeInfo, static_cast<const odhtdb::LocalUser*>(localOnlineUser->databaseUser), odhtdb::DataView(serializer.getBuffer().data(), serializer.getBuffer().size())); database->commit(); } else @@ -178,6 +184,23 @@ namespace dchat addUserLocally(newLocalUser); } + void Channel::changeNick(const std::string &newNick) + { + if(database && localUser->type == User::Type::ONLINE) + { + auto localOnlineUser = static_cast<OnlineUser*>(localUser); + assert(localOnlineUser->databaseUser->getType() == odhtdb::User::Type::LOCAL); + + sibs::SafeSerializer serializer; + serializer.add(ChannelDataType::NICKNAME_CHANGE); + serializer.add((u8)newNick.size()); + serializer.add((const u8*)newNick.data(), newNick.size()); + + database->addData(databaseNodeInfo, static_cast<const odhtdb::LocalUser*>(localOnlineUser->databaseUser), odhtdb::DataView(serializer.getBuffer().data(), serializer.getBuffer().size())); + database->commit(); + } + } + void Channel::processEvent(const sf::Event &event) { chatbar.processEvent(event, this); |