diff options
-rw-r--r-- | src/game/ChannelHandler.cpp | 3 | ||||
-rw-r--r-- | src/game/ChannelMgr.cpp | 97 | ||||
-rw-r--r-- | src/game/ChannelMgr.h | 73 | ||||
-rw-r--r-- | src/game/Makefile.am | 1 | ||||
-rw-r--r-- | win/VC100/game.vcxproj | 1 | ||||
-rw-r--r-- | win/VC80/game.vcproj | 4 | ||||
-rw-r--r-- | win/VC90/game.vcproj | 4 |
7 files changed, 119 insertions, 64 deletions
diff --git a/src/game/ChannelHandler.cpp b/src/game/ChannelHandler.cpp index 9706e5657e7..e3c10afe81f 100644 --- a/src/game/ChannelHandler.cpp +++ b/src/game/ChannelHandler.cpp @@ -24,9 +24,6 @@ #include "ObjectMgr.h" // for normalizePlayerName #include "ChannelMgr.h" -INSTANTIATE_SINGLETON_1( AllianceChannelMgr ); -INSTANTIATE_SINGLETON_1( HordeChannelMgr ); - void WorldSession::HandleJoinChannel(WorldPacket& recvPacket) { sLog.outDebug("Opcode %u", recvPacket.GetOpcode()); diff --git a/src/game/ChannelMgr.cpp b/src/game/ChannelMgr.cpp new file mode 100644 index 00000000000..09d172155cc --- /dev/null +++ b/src/game/ChannelMgr.cpp @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2005-2009 MaNGOS <http://getmangos.com/> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "ChannelMgr.h" +#include "Policies/SingletonImp.h" +#include "World.h" + +INSTANTIATE_SINGLETON_1( AllianceChannelMgr ); +INSTANTIATE_SINGLETON_1( HordeChannelMgr ); + +ChannelMgr* channelMgr(uint32 team) +{ + if (sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) + return &MaNGOS::Singleton<AllianceChannelMgr>::Instance(); // cross-faction + + if(team == ALLIANCE) + return &MaNGOS::Singleton<AllianceChannelMgr>::Instance(); + if(team == HORDE) + return &MaNGOS::Singleton<HordeChannelMgr>::Instance(); + + return NULL; +} + +ChannelMgr::~ChannelMgr() +{ + for(ChannelMap::iterator itr = channels.begin();itr!=channels.end(); ++itr) + delete itr->second; + + channels.clear(); +} + +Channel *ChannelMgr::GetJoinChannel(std::string name, uint32 channel_id) +{ + if (channels.find(name) == channels.end()) + { + Channel *nchan = new Channel(name,channel_id, team); + channels[name] = nchan; + } + + return channels[name]; +} + +Channel *ChannelMgr::GetChannel(std::string name, Player *p, bool pkt) +{ + ChannelMap::const_iterator i = channels.find(name); + + if(i == channels.end()) + { + if(pkt) + { + WorldPacket data; + MakeNotOnPacket(&data,name); + p->GetSession()->SendPacket(&data); + } + + return NULL; + } + else + return i->second; +} + +void ChannelMgr::LeftChannel(std::string name) +{ + ChannelMap::const_iterator i = channels.find(name); + + if(i == channels.end()) + return; + + Channel* channel = i->second; + + if(channel->GetNumPlayers() == 0 && !channel->IsConstant()) + { + channels.erase(name); + delete channel; + } +} + +void ChannelMgr::MakeNotOnPacket(WorldPacket *data, std::string name) +{ + data->Initialize(SMSG_CHANNEL_NOTIFY, (1+10)); // we guess size + (*data) << (uint8)0x05 << name; +} diff --git a/src/game/ChannelMgr.h b/src/game/ChannelMgr.h index 956309e9873..f65a8520648 100644 --- a/src/game/ChannelMgr.h +++ b/src/game/ChannelMgr.h @@ -17,8 +17,12 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#ifndef TRINITYCORE_CHANNELMGR_H -#define TRINITYCORE_CHANNELMGR_H +#ifndef MANGOSSERVER_CHANNELMGR_H +#define MANGOSSERVER_CHANNELMGR_H + +#include "Common.h" +#include "Channel.h" +#include "Policies/Singleton.h" #include <map> #include <string> @@ -34,73 +38,20 @@ class ChannelMgr uint32 team; typedef std::map<std::string,Channel *> ChannelMap; ChannelMgr() {team = 0;} - ~ChannelMgr() - { - for(ChannelMap::const_iterator itr = channels.begin();itr!=channels.end(); ++itr) - delete itr->second; - channels.clear(); - } - Channel *GetJoinChannel(const std::string& name, uint32 channel_id) - { - if (channels.find(name) == channels.end()) - { - Channel *nchan = new Channel(name,channel_id, team); - channels[name] = nchan; - } - return channels[name]; - } - Channel *GetChannel(const std::string& name, Player *p) - { - ChannelMap::const_iterator i = channels.find(name); - - if(i == channels.end()) - { - WorldPacket data; - MakeNotOnPacket(&data,name); - p->GetSession()->SendPacket(&data); - return NULL; - } - else - return i->second; - } - void LeftChannel(const std::string& name) - { - ChannelMap::const_iterator i = channels.find(name); + ~ChannelMgr(); - if(i == channels.end()) - return; - - Channel* channel = i->second; - - if(channel->GetNumPlayers() == 0 && !channel->IsConstant()) - { - channels.erase(name); - delete channel; - } - } + Channel *GetJoinChannel(std::string name, uint32 channel_id); + Channel *GetChannel(std::string name, Player *p, bool pkt = true); + void LeftChannel(std::string name); private: ChannelMap channels; - void MakeNotOnPacket(WorldPacket *data, const std::string& name) - { - data->Initialize(SMSG_CHANNEL_NOTIFY, (1+10)); // we guess size - (*data) << (uint8)0x05 << name; - } + void MakeNotOnPacket(WorldPacket *data, std::string name); }; class AllianceChannelMgr : public ChannelMgr {}; class HordeChannelMgr : public ChannelMgr {}; -inline ChannelMgr* channelMgr(uint32 team) -{ - if (sWorld.getConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_CHANNEL)) - //For Test,No Seprate Faction - return &Trinity::Singleton<AllianceChannelMgr>::Instance(); +ChannelMgr* channelMgr(uint32 team); - if(team==ALLIANCE) - return &Trinity::Singleton<AllianceChannelMgr>::Instance(); - if(team==HORDE) - return &Trinity::Singleton<HordeChannelMgr>::Instance(); - return NULL; -} #endif diff --git a/src/game/Makefile.am b/src/game/Makefile.am index f18a5b26934..2e1d2a4bc0f 100644 --- a/src/game/Makefile.am +++ b/src/game/Makefile.am @@ -624,6 +624,7 @@ libmangosgame_a_SOURCES = \ Channel.cpp \ Channel.h \ ChannelHandler.cpp \ + ChannelMgr.cpp \ ChannelMgr.h \ CharacterHandler.cpp \ Chat.cpp \ diff --git a/win/VC100/game.vcxproj b/win/VC100/game.vcxproj index fbadcde11a9..dcc65401eed 100644 --- a/win/VC100/game.vcxproj +++ b/win/VC100/game.vcxproj @@ -370,6 +370,7 @@ <ClCompile Include="..\..\src\game\CalendarHandler.cpp" /> <ClCompile Include="..\..\src\game\Channel.cpp" /> <ClCompile Include="..\..\src\game\ChannelHandler.cpp" /> + <ClCompile Include="..\..\src\game\ChannelMgr.cpp" /> <ClCompile Include="..\..\src\game\CharacterHandler.cpp" /> <ClCompile Include="..\..\src\game\Chat.cpp" /> <ClCompile Include="..\..\src\game\ChatHandler.cpp" /> diff --git a/win/VC80/game.vcproj b/win/VC80/game.vcproj index af5a93cb01f..4e1fcd2d91a 100644 --- a/win/VC80/game.vcproj +++ b/win/VC80/game.vcproj @@ -674,6 +674,10 @@ > </File> <File + RelativePath="..\..\src\game\ChannelMgr.cpp" + > + </File> + <File RelativePath="..\..\src\game\ChannelMgr.h" > </File> diff --git a/win/VC90/game.vcproj b/win/VC90/game.vcproj index 03cb6bdc447..5dd84765415 100644 --- a/win/VC90/game.vcproj +++ b/win/VC90/game.vcproj @@ -675,6 +675,10 @@ > </File> <File + RelativePath="..\..\src\game\ChannelMgr.cpp" + > + </File> + <File RelativePath="..\..\src\game\ChannelMgr.h" > </File> |