aboutsummaryrefslogtreecommitdiff
path: root/src/Channel.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2018-05-03 13:16:04 +0200
committerdec05eba <dec05eba@protonmail.com>2018-05-03 13:16:10 +0200
commitc2841e19c227f9c0f7cef3023e012c5c80f6def4 (patch)
treeb29328141537e54d5d53d1636c7d6c1b20ec72f9 /src/Channel.cpp
parent9bb631f1e1861c63f38125fffb91081c98a1cfcc (diff)
Support different types of channel data. Add nickname change command
Diffstat (limited to 'src/Channel.cpp')
-rw-r--r--src/Channel.cpp27
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);