diff --git a/src/game/ChannelHandler.cpp b/src/game/ChannelHandler.cpp index 125ca3f0d..59e40a60a 100644 --- a/src/game/ChannelHandler.cpp +++ b/src/game/ChannelHandler.cpp @@ -18,10 +18,6 @@ #include "ObjectMgr.h" // for normalizePlayerName #include "ChannelMgr.h" -#include "Policies/SingletonImp.h" - -INSTANTIATE_SINGLETON_1( AllianceChannelMgr ); -INSTANTIATE_SINGLETON_1( HordeChannelMgr ); void WorldSession::HandleJoinChannel(WorldPacket& recvPacket) { diff --git a/src/game/ChannelMgr.cpp b/src/game/ChannelMgr.cpp new file mode 100644 index 000000000..e3b54d346 --- /dev/null +++ b/src/game/ChannelMgr.cpp @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2005-2009 MaNGOS + * + * 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::Instance(); // cross-faction + + if(team == ALLIANCE) + return &MaNGOS::Singleton::Instance(); + if(team == HORDE) + return &MaNGOS::Singleton::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); + 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 5e2f165bb..27c3dca3f 100644 --- a/src/game/ChannelMgr.h +++ b/src/game/ChannelMgr.h @@ -18,9 +18,9 @@ #ifndef MANGOSSERVER_CHANNELMGR_H #define MANGOSSERVER_CHANNELMGR_H +#include "Common.h" #include "Channel.h" #include "Policies/Singleton.h" -#include "World.h" #include #include @@ -30,72 +30,19 @@ class ChannelMgr public: typedef std::map ChannelMap; ChannelMgr() {} - ~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); - channels[name] = nchan; - } - return channels[name]; - } - Channel *GetChannel(const std::string& name, Player *p) - { - ChannelMap::const_iterator i = channels.find(name); + ~ChannelMgr(); - 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); - - 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 &MaNGOS::Singleton::Instance(); +ChannelMgr* channelMgr(uint32 team); - if(team==ALLIANCE) - return &MaNGOS::Singleton::Instance(); - if(team==HORDE) - return &MaNGOS::Singleton::Instance(); - return NULL; -} #endif diff --git a/src/game/Makefile.am b/src/game/Makefile.am index bce0814a1..dd3104e09 100644 --- a/src/game/Makefile.am +++ b/src/game/Makefile.am @@ -78,6 +78,7 @@ libmangosgame_a_SOURCES = \ Channel.cpp \ Channel.h \ ChannelHandler.cpp \ + ChannelMgr.cpp \ ChannelMgr.h \ CharacterHandler.cpp \ Chat.cpp \ diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 2c6577135..55baffba5 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "8258" + #define REVISION_NR "8259" #endif // __REVISION_NR_H__ diff --git a/win/VC100/game.vcxproj b/win/VC100/game.vcxproj index fbadcde11..dcc65401e 100644 --- a/win/VC100/game.vcxproj +++ b/win/VC100/game.vcxproj @@ -370,6 +370,7 @@ + diff --git a/win/VC80/game.vcproj b/win/VC80/game.vcproj index 5b8fbca71..e457cb7dc 100644 --- a/win/VC80/game.vcproj +++ b/win/VC80/game.vcproj @@ -673,6 +673,10 @@ RelativePath="..\..\src\game\ChannelHandler.cpp" > + + diff --git a/win/VC90/game.vcproj b/win/VC90/game.vcproj index 96b6fefc4..ca0233dcf 100644 --- a/win/VC90/game.vcproj +++ b/win/VC90/game.vcproj @@ -674,6 +674,10 @@ RelativePath="..\..\src\game\ChannelHandler.cpp" > + +