aboutsummaryrefslogtreecommitdiff
path: root/src/game/ChannelMgr.cpp
diff options
context:
space:
mode:
authormaximius <none@none>2009-10-17 15:51:44 -0700
committermaximius <none@none>2009-10-17 15:51:44 -0700
commite585187b248f48b3c6e9247b49fa07c6565d65e5 (patch)
tree637c5b7ddacf41040bef4ea4f75a97da64c6a9bc /src/game/ChannelMgr.cpp
parent26b5e033ffde3d161382fc9addbfa99738379641 (diff)
*Backed out changeset 3be01fb200a5
--HG-- branch : trunk
Diffstat (limited to 'src/game/ChannelMgr.cpp')
-rw-r--r--src/game/ChannelMgr.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/game/ChannelMgr.cpp b/src/game/ChannelMgr.cpp
index 8994d84b23f..09d172155cc 100644
--- a/src/game/ChannelMgr.cpp
+++ b/src/game/ChannelMgr.cpp
@@ -15,27 +15,35 @@
* 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())
@@ -43,11 +51,14 @@ Channel *ChannelMgr::GetJoinChannel(std::string name, uint32 channel_id)
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)
@@ -56,23 +67,29 @@ Channel *ChannelMgr::GetChannel(std::string name, Player *p, bool pkt)
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