www.pudn.com > boogiebot.zip > WorldServerClient.Packet.cs


using System; 
using System.Collections.Generic; 
using System.Text; 
 
using Foole.Crypt; 
using Foole.Utils; 
using Foole.WoW; 
 
namespace BoogieBot.Common 
{ 
    // Protocol Switch 
    partial class WorldServerClient 
    { 
        protected void processData(byte[] Data) 
        { 
            WoWReader wr = new WoWReader(Data); 
            OpCode Op = (OpCode)wr.ReadUInt16(); 
 
            try 
            { 
                switch (Op) 
                { 
                    case OpCode.SMSG_AUTH_CHALLENGE: 
                        Handle_AuthRequest(wr); 
                        break; 
                    case OpCode.SMSG_AUTH_RESPONSE: 
                        Handle_AuthResponse(wr); 
                        break; 
                    case OpCode.SMSG_CHAR_ENUM: 
                        Handle_CharEnum(wr); 
                        break; 
                    case OpCode.SMSG_WARDEN_DATA: 
                        // Warden was figured out. but I won't give it out. GL 
                        break; 
                    case OpCode.SMSG_ACCOUNT_DATA_MD5: 
                        WoWWriter ww = new WoWWriter(OpCode.CMSG_UPDATE_ACCOUNT_DATA); 
                        ww.Write(0x00000002); 
                        ww.Write((UInt32)0); 
                        Send(ww.ToArray()); 
                        break; 
                    case OpCode.SMSG_PONG: 
                        { 
                            UInt32 Server_Seq = wr.ReadUInt32(); 
                            if (Server_Seq == Ping_Seq) 
                            { 
                                Ping_Res_Time = MM_GetTime(); 
                                Latency = Ping_Res_Time - Ping_Req_Time; 
                                Ping_Seq += 1; 
                                BoogieCore.Log(LogType.System, "Got pong'd with a latency of: {0} sequence: {1}", Latency, Server_Seq); 
                            } 
                            else 
                                BoogieCore.Log(LogType.System, "Server pong'd bad sequence! Ours: {0} Theirs: {1}", Ping_Seq, Server_Seq); 
                            break; 
                        } 
                    case OpCode.SMSG_ITEM_QUERY_SINGLE_RESPONSE: 
                        BoogieCore.Log(LogType.NeworkComms, "Got Item Response"); 
                        break; 
                    case OpCode.SMSG_SET_PROFICIENCY: 
                        break; 
                    case OpCode.MSG_MOVE_HEARTBEAT: 
                        MovementHandler(wr); 
                        break; 
                    case OpCode.MSG_MOVE_START_TURN_RIGHT: 
                        MovementHandler(wr); 
                        break; 
                    case OpCode.MSG_MOVE_STOP: 
                        MovementHandler(wr); 
                        break; 
                    case OpCode.MSG_MOVE_START_TURN_LEFT: 
                        MovementHandler(wr); 
                        break; 
                    case OpCode.MSG_MOVE_START_FORWARD: 
                        MovementHandler(wr); 
                        break; 
                    case OpCode.MSG_MOVE_START_BACKWARD: 
                        MovementHandler(wr); 
                        break; 
                    case OpCode.SMSG_MONSTER_MOVE: 
                        break; 
                    case OpCode.MSG_MOVE_SET_FACING: 
                        //MovementHandler(wr); 
                        break; 
                    case OpCode.SMSG_EMOTE: 
                        break; 
                    case OpCode.SMSG_WEATHER: 
                        break; 
                    case OpCode.MSG_MOVE_TELEPORT_ACK: 
                        TeleportHandler(wr); 
                        break; 
                    case OpCode.SMSG_NEW_WORLD: 
                        Handle_NewWorld(wr); 
                        break; 
                    case OpCode.SMSG_FORCE_MOVE_UNROOT: 
                        Coordinate c = BoogieCore.world.getPlayerObject().coord; 
                        SendMoveHeartBeat(c); 
                        break; 
                    case OpCode.SMSG_UPDATE_OBJECT: 
                        Handle_ObjUpdate(wr, false); 
                        break; 
                    case OpCode.SMSG_DESTROY_OBJECT: 
                        Handle_ObjDestroy(wr); 
                        break; 
                    case OpCode.SMSG_COMPRESSED_UPDATE_OBJECT: 
                        Handle_ObjUpdate(wr, true); 
                        break; 
                    case OpCode.SMSG_SPELL_START: 
                        break; 
                    case OpCode.SMSG_SPELL_GO: 
                        break; 
                    case OpCode.SMSG_CAST_RESULT: 
                        break; 
                    case OpCode.SMSG_MESSAGECHAT: 
                        Handle_MessageChat(wr); 
                        break; 
                    case OpCode.SMSG_CHANNEL_NOTIFY: 
                        break; 
                    case OpCode.SMSG_NAME_QUERY_RESPONSE: 
                        Handle_NameQuery(wr); 
                        break; 
                    case OpCode.SMSG_CREATURE_QUERY_RESPONSE: 
                        Handle_CreatureQuery(wr); 
                        break; 
                    case OpCode.SMSG_GAMEOBJECT_QUERY_RESPONSE: 
                        SMSG_Debug(wr); 
                        break; 
                    case OpCode.MSG_AUCTION_HELLO: 
                        BoogieCore.Log(LogType.NeworkComms, "Got ah Hello!"); 
                        Query_AH(AHEntry); 
                        break; 
                    case OpCode.SMSG_AUCTION_LIST_RESULT: 
                        BoogieCore.Log(LogType.NeworkComms, "Got ah response!"); 
                        Query_AH(AHEntry); 
                        break; 
                    case OpCode.SMSG_FRIEND_LIST: 
                        Handle_FriendsList(wr); 
                        break; 
                    case OpCode.SMSG_FRIEND_STATUS: 
                        Handle_FriendStatus(wr); 
                        break; 
                    case OpCode.SMSG_IGNORE_LIST: 
                        Handle_IgnoreList(wr); 
                        break; 
                    case OpCode.SMSG_INIT_WORLD_STATES: 
                        Handle_InitWorldStates(wr); 
                        break; 
                    case OpCode.SMSG_INITIAL_SPELLS: 
                        Handle_InitialSpells(wr); 
                        break; 
                    case OpCode.SMSG_LEARNED_SPELL: 
                        Handle_LearntSpell(wr); 
                        break; 
                    case OpCode.SMSG_SUPERCEDED_SPELL: 
                        Handle_SupercededSpell(wr); 
                        break; 
                    case OpCode.SMSG_INITIALIZE_FACTIONS: 
                        Handle_InitializeFactions(wr); 
                        break; 
                    case OpCode.SMSG_LOGIN_SETTIMESPEED: 
                        Handle_LoginSetTimeSpeed(wr); 
                        break; 
                    case OpCode.SMSG_SPELLLOGEXECUTE: 
                        Handle_SpellLogExecute(wr); 
                        break; 
                    case OpCode.SMSG_MAIL_LIST_RESULT: 
                        Handle_MailList(wr); 
                        break; 
                    case OpCode.SMSG_SEND_MAIL_RESULT: 
                        // We don't send mail (yet). 
                        break; 
                    case OpCode.SMSG_RECEIVED_MAIL: 
                        // You've got MAIL! 
                        break; 
                    case OpCode.SMSG_LIST_INVENTORY: 
                        Handle_VendorInventoryList(wr); 
                        break; 
                    case OpCode.SMSG_ACTION_BUTTONS: 
                        Handle_ActionButtons(wr); 
                        break; 
                    case OpCode.SMSG_LEVELUP_INFO: 
                        Handle_LevelUp(wr); 
                        break; 
                    case OpCode.SMSG_LOG_XPGAIN: 
                        Handle_XpGain(wr); 
                        break; 
                    default: 
                        BoogieCore.Log(LogType.NeworkComms, "Got unknown opcode: {0} length: {1}", Op, wr.Remaining); 
                        break; 
                } 
            } 
            catch (Exception ex) 
            { 
                BoogieCore.Log(LogType.Error, "Caught Exception while processing packet with opcode of {0}:  Exception is: {1}", Op, ex.Message); 
                BoogieCore.Log(LogType.Error, "{0}", ex.StackTrace); 
            } 
        } 
    } 
}