aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/ChannelHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/ChannelHandler.cpp')
-rw-r--r--src/server/game/Handlers/ChannelHandler.cpp292
1 files changed, 47 insertions, 245 deletions
diff --git a/src/server/game/Handlers/ChannelHandler.cpp b/src/server/game/Handlers/ChannelHandler.cpp
index 245665d8d3b..c5e1c3e7fad 100644
--- a/src/server/game/Handlers/ChannelHandler.cpp
+++ b/src/server/game/Handlers/ChannelHandler.cpp
@@ -70,270 +70,72 @@ void WorldSession::HandleLeaveChannel(WorldPackets::Channel::LeaveChannel& packe
}
}
-void WorldSession::HandleChannelList(WorldPackets::Channel::ChannelListRequest& packet)
+template<void(Channel::*CommandFunction)(Player const*)>
+void WorldSession::HandleChannelCommand(WorldPackets::Channel::ChannelPlayerCommand& packet)
{
TC_LOG_DEBUG("chat.system", "%s %s ChannelName: %s",
GetOpcodeNameForLogging(packet.GetOpcode()).c_str(), GetPlayerInfo().c_str(), packet.ChannelName.c_str());
if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
if (Channel* channel = cMgr->GetChannel(packet.ChannelName, GetPlayer()))
- channel->List(GetPlayer());
+ (channel->*CommandFunction)(GetPlayer());
}
-void WorldSession::HandleChannelPassword(WorldPacket& recvPacket)
+template<void(Channel::*CommandFunction)(Player const*, std::string const&)>
+void WorldSession::HandleChannelPlayerCommand(WorldPackets::Channel::ChannelPlayerCommand& packet)
{
- uint32 nameLength = recvPacket.ReadBits(8);
- uint32 passLength = recvPacket.ReadBits(7);
-
- std::string channelName = recvPacket.ReadString(nameLength);
- std::string password = recvPacket.ReadString(passLength);
-
- TC_LOG_DEBUG("chat.system", "CMSG_CHANNEL_PASSWORD %s Channel: %s, Password: %s",
- GetPlayerInfo().c_str(), channelName.c_str(), password.c_str());
-
- if (password.length() > MAX_CHANNEL_PASS_STR)
- return;
-
- if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
- channel->Password(GetPlayer(), password);
-}
-
-void WorldSession::HandleChannelSetOwner(WorldPacket& recvPacket)
-{
- uint32 channelLength = recvPacket.ReadBits(8);
- uint32 nameLength = recvPacket.ReadBits(7);
-
- std::string targetName = recvPacket.ReadString(nameLength);
- std::string channelName = recvPacket.ReadString(channelLength);
-
- TC_LOG_DEBUG("chat.system", "CMSG_CHANNEL_SET_OWNER %s Channel: %s, Target: %s",
- GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str());
-
- if (!normalizePlayerName(targetName))
- return;
-
- if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
- channel->SetOwner(GetPlayer(), targetName);
-}
-
-void WorldSession::HandleChannelOwner(WorldPacket& recvPacket)
-{
- uint32 length = recvPacket.ReadBits(8);
- std::string channelName = recvPacket.ReadString(length);
-
- TC_LOG_DEBUG("chat.system", "CMSG_CHANNEL_OWNER %s Channel: %s",
- GetPlayerInfo().c_str(), channelName.c_str());
-
- if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
- channel->SendWhoOwner(GetPlayer());
-}
-
-void WorldSession::HandleChannelModerator(WorldPacket& recvPacket)
-{
- uint32 channelLength = recvPacket.ReadBits(8);
- uint32 nameLength = recvPacket.ReadBits(7);
-
- std::string targetName = recvPacket.ReadString(nameLength);
- std::string channelName = recvPacket.ReadString(channelLength);
-
- TC_LOG_DEBUG("chat.system", "CMSG_CHANNEL_MODERATOR %s Channel: %s, Target: %s",
- GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str());
-
- if (!normalizePlayerName(targetName))
- return;
-
- if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
- channel->SetModerator(GetPlayer(), targetName);
-}
-
-void WorldSession::HandleChannelUnmoderator(WorldPacket& recvPacket)
-{
- uint32 nameLength = recvPacket.ReadBits(7);
- uint32 channelLength = recvPacket.ReadBits(8);
-
- std::string channelName = recvPacket.ReadString(channelLength);
- std::string targetName = recvPacket.ReadString(nameLength);
-
- TC_LOG_DEBUG("chat.system", "CMSG_CHANNEL_UNMODERATOR %s Channel: %s, Target: %s",
- GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str());
-
- if (!normalizePlayerName(targetName))
- return;
-
- if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
- channel->UnsetModerator(GetPlayer(), targetName);
-}
-
-void WorldSession::HandleChannelMute(WorldPacket& recvPacket)
-{
- uint32 channelLength = recvPacket.ReadBits(8);
- uint32 nameLength = recvPacket.ReadBits(7);
-
- std::string channelName = recvPacket.ReadString(channelLength);
- std::string targetName = recvPacket.ReadString(nameLength);
-
- TC_LOG_DEBUG("chat.system", "CMSG_CHANNEL_MUTE %s Channel: %s, Target: %s",
- GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str());
-
- if (!normalizePlayerName(targetName))
- return;
-
- if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
- channel->SetMute(GetPlayer(), targetName);
-}
-
-void WorldSession::HandleChannelUnmute(WorldPacket& recvPacket)
-{
- uint32 nameLength = recvPacket.ReadBits(8);
- uint32 channelLength = recvPacket.ReadBits(7);
-
- std::string targetName = recvPacket.ReadString(nameLength);
- std::string channelName = recvPacket.ReadString(channelLength);
-
- TC_LOG_DEBUG("chat.system", "CMSG_CHANNEL_UNMUTE %s Channel: %s, Target: %s",
- GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str());
-
- if (!normalizePlayerName(targetName))
- return;
-
- if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
- channel->UnsetMute(GetPlayer(), targetName);
-}
-
-void WorldSession::HandleChannelInvite(WorldPacket& recvPacket)
-{
- uint32 nameLength = recvPacket.ReadBits(7);
- uint32 channelLength = recvPacket.ReadBits(8);
-
- std::string targetName = recvPacket.ReadString(nameLength);
- std::string channelName = recvPacket.ReadString(channelLength);
-
- TC_LOG_DEBUG("chat.system", "CMSG_CHANNEL_INVITE %s Channel: %s, Target: %s",
- GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str());
-
- if (!normalizePlayerName(targetName))
- return;
-
- if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
- channel->Invite(GetPlayer(), targetName);
-}
-
-void WorldSession::HandleChannelKick(WorldPacket& recvPacket)
-{
- uint32 channelLength = recvPacket.ReadBits(8);
- uint32 nameLength = recvPacket.ReadBits(7);
-
- std::string channelName = recvPacket.ReadString(channelLength);
- std::string targetName = recvPacket.ReadString(nameLength);
-
- TC_LOG_DEBUG("chat.system", "CMSG_CHANNEL_KICK %s Channel: %s, Target: %s",
- GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str());
-
- if (!normalizePlayerName(targetName))
- return;
-
- if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
- channel->Kick(GetPlayer(), targetName);
-}
-
-void WorldSession::HandleChannelBan(WorldPacket& recvPacket)
-{
- uint32 channelLength, nameLength;
- std::string channelName, targetName;
-
- channelLength = recvPacket.ReadBits(8);
- nameLength = recvPacket.ReadBits(7);
-
- targetName = recvPacket.ReadString(nameLength);
- channelName = recvPacket.ReadString(channelLength);
-
- TC_LOG_DEBUG("chat.system", "CMSG_CHANNEL_BAN %s Channel: %s, Target: %s",
- GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str());
-
- if (!normalizePlayerName(targetName))
+ if (packet.Name.length() >= MAX_CHANNEL_NAME_STR)
+ {
+ TC_LOG_DEBUG("chat.system", "%s %s ChannelName: %s, Name: %s, Name too long.",
+ GetOpcodeNameForLogging(packet.GetOpcode()).c_str(), GetPlayerInfo().c_str(), packet.ChannelName.c_str(), packet.Name.c_str());
return;
+ }
- if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
- channel->Ban(GetPlayer(), targetName);
-}
-
-void WorldSession::HandleChannelUnban(WorldPacket& recvPacket)
-{
- uint32 channelLength = recvPacket.ReadBits(7);
- uint32 nameLength = recvPacket.ReadBits(8);
-
- std::string targetName = recvPacket.ReadString(nameLength);
- std::string channelName = recvPacket.ReadString(channelLength);
-
- TC_LOG_DEBUG("chat.system", "CMSG_CHANNEL_UNBAN %s Channel: %s, Target: %s",
- GetPlayerInfo().c_str(), channelName.c_str(), targetName.c_str());
+ TC_LOG_DEBUG("chat.system", "%s %s ChannelName: %s, Name: %s",
+ GetOpcodeNameForLogging(packet.GetOpcode()).c_str(), GetPlayerInfo().c_str(), packet.ChannelName.c_str(), packet.Name.c_str());
- if (!normalizePlayerName(targetName))
+ if (!normalizePlayerName(packet.Name))
return;
if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
- channel->UnBan(GetPlayer(), targetName);
-}
-
-void WorldSession::HandleChannelAnnouncements(WorldPacket& recvPacket)
-{
- uint32 length = recvPacket.ReadBits(8);
- std::string channelName = recvPacket.ReadString(length);
-
- TC_LOG_DEBUG("chat.system", "CMSG_CHANNEL_ANNOUNCEMENTS %s Channel: %s",
- GetPlayerInfo().c_str(), channelName.c_str());
-
- if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
- channel->Announce(GetPlayer());
+ if (Channel* channel = cMgr->GetChannel(packet.ChannelName, GetPlayer()))
+ (channel->*CommandFunction)(GetPlayer(), packet.Name);
}
-void WorldSession::HandleGetChannelMemberCount(WorldPacket &recvPacket)
+template<>
+void WorldSession::HandleChannelPlayerCommand<&Channel::Password>(WorldPackets::Channel::ChannelPlayerCommand& packet)
{
- std::string channelName;
- recvPacket >> channelName;
-
- TC_LOG_DEBUG("chat.system", "CMSG_GET_CHANNEL_MEMBER_COUNT %s Channel: %s",
- GetPlayerInfo().c_str(), channelName.c_str());
-
- if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
+ if (packet.Name.length() > MAX_CHANNEL_PASS_STR)
{
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
- {
- TC_LOG_DEBUG("chat.system", "SMSG_CHANNEL_MEMBER_COUNT %s Channel: %s Count: %u",
- GetPlayerInfo().c_str(), channelName.c_str(), channel->GetNumPlayers());
-
- WorldPacket data(SMSG_CHANNEL_MEMBER_COUNT, channel->GetName().size() + 1 + 4);
- data << channel->GetName();
- data << uint8(channel->GetFlags());
- data << uint32(channel->GetNumPlayers());
- SendPacket(&data);
- }
+ TC_LOG_DEBUG("chat.system", "%s %s ChannelName: %s, Password: %s, Password too long.",
+ GetOpcodeNameForLogging(packet.GetOpcode()).c_str(), GetPlayerInfo().c_str(), packet.ChannelName.c_str(), packet.Name.c_str());
+ return;
}
-}
-
-void WorldSession::HandleSetChannelWatch(WorldPacket& recvPacket)
-{
- std::string channelName;
- recvPacket >> channelName;
- TC_LOG_DEBUG("chat.system", "CMSG_SET_CHANNEL_WATCH %s Channel: %s",
- GetPlayerInfo().c_str(), channelName.c_str());
+ TC_LOG_DEBUG("chat.system", "%s %s ChannelName: %s, Password: %s",
+ GetOpcodeNameForLogging(packet.GetOpcode()).c_str(), GetPlayerInfo().c_str(), packet.ChannelName.c_str(), packet.Name.c_str());
- /*
- if (ChannelMgr* cMgr = channelMgr(GetPlayer()->GetTeam()))
- if (Channel* channel = cMgr->GetChannel(channelName, GetPlayer()))
- channel->JoinNotify(GetPlayer());
- */
-}
+ if (ChannelMgr* cMgr = ChannelMgr::ForTeam(GetPlayer()->GetTeam()))
+ if (Channel* channel = cMgr->GetChannel(packet.ChannelName, GetPlayer()))
+ channel->Password(GetPlayer(), packet.Name);
+}
+
+template void WorldSession::HandleChannelCommand<&Channel::Announce>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelPlayerCommand<&Channel::Ban>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelCommand<&Channel::DeclineInvite>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelPlayerCommand<&Channel::Invite>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelPlayerCommand<&Channel::Kick>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelCommand<&Channel::List>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelPlayerCommand<&Channel::SetModerator>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelPlayerCommand<&Channel::SetMute>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelCommand<&Channel::SendWhoOwner>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelPlayerCommand<&Channel::SetOwner>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelPlayerCommand<&Channel::SilenceAll>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelPlayerCommand<&Channel::SilenceVoice>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelPlayerCommand<&Channel::UnBan>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelPlayerCommand<&Channel::UnsetModerator>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelPlayerCommand<&Channel::UnsetMute>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelPlayerCommand<&Channel::UnsilenceAll>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelPlayerCommand<&Channel::UnsilenceVoice>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelCommand<&Channel::DeVoice>(WorldPackets::Channel::ChannelPlayerCommand&);
+template void WorldSession::HandleChannelCommand<&Channel::Voice>(WorldPackets::Channel::ChannelPlayerCommand&);