From f4a1be0367fe376ef59fb3cffce1a4281260b6fc Mon Sep 17 00:00:00 2001 From: apathy Date: Sat, 9 Jul 2016 17:35:22 -0700 Subject: [PATCH] Combined protocol implementations as they are really just a collection of small functions that pass off the real work to services Speeds up compile times --- src/CMakeLists.txt | 34 +- src/protocol/AddBan.cpp | 38 -- src/protocol/AddFriend.cpp | 30 - src/protocol/AddIgnore.cpp | 26 - src/protocol/AddInvite.cpp | 38 -- src/protocol/AddModerator.cpp | 39 -- src/protocol/CreateRoom.cpp | 21 - src/protocol/DestroyAvatar.cpp | 29 - src/protocol/DestroyRoom.cpp | 42 -- src/protocol/EnterRoom.cpp | 33 - src/protocol/FailoverReLoginAvatar.cpp | 38 -- src/protocol/FriendStatus.cpp | 22 - src/protocol/GetAnyAvatar.cpp | 24 - src/protocol/GetPersistentHeaders.cpp | 17 - src/protocol/GetPersistentMessage.cpp | 17 - src/protocol/GetRoom.cpp | 20 - src/protocol/GetRoomSummaries.cpp | 18 - src/protocol/IgnoreStatus.cpp | 22 - src/protocol/KickAvatar.cpp | 39 -- src/protocol/LeaveRoom.cpp | 31 - src/protocol/LoginAvatar.cpp | 36 -- src/protocol/LogoutAvatar.cpp | 28 - src/protocol/Protocol.cpp | 733 +++++++++++++++++++++++ src/protocol/RegistrarGetChatServer.cpp | 18 - src/protocol/RemoveBan.cpp | 38 -- src/protocol/RemoveFriend.cpp | 28 - src/protocol/RemoveIgnore.cpp | 27 - src/protocol/RemoveInvite.cpp | 39 -- src/protocol/RemoveModerator.cpp | 35 -- src/protocol/SendInstantMessage.cpp | 32 - src/protocol/SendPersistentMessage.cpp | 52 -- src/protocol/SendRoomMessage.cpp | 33 - src/protocol/SetApiVersion.cpp | 16 - src/protocol/SetAvatarAttributes.cpp | 27 - src/protocol/UpdatePersistentMessage.cpp | 14 - 35 files changed, 734 insertions(+), 1000 deletions(-) delete mode 100644 src/protocol/AddBan.cpp delete mode 100644 src/protocol/AddFriend.cpp delete mode 100644 src/protocol/AddIgnore.cpp delete mode 100644 src/protocol/AddInvite.cpp delete mode 100644 src/protocol/AddModerator.cpp delete mode 100644 src/protocol/CreateRoom.cpp delete mode 100644 src/protocol/DestroyAvatar.cpp delete mode 100644 src/protocol/DestroyRoom.cpp delete mode 100644 src/protocol/EnterRoom.cpp delete mode 100644 src/protocol/FailoverReLoginAvatar.cpp delete mode 100644 src/protocol/FriendStatus.cpp delete mode 100644 src/protocol/GetAnyAvatar.cpp delete mode 100644 src/protocol/GetPersistentHeaders.cpp delete mode 100644 src/protocol/GetPersistentMessage.cpp delete mode 100644 src/protocol/GetRoom.cpp delete mode 100644 src/protocol/GetRoomSummaries.cpp delete mode 100644 src/protocol/IgnoreStatus.cpp delete mode 100644 src/protocol/KickAvatar.cpp delete mode 100644 src/protocol/LeaveRoom.cpp delete mode 100644 src/protocol/LoginAvatar.cpp delete mode 100644 src/protocol/LogoutAvatar.cpp create mode 100644 src/protocol/Protocol.cpp delete mode 100644 src/protocol/RegistrarGetChatServer.cpp delete mode 100644 src/protocol/RemoveBan.cpp delete mode 100644 src/protocol/RemoveFriend.cpp delete mode 100644 src/protocol/RemoveIgnore.cpp delete mode 100644 src/protocol/RemoveInvite.cpp delete mode 100644 src/protocol/RemoveModerator.cpp delete mode 100644 src/protocol/SendInstantMessage.cpp delete mode 100644 src/protocol/SendPersistentMessage.cpp delete mode 100644 src/protocol/SendRoomMessage.cpp delete mode 100644 src/protocol/SetApiVersion.cpp delete mode 100644 src/protocol/SetAvatarAttributes.cpp delete mode 100644 src/protocol/UpdatePersistentMessage.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index df6e72c..53452f9 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -9,71 +9,39 @@ if(HAVE_UDPLIBRARY) endif() set(SOURCES - protocol/AddBan.cpp protocol/AddBan.hpp - protocol/AddFriend.cpp protocol/AddFriend.hpp - protocol/AddIgnore.cpp protocol/AddIgnore.hpp - protocol/AddInvite.cpp protocol/AddInvite.hpp - protocol/AddModerator.cpp protocol/AddModerator.hpp - protocol/CreateRoom.cpp protocol/CreateRoom.hpp - protocol/DestroyAvatar.cpp protocol/DestroyAvatar.hpp - protocol/DestroyRoom.cpp protocol/DestroyRoom.hpp - protocol/EnterRoom.cpp protocol/EnterRoom.hpp - protocol/FailoverReLoginAvatar.cpp protocol/FailoverReLoginAvatar.hpp - protocol/FriendStatus.cpp protocol/FriendStatus.hpp - protocol/GetAnyAvatar.cpp protocol/GetAnyAvatar.hpp - protocol/GetPersistentHeaders.cpp protocol/GetPersistentHeaders.hpp - protocol/GetPersistentMessage.cpp protocol/GetPersistentMessage.hpp - protocol/GetRoom.cpp protocol/GetRoom.hpp - protocol/GetRoomSummaries.cpp protocol/GetRoomSummaries.hpp - protocol/IgnoreStatus.cpp protocol/IgnoreStatus.hpp - protocol/KickAvatar.cpp protocol/KickAvatar.hpp - protocol/LeaveRoom.cpp protocol/LeaveRoom.hpp - protocol/LoginAvatar.cpp protocol/LoginAvatar.hpp - protocol/LogoutAvatar.cpp protocol/LogoutAvatar.hpp - protocol/RegistrarGetChatServer.cpp + protocol/Protocol.cpp protocol/RegistrarGetChatServer.hpp - protocol/RemoveBan.cpp protocol/RemoveBan.hpp - protocol/RemoveFriend.cpp protocol/RemoveFriend.hpp - protocol/RemoveIgnore.cpp protocol/RemoveIgnore.hpp - protocol/RemoveInvite.cpp protocol/RemoveInvite.hpp - protocol/RemoveModerator.cpp protocol/RemoveModerator.hpp - protocol/SendInstantMessage.cpp protocol/SendInstantMessage.hpp - protocol/SendPersistentMessage.cpp protocol/SendPersistentMessage.hpp - protocol/SendRoomMessage.cpp protocol/SendRoomMessage.hpp - protocol/SetApiVersion.cpp protocol/SetApiVersion.hpp - protocol/SetAvatarAttributes.cpp protocol/SetAvatarAttributes.hpp - protocol/UpdatePersistentMessage.cpp protocol/UpdatePersistentMessage.hpp ChatAvatar.cpp diff --git a/src/protocol/AddBan.cpp b/src/protocol/AddBan.cpp deleted file mode 100644 index b7d2244..0000000 --- a/src/protocol/AddBan.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "AddBan.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -AddBan::AddBan(GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} { - LOG(INFO) << "ADDBAN request received - adding ban for: " - << FromWideString(request.destAvatarName) << "@" - << FromWideString(request.destAvatarAddress) << " to " - << FromWideString(request.destRoomAddress); - - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - auto bannedAvatar - = avatarService_->GetAvatar(request.destAvatarName, request.destAvatarAddress); - if (!bannedAvatar) { - throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; - } - - auto room = roomService_->GetRoom(request.destRoomAddress); - if (!room) { - throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; - } - - response.destRoomId = room->GetRoomId(); - - room->AddBanned(srcAvatar->GetAvatarId(), bannedAvatar); -} diff --git a/src/protocol/AddFriend.cpp b/src/protocol/AddFriend.cpp deleted file mode 100644 index ce406a3..0000000 --- a/src/protocol/AddFriend.cpp +++ /dev/null @@ -1,30 +0,0 @@ -#include "AddFriend.hpp" - -#include "ChatAvatarService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -AddFriend::AddFriend(GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} { - LOG(INFO) << "ADDFRIEND request received - adding: " << FromWideString(request.destName) << "@" - << FromWideString(request.destAddress) << " to " << request.srcAvatarId << "@" - << FromWideString(request.srcAddress); - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - auto destAvatar = avatarService_->GetAvatar(request.destName, request.destAddress); - if (!destAvatar) { - throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; - } - - srcAvatar->AddFriend(destAvatar); - - if (destAvatar->IsOnline()) { - client->SendFriendLoginUpdate(srcAvatar, destAvatar); - } -} diff --git a/src/protocol/AddIgnore.cpp b/src/protocol/AddIgnore.cpp deleted file mode 100644 index 80f42c3..0000000 --- a/src/protocol/AddIgnore.cpp +++ /dev/null @@ -1,26 +0,0 @@ -#include "AddIgnore.hpp" - -#include "ChatAvatarService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -AddIgnore::AddIgnore(GatewayClient * client, const RequestType & request, ResponseType & response) - : avatarService_{client->GetNode()->GetAvatarService()} { - LOG(INFO) << "ADDIGNORE request received - adding: " << FromWideString(request.destName) << "@" - << FromWideString(request.destAddress) << " to " << request.srcAvatarId << "@" - << FromWideString(request.srcAddress); - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - auto destAvatar = avatarService_->GetAvatar(request.destName, request.destAddress); - if (!destAvatar) { - throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; - } - - srcAvatar->AddIgnore(destAvatar); -} diff --git a/src/protocol/AddInvite.cpp b/src/protocol/AddInvite.cpp deleted file mode 100644 index 9929c95..0000000 --- a/src/protocol/AddInvite.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "AddInvite.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -AddInvite::AddInvite(GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} { - LOG(INFO) << "ADDINVITE request received - adding invitation for: " - << FromWideString(request.destAvatarName) << "@" - << FromWideString(request.destAvatarAddress) << " to " - << FromWideString(request.destRoomAddress); - - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - auto invitedAvatar - = avatarService_->GetAvatar(request.destAvatarName, request.destAvatarAddress); - if (!invitedAvatar) { - throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; - } - - auto room = roomService_->GetRoom(request.destRoomAddress); - if (!room) { - throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; - } - - response.destRoomId = room->GetRoomId(); - - room->AddInvite(srcAvatar->GetAvatarId(), invitedAvatar); -} diff --git a/src/protocol/AddModerator.cpp b/src/protocol/AddModerator.cpp deleted file mode 100644 index c9b7cbd..0000000 --- a/src/protocol/AddModerator.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "AddModerator.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -AddModerator::AddModerator( - GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} { - LOG(INFO) << "ADDMODERATOR request recieved - adding: " - << FromWideString(request.destAvatarName) << "@" - << FromWideString(request.destAvatarAddress) << " to " - << FromWideString(request.destRoomAddress); - - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - auto moderatorAvatar - = avatarService_->GetAvatar(request.destAvatarName, request.destAvatarAddress); - if (!moderatorAvatar) { - throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; - } - - auto room = roomService_->GetRoom(request.destRoomAddress); - if (!room) { - throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; - } - - response.destRoomId = room->GetRoomId(); - - room->AddModerator(srcAvatar->GetAvatarId(), moderatorAvatar); -} diff --git a/src/protocol/CreateRoom.cpp b/src/protocol/CreateRoom.cpp deleted file mode 100644 index bd95ebb..0000000 --- a/src/protocol/CreateRoom.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "CreateRoom.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -CreateRoom::CreateRoom(GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} { - LOG(INFO) << "CREATEROOM request received - creator: " << request.creatorId << "@" - << FromWideString(request.srcAddress) - << " room: " << FromWideString(request.roomAddress); - - response.room = roomService_->CreateRoom(avatarService_->GetAvatar(request.creatorId), - request.roomName, request.roomTopic, request.roomPassword, request.roomAttributes, - request.roomMaxSize, request.roomAddress, request.srcAddress); -} diff --git a/src/protocol/DestroyAvatar.cpp b/src/protocol/DestroyAvatar.cpp deleted file mode 100644 index a39b377..0000000 --- a/src/protocol/DestroyAvatar.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "DestroyAvatar.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" - -#include "easylogging++.h" - -DestroyAvatar::DestroyAvatar( - GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} { - auto avatar = avatarService_->GetAvatar(request.avatarId); - if (!avatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - // Remove From All Rooms - for (auto room : avatar->GetJoinedRooms()) { - auto addresses = room->GetConnectedAddresses(); - room->LeaveRoom(avatar); - - client->SendLeaveRoomUpdate(addresses, avatar->GetAvatarId(), room->GetRoomId()); - } - - // Destroy avatar - avatarService_->DestroyAvatar(avatar); -} diff --git a/src/protocol/DestroyRoom.cpp b/src/protocol/DestroyRoom.cpp deleted file mode 100644 index 56aa1dc..0000000 --- a/src/protocol/DestroyRoom.cpp +++ /dev/null @@ -1,42 +0,0 @@ -#include "DestroyRoom.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -DestroyRoom::DestroyRoom(GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} { - LOG(INFO) << "DESTROYROOM request received " << request.srcAvatarId << "@" - << FromWideString(request.srcAddress) - << " room: " << FromWideString(request.roomAddress); - - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException(ChatResultCode::SRCAVATARDOESNTEXIST); - } - - auto room = roomService_->GetRoom(request.roomAddress); - if (!room) { - throw ChatResultException(ChatResultCode::ADDRESSNOTROOM); - } - - auto addresses = room->GetRemoteAddresses(); - auto roomId = room->GetRoomId(); - - response.roomId = roomId; - - for (auto roomAvatar : room->GetAvatars()) { - auto roomAddresses = room->GetConnectedAddresses(); - room->LeaveRoom(roomAvatar); - client->SendLeaveRoomUpdate(roomAddresses, roomAvatar->GetAvatarId(), roomId); - } - - roomService_->DestroyRoom(room); - - client->SendDestroyRoomUpdate(srcAvatar, roomId, addresses); -} diff --git a/src/protocol/EnterRoom.cpp b/src/protocol/EnterRoom.cpp deleted file mode 100644 index 4ce168f..0000000 --- a/src/protocol/EnterRoom.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "EnterRoom.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoom.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -EnterRoom::EnterRoom(GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} { - LOG(INFO) << "ENTERROOM request received - avatar: " << request.srcAvatarId << "@" - << FromWideString(request.srcAddress) - << " room: " << FromWideString(request.roomAddress); - - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - response.room = roomService_->GetRoom(request.roomAddress); - if (!response.room) { - throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; - } - - response.roomId = response.room->GetRoomId(); - response.room->EnterRoom(srcAvatar, request.roomPassword); - - client->SendEnterRoomUpdate(srcAvatar, response.room); -} diff --git a/src/protocol/FailoverReLoginAvatar.cpp b/src/protocol/FailoverReLoginAvatar.cpp deleted file mode 100644 index 562964f..0000000 --- a/src/protocol/FailoverReLoginAvatar.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "FailoverReLoginAvatar.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -FailoverReLoginAvatar::FailoverReLoginAvatar( - GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} { - LOG(INFO) << "FAILOVER_RELOGINAVATAR request received " << FromWideString(request.name) << "@" - << FromWideString(request.address); - - auto avatar = avatarService_->GetAvatar(request.name, request.address); - if (!avatar) { - LOG(INFO) << "Login avatar does not exist, creating a new one " << FromWideString(request.name) << "@" - << FromWideString(request.address); - avatar = avatarService_->CreateAvatar(request.name, request.address, request.userId, - request.attributes, request.loginLocation); - } - - avatarService_->LoginAvatar(CHECK_NOTNULL(avatar)); - - if (avatar->GetName().compare(u"SYSTEM") == 0) { - client->GetNode()->RegisterClientAddress(avatar->GetAddress(), client); - roomService_->LoadRoomsFromStorage(request.address); - } else { - client->SendFriendLoginUpdates(avatar); - } - - for (auto room : avatar->GetJoinedRooms()) { - client->SendEnterRoomUpdate(avatar, room); - } -} diff --git a/src/protocol/FriendStatus.cpp b/src/protocol/FriendStatus.cpp deleted file mode 100644 index 22fcbc4..0000000 --- a/src/protocol/FriendStatus.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "FriendStatus.hpp" - -#include "ChatAvatarService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -FriendStatus::FriendStatus( - GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} { - LOG(INFO) << "FRIENDSTATUS request received - for " << request.srcAvatarId << "@" - << FromWideString(request.srcAddress); - - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - response.srcAvatar = srcAvatar; -} diff --git a/src/protocol/GetAnyAvatar.cpp b/src/protocol/GetAnyAvatar.cpp deleted file mode 100644 index 228354a..0000000 --- a/src/protocol/GetAnyAvatar.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include "GetAnyAvatar.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -GetAnyAvatar::GetAnyAvatar( - GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} { - LOG(INFO) << "GETANYAVATAR request received - avatar: " << FromWideString(request.name) << "@" - << FromWideString(request.address); - - auto avatar = avatarService_->GetAvatar(request.name, request.address); - if (!avatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - response.isOnline = avatar->IsOnline(); - response.avatar = avatar; -} diff --git a/src/protocol/GetPersistentHeaders.cpp b/src/protocol/GetPersistentHeaders.cpp deleted file mode 100644 index 4a39c0d..0000000 --- a/src/protocol/GetPersistentHeaders.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "GetPersistentHeaders.hpp" - -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "PersistentMessageService.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -GetPersistentHeaders::GetPersistentHeaders( - GatewayClient* client, const RequestType& request, ResponseType& response) - : messageService_{client->GetNode()->GetMessageService()} { - LOG(INFO) << "GETPERSISTENTHEADERS request recieved - avatar: " << request.avatarId - << " category: " << FromWideString(request.category); - - response.headers = messageService_->GetMessageHeaders(request.avatarId); -} diff --git a/src/protocol/GetPersistentMessage.cpp b/src/protocol/GetPersistentMessage.cpp deleted file mode 100644 index 8f925fa..0000000 --- a/src/protocol/GetPersistentMessage.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "GetPersistentMessage.hpp" - -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "PersistentMessageService.hpp" - -#include "easylogging++.h" - -GetPersistentMessage::GetPersistentMessage( - GatewayClient* client, const RequestType& request, ResponseType& response) - : messageService_{client->GetNode()->GetMessageService()} { - LOG(INFO) << "GETPERSISTENTMESSAGE request received - avatar: " << request.srcAvatarId - << " message: " << request.messageId; - - response.message - = messageService_->GetPersistentMessage(request.srcAvatarId, request.messageId); -} diff --git a/src/protocol/GetRoom.cpp b/src/protocol/GetRoom.cpp deleted file mode 100644 index c61ed43..0000000 --- a/src/protocol/GetRoom.cpp +++ /dev/null @@ -1,20 +0,0 @@ -#include "GetRoom.hpp" - -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -GetRoom::GetRoom(GatewayClient* client, const RequestType& request, ResponseType& response) - : roomService_{client->GetNode()->GetRoomService()} { - LOG(INFO) << "GETROOM request received - room: " << FromWideString(request.roomAddress); - - auto room = roomService_->GetRoom(request.roomAddress); - if (!room) { - throw ChatResultException{ChatResultCode::ADDRESSDOESNTEXIST}; - } - - response.room = room; -} diff --git a/src/protocol/GetRoomSummaries.cpp b/src/protocol/GetRoomSummaries.cpp deleted file mode 100644 index 6f3b384..0000000 --- a/src/protocol/GetRoomSummaries.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include "GetRoomSummaries.hpp" - -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -GetRoomSummaries::GetRoomSummaries( - GatewayClient* client, const RequestType& request, ResponseType& response) - : roomService_{client->GetNode()->GetRoomService()} { - LOG(INFO) << "GETROOMSUMMARIES request received - start node: " - << FromWideString(request.startNodeAddress) - << " filter: " << FromWideString(request.roomFilter); - - response.rooms = roomService_->GetRoomSummaries(request.startNodeAddress, request.roomFilter); -} diff --git a/src/protocol/IgnoreStatus.cpp b/src/protocol/IgnoreStatus.cpp deleted file mode 100644 index 67bdd4b..0000000 --- a/src/protocol/IgnoreStatus.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "IgnoreStatus.hpp" - -#include "ChatAvatarService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -IgnoreStatus::IgnoreStatus( - GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} { - LOG(INFO) << "IGNORESTATUS request received - for " << request.srcAvatarId << "@" - << FromWideString(request.srcAddress); - - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - response.srcAvatar = srcAvatar; -} diff --git a/src/protocol/KickAvatar.cpp b/src/protocol/KickAvatar.cpp deleted file mode 100644 index 4ce9ec8..0000000 --- a/src/protocol/KickAvatar.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "KickAvatar.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -KickAvatar::KickAvatar(GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} { - LOG(INFO) << "KICKAVATAR request received - kicking: " << FromWideString(request.destAvatarName) - << "@" << FromWideString(request.destAvatarAddress) << " from " - << FromWideString(request.destRoomAddress); - - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - auto destAvatar = avatarService_->GetAvatar(request.destAvatarName, request.destAvatarAddress); - if (!destAvatar) { - throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; - } - - auto room = roomService_->GetRoom(request.destRoomAddress); - if (!room) { - throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; - } - - response.destRoomId = room->GetRoomId(); - - auto addresses = room->GetConnectedAddresses(); - room->KickAvatar(srcAvatar->GetAvatarId(), destAvatar); - - client->SendKickAvatarUpdate(addresses, srcAvatar, destAvatar, room); -} diff --git a/src/protocol/LeaveRoom.cpp b/src/protocol/LeaveRoom.cpp deleted file mode 100644 index 4ae2462..0000000 --- a/src/protocol/LeaveRoom.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include "LeaveRoom.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" - -#include "easylogging++.h" - -LeaveRoom::LeaveRoom(GatewayClient * client, const RequestType & request, ResponseType & response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} { - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - auto room = roomService_->GetRoom(request.roomAddress); - if (!room) { - throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; - } - - response.roomId = room->GetRoomId(); - - // Cache the addresses before leaving the room in case this avatar was the - // last on their server, to ensure the update messages goes out. - auto addresses = room->GetConnectedAddresses(); - room->LeaveRoom(srcAvatar); - - client->SendLeaveRoomUpdate(addresses, srcAvatar->GetAvatarId(), room->GetRoomId()); -} diff --git a/src/protocol/LoginAvatar.cpp b/src/protocol/LoginAvatar.cpp deleted file mode 100644 index 88c814b..0000000 --- a/src/protocol/LoginAvatar.cpp +++ /dev/null @@ -1,36 +0,0 @@ - -#include "LoginAvatar.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -LoginAvatar::LoginAvatar(GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} { - LOG(INFO) << "LOGINAVATAR request received " << FromWideString(request.name) << "@" - << FromWideString(request.address); - - auto avatar = avatarService_->GetAvatar(request.name, request.address); - if (!avatar) { - LOG(INFO) << "Login avatar does not exist, creating a new one " - << FromWideString(request.name) << "@" << FromWideString(request.address); - avatar = avatarService_->CreateAvatar(request.name, request.address, request.userId, - request.loginAttributes, request.loginLocation); - } - - avatarService_->LoginAvatar(CHECK_NOTNULL(avatar)); - - if (avatar->GetName().compare(u"SYSTEM") == 0) { - client->GetNode()->RegisterClientAddress(avatar->GetAddress(), client); - roomService_->LoadRoomsFromStorage(request.address); - } else { - client->SendFriendLoginUpdates(avatar); - } - - response.avatar = avatar; -} diff --git a/src/protocol/LogoutAvatar.cpp b/src/protocol/LogoutAvatar.cpp deleted file mode 100644 index 07496d7..0000000 --- a/src/protocol/LogoutAvatar.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "LogoutAvatar.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" - -#include "easylogging++.h" - -LogoutAvatar::LogoutAvatar(GatewayClient * client, const RequestType & request, ResponseType & response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} -{ - LOG(INFO) << "LOGOUTAVATAR request received - avatar id:" << request.avatarId; - - auto avatar = avatarService_->GetAvatar(request.avatarId); - - for (auto room : avatar->GetJoinedRooms()) { - auto addresses = room->GetConnectedAddresses(); - room->LeaveRoom(avatar); - - client->SendLeaveRoomUpdate(addresses, avatar->GetAvatarId(), room->GetRoomId()); - } - - client->SendFriendLogoutUpdates(avatar); - - avatarService_->LogoutAvatar(avatar); -} diff --git a/src/protocol/Protocol.cpp b/src/protocol/Protocol.cpp new file mode 100644 index 0000000..f6bc469 --- /dev/null +++ b/src/protocol/Protocol.cpp @@ -0,0 +1,733 @@ +#include "AddBan.hpp" + +#include "ChatAvatarService.hpp" +#include "ChatRoomService.hpp" +#include "GatewayClient.hpp" +#include "GatewayNode.hpp" +#include "PersistentMessageService.hpp" +#include "RegistrarClient.hpp" +#include "RegistrarNode.hpp" +#include "StringUtils.hpp" +#include "StationChatConfig.hpp" + +#include "protocol/AddBan.hpp" +#include "protocol/AddFriend.hpp" +#include "protocol/AddIgnore.hpp" +#include "protocol/AddInvite.hpp" +#include "protocol/AddModerator.hpp" +#include "protocol/CreateRoom.hpp" +#include "protocol/DestroyAvatar.hpp" +#include "protocol/DestroyRoom.hpp" +#include "protocol/EnterRoom.hpp" +#include "protocol/FailoverReLoginAvatar.hpp" +#include "protocol/FriendStatus.hpp" +#include "protocol/GetAnyAvatar.hpp" +#include "protocol/GetPersistentHeaders.hpp" +#include "protocol/GetPersistentMessage.hpp" +#include "protocol/GetRoom.hpp" +#include "protocol/GetRoomSummaries.hpp" +#include "protocol/IgnoreStatus.hpp" +#include "protocol/KickAvatar.hpp" +#include "protocol/LeaveRoom.hpp" +#include "protocol/LoginAvatar.hpp" +#include "protocol/LogoutAvatar.hpp" +#include "protocol/RegistrarGetChatServer.hpp" +#include "protocol/RemoveBan.hpp" +#include "protocol/RemoveFriend.hpp" +#include "protocol/RemoveIgnore.hpp" +#include "protocol/RemoveInvite.hpp" +#include "protocol/RemoveModerator.hpp" +#include "protocol/SendInstantMessage.hpp" +#include "protocol/SendPersistentMessage.hpp" +#include "protocol/SendRoomMessage.hpp" +#include "protocol/SetApiVersion.hpp" +#include "protocol/SetAvatarAttributes.hpp" +#include "protocol/UpdatePersistentMessage.hpp" + +#include "easylogging++.h" + +AddBan::AddBan(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "ADDBAN request received - adding ban for: " + << FromWideString(request.destAvatarName) << "@" + << FromWideString(request.destAvatarAddress) << " to " + << FromWideString(request.destRoomAddress); + + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + auto bannedAvatar + = avatarService_->GetAvatar(request.destAvatarName, request.destAvatarAddress); + if (!bannedAvatar) { + throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; + } + + auto room = roomService_->GetRoom(request.destRoomAddress); + if (!room) { + throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; + } + + response.destRoomId = room->GetRoomId(); + + room->AddBanned(srcAvatar->GetAvatarId(), bannedAvatar); +} + +AddFriend::AddFriend(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} { + LOG(INFO) << "ADDFRIEND request received - adding: " << FromWideString(request.destName) << "@" + << FromWideString(request.destAddress) << " to " << request.srcAvatarId << "@" + << FromWideString(request.srcAddress); + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + auto destAvatar = avatarService_->GetAvatar(request.destName, request.destAddress); + if (!destAvatar) { + throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; + } + + srcAvatar->AddFriend(destAvatar); + + if (destAvatar->IsOnline()) { + client->SendFriendLoginUpdate(srcAvatar, destAvatar); + } +} + +AddIgnore::AddIgnore(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} { + LOG(INFO) << "ADDIGNORE request received - adding: " << FromWideString(request.destName) << "@" + << FromWideString(request.destAddress) << " to " << request.srcAvatarId << "@" + << FromWideString(request.srcAddress); + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + auto destAvatar = avatarService_->GetAvatar(request.destName, request.destAddress); + if (!destAvatar) { + throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; + } + + srcAvatar->AddIgnore(destAvatar); +} + +AddInvite::AddInvite(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "ADDINVITE request received - adding invitation for: " + << FromWideString(request.destAvatarName) << "@" + << FromWideString(request.destAvatarAddress) << " to " + << FromWideString(request.destRoomAddress); + + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + auto invitedAvatar + = avatarService_->GetAvatar(request.destAvatarName, request.destAvatarAddress); + if (!invitedAvatar) { + throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; + } + + auto room = roomService_->GetRoom(request.destRoomAddress); + if (!room) { + throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; + } + + response.destRoomId = room->GetRoomId(); + + room->AddInvite(srcAvatar->GetAvatarId(), invitedAvatar); +} + +AddModerator::AddModerator( + GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "ADDMODERATOR request recieved - adding: " + << FromWideString(request.destAvatarName) << "@" + << FromWideString(request.destAvatarAddress) << " to " + << FromWideString(request.destRoomAddress); + + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + auto moderatorAvatar + = avatarService_->GetAvatar(request.destAvatarName, request.destAvatarAddress); + if (!moderatorAvatar) { + throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; + } + + auto room = roomService_->GetRoom(request.destRoomAddress); + if (!room) { + throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; + } + + response.destRoomId = room->GetRoomId(); + + room->AddModerator(srcAvatar->GetAvatarId(), moderatorAvatar); +} + +CreateRoom::CreateRoom(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "CREATEROOM request received - creator: " << request.creatorId << "@" + << FromWideString(request.srcAddress) + << " room: " << FromWideString(request.roomAddress); + + response.room = roomService_->CreateRoom(avatarService_->GetAvatar(request.creatorId), + request.roomName, request.roomTopic, request.roomPassword, request.roomAttributes, + request.roomMaxSize, request.roomAddress, request.srcAddress); +} + +DestroyAvatar::DestroyAvatar( + GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + auto avatar = avatarService_->GetAvatar(request.avatarId); + if (!avatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + // Remove From All Rooms + for (auto room : avatar->GetJoinedRooms()) { + auto addresses = room->GetConnectedAddresses(); + room->LeaveRoom(avatar); + + client->SendLeaveRoomUpdate(addresses, avatar->GetAvatarId(), room->GetRoomId()); + } + + // Destroy avatar + avatarService_->DestroyAvatar(avatar); +} + +DestroyRoom::DestroyRoom(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "DESTROYROOM request received " << request.srcAvatarId << "@" + << FromWideString(request.srcAddress) + << " room: " << FromWideString(request.roomAddress); + + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException(ChatResultCode::SRCAVATARDOESNTEXIST); + } + + auto room = roomService_->GetRoom(request.roomAddress); + if (!room) { + throw ChatResultException(ChatResultCode::ADDRESSNOTROOM); + } + + auto addresses = room->GetRemoteAddresses(); + auto roomId = room->GetRoomId(); + + response.roomId = roomId; + + for (auto roomAvatar : room->GetAvatars()) { + auto roomAddresses = room->GetConnectedAddresses(); + room->LeaveRoom(roomAvatar); + client->SendLeaveRoomUpdate(roomAddresses, roomAvatar->GetAvatarId(), roomId); + } + + roomService_->DestroyRoom(room); + + client->SendDestroyRoomUpdate(srcAvatar, roomId, addresses); +} + +EnterRoom::EnterRoom(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "ENTERROOM request received - avatar: " << request.srcAvatarId << "@" + << FromWideString(request.srcAddress) + << " room: " << FromWideString(request.roomAddress); + + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + response.room = roomService_->GetRoom(request.roomAddress); + if (!response.room) { + throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; + } + + response.roomId = response.room->GetRoomId(); + response.room->EnterRoom(srcAvatar, request.roomPassword); + + client->SendEnterRoomUpdate(srcAvatar, response.room); +} + +FailoverReLoginAvatar::FailoverReLoginAvatar( + GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "FAILOVER_RELOGINAVATAR request received " << FromWideString(request.name) << "@" + << FromWideString(request.address); + + auto avatar = avatarService_->GetAvatar(request.name, request.address); + if (!avatar) { + LOG(INFO) << "Login avatar does not exist, creating a new one " << FromWideString(request.name) << "@" + << FromWideString(request.address); + avatar = avatarService_->CreateAvatar(request.name, request.address, request.userId, + request.attributes, request.loginLocation); + } + + avatarService_->LoginAvatar(CHECK_NOTNULL(avatar)); + + if (avatar->GetName().compare(u"SYSTEM") == 0) { + client->GetNode()->RegisterClientAddress(avatar->GetAddress(), client); + roomService_->LoadRoomsFromStorage(request.address); + } else { + client->SendFriendLoginUpdates(avatar); + } + + for (auto room : avatar->GetJoinedRooms()) { + client->SendEnterRoomUpdate(avatar, room); + } +} + +FriendStatus::FriendStatus( + GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} { + LOG(INFO) << "FRIENDSTATUS request received - for " << request.srcAvatarId << "@" + << FromWideString(request.srcAddress); + + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + response.srcAvatar = srcAvatar; +} + +GetAnyAvatar::GetAnyAvatar( + GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} { + LOG(INFO) << "GETANYAVATAR request received - avatar: " << FromWideString(request.name) << "@" + << FromWideString(request.address); + + auto avatar = avatarService_->GetAvatar(request.name, request.address); + if (!avatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + response.isOnline = avatar->IsOnline(); + response.avatar = avatar; +} + +GetPersistentHeaders::GetPersistentHeaders( + GatewayClient* client, const RequestType& request, ResponseType& response) + : messageService_{client->GetNode()->GetMessageService()} { + LOG(INFO) << "GETPERSISTENTHEADERS request recieved - avatar: " << request.avatarId + << " category: " << FromWideString(request.category); + + response.headers = messageService_->GetMessageHeaders(request.avatarId); +} + +GetPersistentMessage::GetPersistentMessage( + GatewayClient* client, const RequestType& request, ResponseType& response) + : messageService_{client->GetNode()->GetMessageService()} { + LOG(INFO) << "GETPERSISTENTMESSAGE request received - avatar: " << request.srcAvatarId + << " message: " << request.messageId; + + response.message + = messageService_->GetPersistentMessage(request.srcAvatarId, request.messageId); +} + +GetRoom::GetRoom(GatewayClient* client, const RequestType& request, ResponseType& response) + : roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "GETROOM request received - room: " << FromWideString(request.roomAddress); + + auto room = roomService_->GetRoom(request.roomAddress); + if (!room) { + throw ChatResultException{ChatResultCode::ADDRESSDOESNTEXIST}; + } + + response.room = room; +} + +GetRoomSummaries::GetRoomSummaries( + GatewayClient* client, const RequestType& request, ResponseType& response) + : roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "GETROOMSUMMARIES request received - start node: " + << FromWideString(request.startNodeAddress) + << " filter: " << FromWideString(request.roomFilter); + + response.rooms = roomService_->GetRoomSummaries(request.startNodeAddress, request.roomFilter); +} + +IgnoreStatus::IgnoreStatus( + GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} { + LOG(INFO) << "IGNORESTATUS request received - for " << request.srcAvatarId << "@" + << FromWideString(request.srcAddress); + + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + response.srcAvatar = srcAvatar; +} + +KickAvatar::KickAvatar(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "KICKAVATAR request received - kicking: " << FromWideString(request.destAvatarName) + << "@" << FromWideString(request.destAvatarAddress) << " from " + << FromWideString(request.destRoomAddress); + + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + auto destAvatar = avatarService_->GetAvatar(request.destAvatarName, request.destAvatarAddress); + if (!destAvatar) { + throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; + } + + auto room = roomService_->GetRoom(request.destRoomAddress); + if (!room) { + throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; + } + + response.destRoomId = room->GetRoomId(); + + auto addresses = room->GetConnectedAddresses(); + room->KickAvatar(srcAvatar->GetAvatarId(), destAvatar); + + client->SendKickAvatarUpdate(addresses, srcAvatar, destAvatar, room); +} + +LeaveRoom::LeaveRoom(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + auto room = roomService_->GetRoom(request.roomAddress); + if (!room) { + throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; + } + + response.roomId = room->GetRoomId(); + + // Cache the addresses before leaving the room in case this avatar was the + // last on their server, to ensure the update messages goes out. + auto addresses = room->GetConnectedAddresses(); + room->LeaveRoom(srcAvatar); + + client->SendLeaveRoomUpdate(addresses, srcAvatar->GetAvatarId(), room->GetRoomId()); +} + +LoginAvatar::LoginAvatar(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "LOGINAVATAR request received " << FromWideString(request.name) << "@" + << FromWideString(request.address); + + auto avatar = avatarService_->GetAvatar(request.name, request.address); + if (!avatar) { + LOG(INFO) << "Login avatar does not exist, creating a new one " + << FromWideString(request.name) << "@" << FromWideString(request.address); + avatar = avatarService_->CreateAvatar(request.name, request.address, request.userId, + request.loginAttributes, request.loginLocation); + } + + avatarService_->LoginAvatar(CHECK_NOTNULL(avatar)); + + if (avatar->GetName().compare(u"SYSTEM") == 0) { + client->GetNode()->RegisterClientAddress(avatar->GetAddress(), client); + roomService_->LoadRoomsFromStorage(request.address); + } else { + client->SendFriendLoginUpdates(avatar); + } + + response.avatar = avatar; +} + +LogoutAvatar::LogoutAvatar(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "LOGOUTAVATAR request received - avatar id:" << request.avatarId; + + auto avatar = avatarService_->GetAvatar(request.avatarId); + + for (auto room : avatar->GetJoinedRooms()) { + auto addresses = room->GetConnectedAddresses(); + room->LeaveRoom(avatar); + + client->SendLeaveRoomUpdate(addresses, avatar->GetAvatarId(), room->GetRoomId()); + } + + client->SendFriendLogoutUpdates(avatar); + + avatarService_->LogoutAvatar(avatar); +} + +RegistrarGetChatServer::RegistrarGetChatServer(RegistrarClient* client, const RequestType& request, ResponseType& response) { + auto& config = client->GetNode()->GetConfig(); + + response.hostname = ToWideString(config.gatewayAddress); + response.port = config.gatewayPort; +} + +RemoveBan::RemoveBan(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "REMOVEBAN request received - removing ban for: " + << FromWideString(request.destAvatarName) << "@" + << FromWideString(request.destAvatarAddress) << " from " + << FromWideString(request.destRoomAddress); + + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + auto bannedAvatar + = avatarService_->GetAvatar(request.destAvatarName, request.destAvatarAddress); + if (!bannedAvatar) { + throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; + } + + auto room = roomService_->GetRoom(request.destRoomAddress); + if (!room) { + throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; + } + + response.destRoomId = room->GetRoomId(); + + room->RemoveBanned(srcAvatar->GetAvatarId(), bannedAvatar->GetAvatarId()); +} + +RemoveFriend::RemoveFriend( + GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} { + LOG(INFO) << "REMOVEFRIEND request received - removing: " << FromWideString(request.destName) + << "@" << FromWideString(request.destAddress) << " from " << request.srcAvatarId + << "@" << FromWideString(request.srcAddress); + + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + auto destAvatar = avatarService_->GetAvatar(request.destName, request.destAddress); + if (!destAvatar) { + throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; + } + + srcAvatar->RemoveFriend(destAvatar); +} + +RemoveIgnore::RemoveIgnore(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} { + LOG(INFO) << "REMOVEIGNORE request received - removing: " << FromWideString(request.destName) << "@" + << FromWideString(request.destAddress) << " from " << request.srcAvatarId << "@" + << FromWideString(request.srcAddress); + + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + auto destAvatar = avatarService_->GetAvatar(request.destName, request.destAddress); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; + } + + srcAvatar->RemoveIgnore(destAvatar); +} + +RemoveInvite::RemoveInvite( + GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "REMOVEINVITE request received - removing invitation for: " + << FromWideString(request.destAvatarName) << "@" + << FromWideString(request.destAvatarAddress) << " to " + << FromWideString(request.destRoomAddress); + + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + auto invitedAvatar + = avatarService_->GetAvatar(request.destAvatarName, request.destAvatarAddress); + if (!invitedAvatar) { + throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; + } + + auto room = roomService_->GetRoom(request.destRoomAddress); + if (!room) { + throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; + } + + response.destRoomId = room->GetRoomId(); + + room->RemoveInvite(srcAvatar->GetAvatarId(), invitedAvatar->GetAvatarId()); +} + +RemoveModerator::RemoveModerator(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "REMOVEMODERATOR request recieved - removing: " << FromWideString(request.destAvatarName) << "@" + << FromWideString(request.destAvatarAddress) << " from " << FromWideString(request.destRoomAddress); + + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + auto moderatorAvatar = avatarService_->GetAvatar(request.destAvatarName, request.destAvatarAddress); + if (!moderatorAvatar) { + throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; + } + + auto room = roomService_->GetRoom(request.destRoomAddress); + if (!room) { + throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; + } + + response.destRoomId = room->GetRoomId(); + + room->RemoveModerator(srcAvatar->GetAvatarId(), moderatorAvatar->GetAvatarId()); +} + +SendInstantMessage::SendInstantMessage( + GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} { + LOG(INFO) << "SENDINSTANTMESSAGE request received " + << " - from " << request.srcAvatarId << "@" << FromWideString(request.srcAddress) << " to " + << FromWideString(request.destName) << "@" << FromWideString(request.destAddress); + + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException(ChatResultCode::SRCAVATARDOESNTEXIST); + } + + auto destAvatar = avatarService_->GetAvatar(request.destName, request.destAddress); + if (!destAvatar) { + throw ChatResultException(ChatResultCode::DESTAVATARDOESNTEXIST); + } + + if (destAvatar->IsIgnored(srcAvatar)) { + throw ChatResultException(ChatResultCode::IGNORING); + } + + client->SendInstantMessageUpdate(srcAvatar, destAvatar, request.message, request.oob); +} + +SendPersistentMessage::SendPersistentMessage(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , messageService_{client->GetNode()->GetMessageService()} { + LOG(INFO) << "SENDPERSISTENTMESSAGE request received:"; + + auto destAvatar = avatarService_->GetAvatar(request.destName, request.destAddress); + if (!destAvatar) { + throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; + } + + PersistentMessage message; + + if (request.avatarPresence) { + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + if (destAvatar->IsIgnored(srcAvatar)) { + throw ChatResultException(ChatResultCode::IGNORING); + } + + message.header.fromName = srcAvatar->GetName(); + message.header.fromAddress = srcAvatar->GetAddress(); + } else { + message.header.fromName = request.srcName; + message.header.fromAddress = destAvatar->GetAddress(); + } + + message.header.sentTime = static_cast(std::time(nullptr)); + message.header.avatarId = destAvatar->GetAvatarId(); + message.header.subject = request.subject; + message.header.category = request.category; + message.message = request.msg; + message.oob = request.oob; + + messageService_->StoreMessage(message); + + response.messageId = message.header.messageId; + + client->SendPersistentMessageUpdate(destAvatar, message.header); +} + +SendRoomMessage::SendRoomMessage( + GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} + , roomService_{client->GetNode()->GetRoomService()} { + LOG(INFO) << "SENDROOMMESSAGE request received " + << " - from " << request.srcAvatarId << "@" << FromWideString(request.srcAddress) + << " to " << FromWideString(request.destRoomAddress); + + auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); + if (!srcAvatar) { + throw ChatResultException(ChatResultCode::SRCAVATARDOESNTEXIST); + } + + auto room = roomService_->GetRoom(request.destRoomAddress); + if (!room) { + throw ChatResultException(ChatResultCode::ADDRESSNOTROOM); + } + + response.roomId = room->GetRoomId(); + + client->SendRoomMessageUpdate( + srcAvatar, room, room->GetNextMessageId(), request.message, request.oob); +} + +SetApiVersion::SetApiVersion( + GatewayClient* client, const RequestType& request, ResponseType& response) { + LOG(INFO) << "SETAPIVERSION request received - version: " << request.version; + response.version = client->GetNode()->GetConfig().version; + response.result = (response.version == request.version) + ? ChatResultCode::SUCCESS + : ChatResultCode::WRONGCHATSERVERFORREQUEST; +} + +SetAvatarAttributes::SetAvatarAttributes(GatewayClient* client, const RequestType& request, ResponseType& response) + : avatarService_{client->GetNode()->GetAvatarService()} { + LOG(INFO) << "SETAVATARATTRIBUTES request received - avatar: " << request.avatarId; + + auto avatar = avatarService_->GetAvatar(request.avatarId); + if (!avatar) { + throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; + } + + response.avatar = avatar; + + if (avatar->GetAttributes() != request.avatarAttributes) { + avatar->SetAttributes(request.avatarAttributes); + + if (request.persistent != 0) { + avatarService_->PersistAvatar(avatar); + } + } +} + +UpdatePersistentMessage::UpdatePersistentMessage(GatewayClient* client, const RequestType& request, ResponseType& response) + : messageService_{client->GetNode()->GetMessageService()} { + LOG(INFO) << "UPDATEPERSISTENTMESSAGE request received"; + messageService_->UpdateMessageStatus( + request.srcAvatarId, request.messageId, request.status); +} diff --git a/src/protocol/RegistrarGetChatServer.cpp b/src/protocol/RegistrarGetChatServer.cpp deleted file mode 100644 index 3472eb2..0000000 --- a/src/protocol/RegistrarGetChatServer.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include "RegistrarGetChatServer.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "RegistrarClient.hpp" -#include "RegistrarNode.hpp" -#include "StationChatConfig.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - - -RegistrarGetChatServer::RegistrarGetChatServer(RegistrarClient* client, const RequestType & request, ResponseType & response) { - auto& config = client->GetNode()->GetConfig(); - - response.hostname = ToWideString(config.gatewayAddress); - response.port = config.gatewayPort; -} diff --git a/src/protocol/RemoveBan.cpp b/src/protocol/RemoveBan.cpp deleted file mode 100644 index 6d58801..0000000 --- a/src/protocol/RemoveBan.cpp +++ /dev/null @@ -1,38 +0,0 @@ -#include "RemoveBan.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -RemoveBan::RemoveBan(GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} { - LOG(INFO) << "REMOVEBAN request received - removing ban for: " - << FromWideString(request.destAvatarName) << "@" - << FromWideString(request.destAvatarAddress) << " from " - << FromWideString(request.destRoomAddress); - - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - auto bannedAvatar - = avatarService_->GetAvatar(request.destAvatarName, request.destAvatarAddress); - if (!bannedAvatar) { - throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; - } - - auto room = roomService_->GetRoom(request.destRoomAddress); - if (!room) { - throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; - } - - response.destRoomId = room->GetRoomId(); - - room->RemoveBanned(srcAvatar->GetAvatarId(), bannedAvatar->GetAvatarId()); -} diff --git a/src/protocol/RemoveFriend.cpp b/src/protocol/RemoveFriend.cpp deleted file mode 100644 index 8f57120..0000000 --- a/src/protocol/RemoveFriend.cpp +++ /dev/null @@ -1,28 +0,0 @@ -#include "RemoveFriend.hpp" - -#include "ChatAvatarService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -RemoveFriend::RemoveFriend( - GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} { - LOG(INFO) << "REMOVEFRIEND request received - removing: " << FromWideString(request.destName) - << "@" << FromWideString(request.destAddress) << " from " << request.srcAvatarId - << "@" << FromWideString(request.srcAddress); - - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - auto destAvatar = avatarService_->GetAvatar(request.destName, request.destAddress); - if (!destAvatar) { - throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; - } - - srcAvatar->RemoveFriend(destAvatar); -} diff --git a/src/protocol/RemoveIgnore.cpp b/src/protocol/RemoveIgnore.cpp deleted file mode 100644 index d932f2c..0000000 --- a/src/protocol/RemoveIgnore.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "RemoveIgnore.hpp" - -#include "ChatAvatarService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -RemoveIgnore::RemoveIgnore(GatewayClient * client, const RequestType & request, ResponseType & response) - : avatarService_{client->GetNode()->GetAvatarService()} { - LOG(INFO) << "REMOVEIGNORE request received - removing: " << FromWideString(request.destName) << "@" - << FromWideString(request.destAddress) << " from " << request.srcAvatarId << "@" - << FromWideString(request.srcAddress); - - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - auto destAvatar = avatarService_->GetAvatar(request.destName, request.destAddress); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; - } - - srcAvatar->RemoveIgnore(destAvatar); -} diff --git a/src/protocol/RemoveInvite.cpp b/src/protocol/RemoveInvite.cpp deleted file mode 100644 index ae34199..0000000 --- a/src/protocol/RemoveInvite.cpp +++ /dev/null @@ -1,39 +0,0 @@ -#include "RemoveInvite.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -RemoveInvite::RemoveInvite( - GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} { - LOG(INFO) << "REMOVEINVITE request received - removing invitation for: " - << FromWideString(request.destAvatarName) << "@" - << FromWideString(request.destAvatarAddress) << " to " - << FromWideString(request.destRoomAddress); - - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - auto invitedAvatar - = avatarService_->GetAvatar(request.destAvatarName, request.destAvatarAddress); - if (!invitedAvatar) { - throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; - } - - auto room = roomService_->GetRoom(request.destRoomAddress); - if (!room) { - throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; - } - - response.destRoomId = room->GetRoomId(); - - room->RemoveInvite(srcAvatar->GetAvatarId(), invitedAvatar->GetAvatarId()); -} diff --git a/src/protocol/RemoveModerator.cpp b/src/protocol/RemoveModerator.cpp deleted file mode 100644 index 6a0be29..0000000 --- a/src/protocol/RemoveModerator.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include "RemoveModerator.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -RemoveModerator::RemoveModerator(GatewayClient * client, const RequestType & request, ResponseType & response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} { - LOG(INFO) << "REMOVEMODERATOR request recieved - removing: " << FromWideString(request.destAvatarName) << "@" - << FromWideString(request.destAvatarAddress) << " from " << FromWideString(request.destRoomAddress); - - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - auto moderatorAvatar = avatarService_->GetAvatar(request.destAvatarName, request.destAvatarAddress); - if (!moderatorAvatar) { - throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; - } - - auto room = roomService_->GetRoom(request.destRoomAddress); - if (!room) { - throw ChatResultException{ChatResultCode::ADDRESSNOTROOM}; - } - - response.destRoomId = room->GetRoomId(); - - room->RemoveModerator(srcAvatar->GetAvatarId(), moderatorAvatar->GetAvatarId()); -} diff --git a/src/protocol/SendInstantMessage.cpp b/src/protocol/SendInstantMessage.cpp deleted file mode 100644 index 9475a94..0000000 --- a/src/protocol/SendInstantMessage.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "SendInstantMessage.hpp" - -#include "ChatAvatarService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -SendInstantMessage::SendInstantMessage( - GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} { - LOG(INFO) << "SENDINSTANTMESSAGE request received " - << " - from " << request.srcAvatarId << "@" << FromWideString(request.srcAddress) << " to " - << FromWideString(request.destName) << "@" << FromWideString(request.destAddress); - - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException(ChatResultCode::SRCAVATARDOESNTEXIST); - } - - auto destAvatar = avatarService_->GetAvatar(request.destName, request.destAddress); - if (!destAvatar) { - throw ChatResultException(ChatResultCode::DESTAVATARDOESNTEXIST); - } - - if (destAvatar->IsIgnored(srcAvatar)) { - throw ChatResultException(ChatResultCode::IGNORING); - } - - client->SendInstantMessageUpdate(srcAvatar, destAvatar, request.message, request.oob); -} diff --git a/src/protocol/SendPersistentMessage.cpp b/src/protocol/SendPersistentMessage.cpp deleted file mode 100644 index 2b437c6..0000000 --- a/src/protocol/SendPersistentMessage.cpp +++ /dev/null @@ -1,52 +0,0 @@ -#include "SendPersistentMessage.hpp" - -#include "ChatAvatarService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "PersistentMessageService.hpp" -#include "StreamUtils.hpp" - -#include "easylogging++.h" - -SendPersistentMessage::SendPersistentMessage(GatewayClient * client, const RequestType & request, ResponseType & response) - : avatarService_{client->GetNode()->GetAvatarService()} - , messageService_{client->GetNode()->GetMessageService()} { - LOG(INFO) << "SENDPERSISTENTMESSAGE request received:"; - - auto destAvatar = avatarService_->GetAvatar(request.destName, request.destAddress); - if (!destAvatar) { - throw ChatResultException{ChatResultCode::DESTAVATARDOESNTEXIST}; - } - - PersistentMessage message; - - if (request.avatarPresence) { - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - if (destAvatar->IsIgnored(srcAvatar)) { - throw ChatResultException(ChatResultCode::IGNORING); - } - - message.header.fromName = srcAvatar->GetName(); - message.header.fromAddress = srcAvatar->GetAddress(); - } else { - message.header.fromName = request.srcName; - message.header.fromAddress = destAvatar->GetAddress(); - } - - message.header.sentTime = static_cast(std::time(nullptr)); - message.header.avatarId = destAvatar->GetAvatarId(); - message.header.subject = request.subject; - message.header.category = request.category; - message.message = request.msg; - message.oob = request.oob; - - messageService_->StoreMessage(message); - - response.messageId = message.header.messageId; - - client->SendPersistentMessageUpdate(destAvatar, message.header); -} diff --git a/src/protocol/SendRoomMessage.cpp b/src/protocol/SendRoomMessage.cpp deleted file mode 100644 index 5774c39..0000000 --- a/src/protocol/SendRoomMessage.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "SendRoomMessage.hpp" - -#include "ChatAvatarService.hpp" -#include "ChatRoomService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StringUtils.hpp" - -#include "easylogging++.h" - -SendRoomMessage::SendRoomMessage( - GatewayClient* client, const RequestType& request, ResponseType& response) - : avatarService_{client->GetNode()->GetAvatarService()} - , roomService_{client->GetNode()->GetRoomService()} { - LOG(INFO) << "SENDROOMMESSAGE request received " - << " - from " << request.srcAvatarId << "@" << FromWideString(request.srcAddress) - << " to " << FromWideString(request.destRoomAddress); - - auto srcAvatar = avatarService_->GetAvatar(request.srcAvatarId); - if (!srcAvatar) { - throw ChatResultException(ChatResultCode::SRCAVATARDOESNTEXIST); - } - - auto room = roomService_->GetRoom(request.destRoomAddress); - if (!room) { - throw ChatResultException(ChatResultCode::ADDRESSNOTROOM); - } - - response.roomId = room->GetRoomId(); - - client->SendRoomMessageUpdate( - srcAvatar, room, room->GetNextMessageId(), request.message, request.oob); -} diff --git a/src/protocol/SetApiVersion.cpp b/src/protocol/SetApiVersion.cpp deleted file mode 100644 index a16f0b5..0000000 --- a/src/protocol/SetApiVersion.cpp +++ /dev/null @@ -1,16 +0,0 @@ -#include "SetApiVersion.hpp" - -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "StationChatConfig.hpp" - -#include "easylogging++.h" - -SetApiVersion::SetApiVersion( - GatewayClient* client, const RequestType& request, ResponseType& response) { - LOG(INFO) << "SETAPIVERSION request received - version: " << request.version; - response.version = client->GetNode()->GetConfig().version; - response.result = (response.version == request.version) - ? ChatResultCode::SUCCESS - : ChatResultCode::WRONGCHATSERVERFORREQUEST; -} diff --git a/src/protocol/SetAvatarAttributes.cpp b/src/protocol/SetAvatarAttributes.cpp deleted file mode 100644 index 070125e..0000000 --- a/src/protocol/SetAvatarAttributes.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "SetAvatarAttributes.hpp" - -#include "ChatAvatarService.hpp" -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" - -#include "easylogging++.h" - -SetAvatarAttributes::SetAvatarAttributes(GatewayClient * client, const RequestType & request, ResponseType & response) - : avatarService_{client->GetNode()->GetAvatarService()} { - LOG(INFO) << "SETAVATARATTRIBUTES request received - avatar: " << request.avatarId; - - auto avatar = avatarService_->GetAvatar(request.avatarId); - if (!avatar) { - throw ChatResultException{ChatResultCode::SRCAVATARDOESNTEXIST}; - } - - response.avatar = avatar; - - if (avatar->GetAttributes() != request.avatarAttributes) { - avatar->SetAttributes(request.avatarAttributes); - - if (request.persistent != 0) { - avatarService_->PersistAvatar(avatar); - } - } -} diff --git a/src/protocol/UpdatePersistentMessage.cpp b/src/protocol/UpdatePersistentMessage.cpp deleted file mode 100644 index f5b0f6b..0000000 --- a/src/protocol/UpdatePersistentMessage.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "UpdatePersistentMessage.hpp" - -#include "GatewayClient.hpp" -#include "GatewayNode.hpp" -#include "PersistentMessageService.hpp" - -#include "easylogging++.h" - -UpdatePersistentMessage::UpdatePersistentMessage(GatewayClient * client, const RequestType & request, ResponseType & response) - : messageService_{client->GetNode()->GetMessageService()} { - LOG(INFO) << "UPDATEPERSISTENTMESSAGE request received"; - messageService_->UpdateMessageStatus( - request.srcAvatarId, request.messageId, request.status); -}