diff options
| author | Shauren <shauren.trinity@gmail.com> | 2021-05-01 20:16:10 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-05-01 20:16:10 +0200 |
| commit | fb66575d38d2ba7ffc24c29824fa75d7019de549 (patch) | |
| tree | 9b263e8914862f92d5e6f2fc23450a2f973df461 /src/server/game/Chat | |
| parent | d6dfb6c54c3296461ec73ea5d969f7a5a704541b (diff) | |
Core/Grids: Move packet sending functionality out of MessageDistDeliverer and into separate, customizable class and unify LocalizedPacketDo, LocalizedPacketListDo as generic localizable action
Diffstat (limited to 'src/server/game/Chat')
| -rw-r--r-- | src/server/game/Chat/Channels/Channel.cpp | 93 | ||||
| -rw-r--r-- | src/server/game/Chat/Channels/ChannelAppenders.h | 14 |
2 files changed, 59 insertions, 48 deletions
diff --git a/src/server/game/Chat/Channels/Channel.cpp b/src/server/game/Chat/Channels/Channel.cpp index 11fe3deb710..318c7b76108 100644 --- a/src/server/game/Chat/Channels/Channel.cpp +++ b/src/server/game/Chat/Channels/Channel.cpp @@ -247,13 +247,14 @@ void Channel::JoinChannel(Player* player, std::string const& pass) { LocaleConstant localeIdx = sWorld->GetAvailableDbcLocale(locale); - WorldPackets::Channel::ChannelNotifyJoined* notify = new WorldPackets::Channel::ChannelNotifyJoined(); - //notify->ChannelWelcomeMsg = ""; - notify->ChatChannelID = _channelId; - //notify->InstanceID = 0; - notify->_ChannelFlags = _channelFlags; - notify->_Channel = GetName(localeIdx); - notify->ChannelGUID = _channelGuid; + Trinity::PacketSenderOwning<WorldPackets::Channel::ChannelNotifyJoined>* notify = new Trinity::PacketSenderOwning<WorldPackets::Channel::ChannelNotifyJoined>(); + //notify->Data.ChannelWelcomeMsg = ""; + notify->Data.ChatChannelID = _channelId; + //notify->Data.InstanceID = 0; + notify->Data._ChannelFlags = _channelFlags; + notify->Data._Channel = GetName(localeIdx); + notify->Data.ChannelGUID = _channelGuid; + notify->Data.Write(); return notify; }; @@ -309,10 +310,11 @@ void Channel::LeaveChannel(Player* player, bool send, bool suspend) { LocaleConstant localeIdx = sWorld->GetAvailableDbcLocale(locale); - WorldPackets::Channel::ChannelNotifyLeft* notify = new WorldPackets::Channel::ChannelNotifyLeft(); - notify->Channel = GetName(localeIdx); - notify->ChatChannelID = _channelId; - notify->Suspended = suspend; + Trinity::PacketSenderOwning<WorldPackets::Channel::ChannelNotifyLeft>* notify = new Trinity::PacketSenderOwning<WorldPackets::Channel::ChannelNotifyLeft>(); + notify->Data.Channel = GetName(localeIdx); + notify->Data.ChatChannelID = _channelId; + notify->Data.Suspended = suspend; + notify->Data.Write(); return notify; }; @@ -736,16 +738,18 @@ void Channel::Say(ObjectGuid const& guid, std::string const& what, uint32 lang) { LocaleConstant localeIdx = sWorld->GetAvailableDbcLocale(locale); - WorldPackets::Chat::Chat* packet = new WorldPackets::Chat::Chat(); + Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>* packet = new Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>(); if (Player* player = ObjectAccessor::FindConnectedPlayer(guid)) - packet->Initialize(CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, GetName(localeIdx)); + packet->Data.Initialize(CHAT_MSG_CHANNEL, Language(lang), player, player, what, 0, GetName(localeIdx)); else { - packet->Initialize(CHAT_MSG_CHANNEL, Language(lang), nullptr, nullptr, what, 0, GetName(localeIdx)); - packet->SenderGUID = guid; - packet->TargetGUID = guid; + packet->Data.Initialize(CHAT_MSG_CHANNEL, Language(lang), nullptr, nullptr, what, 0, GetName(localeIdx)); + packet->Data.SenderGUID = guid; + packet->Data.TargetGUID = guid; } + packet->Data.Write(); + return packet; }; @@ -778,16 +782,18 @@ void Channel::AddonSay(ObjectGuid const& guid, std::string const& prefix, std::s { LocaleConstant localeIdx = sWorld->GetAvailableDbcLocale(locale); - WorldPackets::Chat::Chat* packet = new WorldPackets::Chat::Chat(); + Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>* packet = new Trinity::PacketSenderOwning<WorldPackets::Chat::Chat>(); if (Player* player = ObjectAccessor::FindConnectedPlayer(guid)) - packet->Initialize(CHAT_MSG_CHANNEL, isLogged ? LANG_ADDON_LOGGED : LANG_ADDON, player, player, what, 0, GetName(localeIdx), DEFAULT_LOCALE, prefix); + packet->Data.Initialize(CHAT_MSG_CHANNEL, isLogged ? LANG_ADDON_LOGGED : LANG_ADDON, player, player, what, 0, GetName(localeIdx), DEFAULT_LOCALE, prefix); else { - packet->Initialize(CHAT_MSG_CHANNEL, isLogged ? LANG_ADDON_LOGGED : LANG_ADDON, nullptr, nullptr, what, 0, GetName(localeIdx), DEFAULT_LOCALE, prefix); - packet->SenderGUID = guid; - packet->TargetGUID = guid; + packet->Data.Initialize(CHAT_MSG_CHANNEL, isLogged ? LANG_ADDON_LOGGED : LANG_ADDON, nullptr, nullptr, what, 0, GetName(localeIdx), DEFAULT_LOCALE, prefix); + packet->Data.SenderGUID = guid; + packet->Data.TargetGUID = guid; } + packet->Data.Write(); + return packet; }; @@ -911,12 +917,13 @@ void Channel::JoinNotify(Player const* player) { LocaleConstant localeIdx = sWorld->GetAvailableDbcLocale(locale); - WorldPackets::Channel::UserlistAdd* userlistAdd = new WorldPackets::Channel::UserlistAdd(); - userlistAdd->AddedUserGUID = guid; - userlistAdd->_ChannelFlags = GetFlags(); - userlistAdd->UserFlags = GetPlayerFlags(guid); - userlistAdd->ChannelID = GetChannelId(); - userlistAdd->ChannelName = GetName(localeIdx); + Trinity::PacketSenderOwning<WorldPackets::Channel::UserlistAdd>* userlistAdd = new Trinity::PacketSenderOwning<WorldPackets::Channel::UserlistAdd>(); + userlistAdd->Data.AddedUserGUID = guid; + userlistAdd->Data._ChannelFlags = GetFlags(); + userlistAdd->Data.UserFlags = GetPlayerFlags(guid); + userlistAdd->Data.ChannelID = GetChannelId(); + userlistAdd->Data.ChannelName = GetName(localeIdx); + userlistAdd->Data.Write(); return userlistAdd; }; @@ -928,12 +935,13 @@ void Channel::JoinNotify(Player const* player) { LocaleConstant localeIdx = sWorld->GetAvailableDbcLocale(locale); - WorldPackets::Channel::UserlistUpdate* userlistUpdate = new WorldPackets::Channel::UserlistUpdate(); - userlistUpdate->UpdatedUserGUID = guid; - userlistUpdate->_ChannelFlags = GetFlags(); - userlistUpdate->UserFlags = GetPlayerFlags(guid); - userlistUpdate->ChannelID = GetChannelId(); - userlistUpdate->ChannelName = GetName(localeIdx); + Trinity::PacketSenderOwning<WorldPackets::Channel::UserlistUpdate>* userlistUpdate = new Trinity::PacketSenderOwning<WorldPackets::Channel::UserlistUpdate>(); + userlistUpdate->Data.UpdatedUserGUID = guid; + userlistUpdate->Data._ChannelFlags = GetFlags(); + userlistUpdate->Data.UserFlags = GetPlayerFlags(guid); + userlistUpdate->Data.ChannelID = GetChannelId(); + userlistUpdate->Data.ChannelName = GetName(localeIdx); + userlistUpdate->Data.Write(); return userlistUpdate; }; @@ -949,11 +957,12 @@ void Channel::LeaveNotify(Player const* player) { LocaleConstant localeIdx = sWorld->GetAvailableDbcLocale(locale); - WorldPackets::Channel::UserlistRemove* userlistRemove = new WorldPackets::Channel::UserlistRemove(); - userlistRemove->RemovedUserGUID = guid; - userlistRemove->_ChannelFlags = GetFlags(); - userlistRemove->ChannelID = GetChannelId(); - userlistRemove->ChannelName = GetName(localeIdx); + Trinity::PacketSenderOwning<WorldPackets::Channel::UserlistRemove>* userlistRemove = new Trinity::PacketSenderOwning<WorldPackets::Channel::UserlistRemove>(); + userlistRemove->Data.RemovedUserGUID = guid; + userlistRemove->Data._ChannelFlags = GetFlags(); + userlistRemove->Data.ChannelID = GetChannelId(); + userlistRemove->Data.ChannelName = GetName(localeIdx); + userlistRemove->Data.Write(); return userlistRemove; }; @@ -1000,7 +1009,7 @@ void Channel::SetMute(ObjectGuid const& guid, bool set) template <class Builder> void Channel::SendToAll(Builder& builder, ObjectGuid const& guid) const { - Trinity::LocalizedPacketDo<Builder> localizer(builder); + Trinity::LocalizedDo<Builder> localizer(builder); for (PlayerContainer::value_type const& i : _playersStore) if (Player* player = ObjectAccessor::FindConnectedPlayer(i.first)) @@ -1011,7 +1020,7 @@ void Channel::SendToAll(Builder& builder, ObjectGuid const& guid) const template <class Builder> void Channel::SendToAllButOne(Builder& builder, ObjectGuid const& who) const { - Trinity::LocalizedPacketDo<Builder> localizer(builder); + Trinity::LocalizedDo<Builder> localizer(builder); for (PlayerContainer::value_type const& i : _playersStore) if (i.first != who) @@ -1022,7 +1031,7 @@ void Channel::SendToAllButOne(Builder& builder, ObjectGuid const& who) const template <class Builder> void Channel::SendToOne(Builder& builder, ObjectGuid const& who) const { - Trinity::LocalizedPacketDo<Builder> localizer(builder); + Trinity::LocalizedDo<Builder> localizer(builder); if (Player* player = ObjectAccessor::FindConnectedPlayer(who)) localizer(player); @@ -1031,7 +1040,7 @@ void Channel::SendToOne(Builder& builder, ObjectGuid const& who) const template <class Builder> void Channel::SendToAllWithAddon(Builder& builder, std::string const& addonPrefix, ObjectGuid const& guid /*= ObjectGuid::Empty*/) const { - Trinity::LocalizedPacketDo<Builder> localizer(builder); + Trinity::LocalizedDo<Builder> localizer(builder); for (PlayerContainer::value_type const& i : _playersStore) if (Player* player = ObjectAccessor::FindConnectedPlayer(i.first)) diff --git a/src/server/game/Chat/Channels/ChannelAppenders.h b/src/server/game/Chat/Channels/ChannelAppenders.h index eb7b9d70c4c..b520f3e8b2a 100644 --- a/src/server/game/Chat/Channels/ChannelAppenders.h +++ b/src/server/game/Chat/Channels/ChannelAppenders.h @@ -21,6 +21,7 @@ #include "Channel.h" #include "ChannelPackets.h" #include "CharacterCache.h" +#include "GridNotifiers.h" #include "World.h" // initial packet data (notify type and channel name) @@ -31,16 +32,17 @@ class ChannelNameBuilder ChannelNameBuilder(Channel const* source, PacketModifier const& modifier) : _source(source), _modifier(modifier){ } - WorldPackets::Packet* operator()(LocaleConstant locale) const + Trinity::PacketSenderOwning<WorldPackets::Channel::ChannelNotify>* operator()(LocaleConstant locale) const { // LocalizedPacketDo sends client DBC locale, we need to get available to server locale LocaleConstant localeIdx = sWorld->GetAvailableDbcLocale(locale); - WorldPackets::Channel::ChannelNotify* data = new WorldPackets::Channel::ChannelNotify(); - data->Type = _modifier.NotificationType; - data->_Channel = _source->GetName(localeIdx); - _modifier.Append(*data); - return data; + Trinity::PacketSenderOwning<WorldPackets::Channel::ChannelNotify>* sender = new Trinity::PacketSenderOwning<WorldPackets::Channel::ChannelNotify>(); + sender->Data.Type = _modifier.NotificationType; + sender->Data._Channel = _source->GetName(localeIdx); + _modifier.Append(sender->Data); + sender->Data.Write(); + return sender; } private: |
