root/trunk/src/game/ChannelHandler.cpp @ 28

Revision 2, 11.2 kB (checked in by yumileroy, 17 years ago)

[svn] * Proper SVN structure

Original author: Neo2003
Date: 2008-10-02 16:23:55-05:00

Line 
1/*
2 * Copyright (C) 2005-2008 MaNGOS <http://www.mangosproject.org/>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17 */
18
19#include "ObjectMgr.h"                                      // for normalizePlayerName
20#include "ChannelMgr.h"
21#include "Policies/SingletonImp.h"
22
23INSTANTIATE_SINGLETON_1( AllianceChannelMgr );
24INSTANTIATE_SINGLETON_1( HordeChannelMgr );
25
26void WorldSession::HandleChannelJoin(WorldPacket& recvPacket)
27{
28    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
29    //recvPacket.hexlike();
30    CHECK_PACKET_SIZE(recvPacket, 4+1+1+1);
31
32    uint32 channel_id;
33    uint8 unknown1, unknown2;
34    std::string channelname, pass;
35
36    recvPacket >> channel_id >> unknown1 >> unknown2;
37    recvPacket >> channelname;
38
39    if(channelname.empty())
40        return;
41
42    // recheck
43    CHECK_PACKET_SIZE(recvPacket, 4+1+1+(channelname.size()+1)+1);
44
45    recvPacket >> pass;
46    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
47        if(Channel *chn = cMgr->GetJoinChannel(channelname, channel_id))
48            chn->Join(_player->GetGUID(), pass.c_str());
49}
50
51void WorldSession::HandleChannelLeave(WorldPacket& recvPacket)
52{
53    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
54    //recvPacket.hexlike();
55    CHECK_PACKET_SIZE(recvPacket, 4+1);
56
57    uint32 unk;
58    std::string channelname;
59    recvPacket >> unk;                                      // channel id?
60    recvPacket >> channelname;
61
62    if(channelname.empty())
63        return;
64
65    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
66    {
67        if(Channel *chn = cMgr->GetChannel(channelname, _player))
68            chn->Leave(_player->GetGUID(), true);
69        cMgr->LeftChannel(channelname);
70    }
71}
72
73void WorldSession::HandleChannelList(WorldPacket& recvPacket)
74{
75    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
76    //recvPacket.hexlike();
77    CHECK_PACKET_SIZE(recvPacket, 1);
78
79    std::string channelname;
80    recvPacket >> channelname;
81
82    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
83        if(Channel *chn = cMgr->GetChannel(channelname, _player))
84            chn->List(_player);
85}
86
87void WorldSession::HandleChannelPassword(WorldPacket& recvPacket)
88{
89    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
90    //recvPacket.hexlike();
91    CHECK_PACKET_SIZE(recvPacket, 1+1);
92
93    std::string channelname, pass;
94    recvPacket >> channelname;
95
96    // recheck
97    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
98
99    recvPacket >> pass;
100
101    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
102        if(Channel *chn = cMgr->GetChannel(channelname, _player))
103            chn->Password(_player->GetGUID(), pass.c_str());
104}
105
106void WorldSession::HandleChannelSetOwner(WorldPacket& recvPacket)
107{
108    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
109    //recvPacket.hexlike();
110    CHECK_PACKET_SIZE(recvPacket, 1+1);
111
112    std::string channelname, newp;
113    recvPacket >> channelname;
114
115    // recheck
116    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
117
118    recvPacket >> newp;
119
120    if(!normalizePlayerName(newp))
121        return;
122
123    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
124        if(Channel *chn = cMgr->GetChannel(channelname, _player))
125            chn->SetOwner(_player->GetGUID(), newp.c_str());
126}
127
128void WorldSession::HandleChannelOwner(WorldPacket& recvPacket)
129{
130    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
131    //recvPacket.hexlike();
132    CHECK_PACKET_SIZE(recvPacket, 1);
133
134    std::string channelname;
135    recvPacket >> channelname;
136    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
137        if(Channel *chn = cMgr->GetChannel(channelname, _player))
138            chn->SendWhoOwner(_player->GetGUID());
139}
140
141void WorldSession::HandleChannelModerator(WorldPacket& recvPacket)
142{
143    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
144    //recvPacket.hexlike();
145    CHECK_PACKET_SIZE(recvPacket, 1+1);
146
147    std::string channelname, otp;
148    recvPacket >> channelname;
149
150    // recheck
151    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
152
153    recvPacket >> otp;
154
155    if(!normalizePlayerName(otp))
156        return;
157
158    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
159        if(Channel *chn = cMgr->GetChannel(channelname, _player))
160            chn->SetModerator(_player->GetGUID(), otp.c_str());
161}
162
163void WorldSession::HandleChannelUnmoderator(WorldPacket& recvPacket)
164{
165    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
166    //recvPacket.hexlike();
167    CHECK_PACKET_SIZE(recvPacket, 1+1);
168
169    std::string channelname, otp;
170    recvPacket >> channelname;
171
172    // recheck
173    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
174
175    recvPacket >> otp;
176
177    if(!normalizePlayerName(otp))
178        return;
179
180    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
181        if(Channel *chn = cMgr->GetChannel(channelname, _player))
182            chn->UnsetModerator(_player->GetGUID(), otp.c_str());
183}
184
185void WorldSession::HandleChannelMute(WorldPacket& recvPacket)
186{
187    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
188    //recvPacket.hexlike();
189    CHECK_PACKET_SIZE(recvPacket, 1+1);
190
191    std::string channelname, otp;
192    recvPacket >> channelname;
193
194    // recheck
195    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
196
197    recvPacket >> otp;
198
199    if(!normalizePlayerName(otp))
200        return;
201
202    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
203        if(Channel *chn = cMgr->GetChannel(channelname, _player))
204            chn->SetMute(_player->GetGUID(), otp.c_str());
205}
206
207void WorldSession::HandleChannelUnmute(WorldPacket& recvPacket)
208{
209    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
210    //recvPacket.hexlike();
211    CHECK_PACKET_SIZE(recvPacket, 1+1);
212
213    std::string channelname, otp;
214    recvPacket >> channelname;
215
216    // recheck
217    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
218
219    recvPacket >> otp;
220
221    if(!normalizePlayerName(otp))
222        return;
223
224    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
225        if(Channel *chn = cMgr->GetChannel(channelname, _player))
226            chn->UnsetMute(_player->GetGUID(), otp.c_str());
227}
228
229void WorldSession::HandleChannelInvite(WorldPacket& recvPacket)
230{
231    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
232    //recvPacket.hexlike();
233    CHECK_PACKET_SIZE(recvPacket, 1+1);
234
235    std::string channelname, otp;
236    recvPacket >> channelname;
237
238    // recheck
239    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
240
241    recvPacket >> otp;
242
243    if(!normalizePlayerName(otp))
244        return;
245
246    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
247        if(Channel *chn = cMgr->GetChannel(channelname, _player))
248            chn->Invite(_player->GetGUID(), otp.c_str());
249}
250
251void WorldSession::HandleChannelKick(WorldPacket& recvPacket)
252{
253    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
254    //recvPacket.hexlike();
255    CHECK_PACKET_SIZE(recvPacket, 1+1);
256
257    std::string channelname, otp;
258    recvPacket >> channelname;
259
260    // recheck
261    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
262
263    recvPacket >> otp;
264    if(!normalizePlayerName(otp))
265        return;
266
267    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
268        if(Channel *chn = cMgr->GetChannel(channelname, _player))
269            chn->Kick(_player->GetGUID(), otp.c_str());
270}
271
272void WorldSession::HandleChannelBan(WorldPacket& recvPacket)
273{
274    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
275    //recvPacket.hexlike();
276    CHECK_PACKET_SIZE(recvPacket, 1+1);
277
278    std::string channelname, otp;
279    recvPacket >> channelname;
280
281    // recheck
282    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
283
284    recvPacket >> otp;
285
286    if(!normalizePlayerName(otp))
287        return;
288
289    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
290        if(Channel *chn = cMgr->GetChannel(channelname, _player))
291            chn->Ban(_player->GetGUID(), otp.c_str());
292}
293
294void WorldSession::HandleChannelUnban(WorldPacket& recvPacket)
295{
296    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
297    //recvPacket.hexlike();
298    CHECK_PACKET_SIZE(recvPacket, 1+1);
299
300    std::string channelname, otp;
301    recvPacket >> channelname;
302
303    // recheck
304    CHECK_PACKET_SIZE(recvPacket, (channelname.size()+1)+1);
305
306    recvPacket >> otp;
307
308    if(!normalizePlayerName(otp))
309        return;
310
311    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
312        if(Channel *chn = cMgr->GetChannel(channelname, _player))
313            chn->UnBan(_player->GetGUID(), otp.c_str());
314}
315
316void WorldSession::HandleChannelAnnounce(WorldPacket& recvPacket)
317{
318    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
319    //recvPacket.hexlike();
320    CHECK_PACKET_SIZE(recvPacket, 1);
321
322    std::string channelname;
323    recvPacket >> channelname;
324    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
325        if(Channel *chn = cMgr->GetChannel(channelname, _player))
326            chn->Announce(_player->GetGUID());
327}
328
329void WorldSession::HandleChannelModerate(WorldPacket& recvPacket)
330{
331    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
332    //recvPacket.hexlike();
333    CHECK_PACKET_SIZE(recvPacket, 1);
334
335    std::string channelname;
336    recvPacket >> channelname;
337    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
338        if(Channel *chn = cMgr->GetChannel(channelname, _player))
339            chn->Moderate(_player->GetGUID());
340}
341
342void WorldSession::HandleChannelRosterQuery(WorldPacket &recvPacket)
343{
344    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
345    //recvPacket.hexlike();
346    CHECK_PACKET_SIZE(recvPacket, 1);
347
348    std::string channelname;
349    recvPacket >> channelname;
350    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
351        if(Channel *chn = cMgr->GetChannel(channelname, _player))
352            chn->List(_player);
353}
354
355void WorldSession::HandleChannelInfoQuery(WorldPacket &recvPacket)
356{
357    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
358    //recvPacket.hexlike();
359    CHECK_PACKET_SIZE(recvPacket, 1);
360
361    std::string channelname;
362    recvPacket >> channelname;
363    if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
364    {
365        if(Channel *chn = cMgr->GetChannel(channelname, _player))
366        {
367            WorldPacket data(SMSG_CHANNEL_MEMBER_COUNT, chn->GetName().size()+1+1+4);
368            data << chn->GetName();
369            data << uint8(chn->GetFlags());
370            data << uint32(chn->GetNumPlayers());
371            SendPacket(&data);
372        }
373    }
374}
375
376void WorldSession::HandleChannelJoinNotify(WorldPacket &recvPacket)
377{
378    sLog.outDebug("Opcode %u", recvPacket.GetOpcode());
379    //recvPacket.hexlike();
380    CHECK_PACKET_SIZE(recvPacket, 1);
381
382    std::string channelname;
383    recvPacket >> channelname;
384    /*if(ChannelMgr* cMgr = channelMgr(_player->GetTeam()))
385        if(Channel *chn = cMgr->GetChannel(channelname, _player))
386            chn->JoinNotify(_player->GetGUID());*/
387}
Note: See TracBrowser for help on using the browser.