mirror of
https://github.com/SWG-Source/stationapi.git
synced 2026-07-13 21:01:03 -04:00
53 lines
1.8 KiB
C++
53 lines
1.8 KiB
C++
#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<uint32_t>(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);
|
|
}
|