WSPackets.h
上传用户:jxpjxmjjw
上传日期:2009-12-07
资源大小:5877k
文件大小:3k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. // Copyright (C) 2004 Team Python
  2. //  
  3. // This program is free software; you can redistribute it and/or modify
  4. // it under the terms of the GNU General Public License as published by
  5. // the Free Software Foundation; either version 2 of the License, or
  6. // (at your option) any later version.
  7. // 
  8. // This program is distributed in the hope that it will be useful,
  9. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11. // GNU General Public License for more details.
  12. // 
  13. // You should have received a copy of the GNU General Public License
  14. // along with this program; if not, write to the Free Software 
  15. // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  16. #ifndef WOWPYTHONSERVER_WSPACKETS_H
  17. #define WOWPYTHONSERVER_WSPACKETS_H
  18. #include "NetworkInterface.h"
  19. /*
  20. 0x01DF CMSG_AUTH_SESSION 
  21. Int32 Client version 
  22. Int32 Session ID 
  23. String Username 
  24. Int32 Client salt 
  25. Byte[20] Encrypted password 
  26. */
  27. class WSPacket : public packet {
  28.   uint16 opcode;
  29.   void Serialise( ) {
  30.   }
  31.   void Deserialise( ) {
  32.   }
  33. }
  34. /*#define WSPACKET_PACKETNAMES ( prefix, midfix, postfix )  
  35.   prefix##CMSG_AUTH_SESSION##midfix 0x01df postfix 
  36. #define WSPACKET_PACKETCONTENTS ( prefix, prepfix, tweenfix, twockfix, twiddlefix, postfix ) 
  37.   prefix CMSG_AUTH_SESSION prepfix 
  38.     Int32 tweenfix##Client version##twockfix 1 twiddlefix 
  39.     Int32 tweenfix##Session ID##twockfix 1 twiddlefix 
  40.     String tweenfix##Username##twockfix 1 twiddlefix 
  41.     Int32 tweenfix##Client salt##twockfix 1 twiddlefix 
  42.     Byte tweenfix##Encrypted Password##twockfix 20 postfix 
  43. class WSPacket : public packet {
  44. protected:
  45.   enum packetType {
  46.     WSPACKET_PACKETNAMES( , = , MACRO_COMMA )
  47.     //CMSG_AUTH_SESSION = 0x01df,
  48.   } opcode;
  49.   WSPacket( uint32 opcode ) : opcode( opcode ) { }
  50.   enum itemType { Int32, String, Byte };
  51.   std::list < item * > items;
  52.   void Serialise( ) {
  53.     switch( opcode ) {
  54.       WSPACKET_PACKETCONTENTS( case, :
  55.           items.push_back MACRO_OPENPAREN , MACRO_COMMA MACRO_DOUBLEQUOTE , MACRO_DOUBLEQUOTE MACRO_COMMA , MACRO_CLOSEPAREN ;
  56.           items.push_back MACRO_OPENPAREN , MACRO_CLOSEPAREN ;
  57.           break; )
  58.       );
  59.     }
  60.   }
  61.   void Deserialise( ) {
  62.   }
  63.   void clearItems( ) {
  64.     for( std::list< item * >::iterator i = items.begin( ); i != items.end( ); ++ i )
  65.       delete (item *)*i;
  66.     items.clear( );
  67.   }
  68.   struct item {
  69.     itemType type;
  70.     void * data;
  71.     std::string name;
  72.     item( itemType type, char * name, int parameter ) : type( type ), name( name ) {
  73.       switch( type ) {
  74.         case Int32:
  75.           data = new int32;
  76.           break;
  77.         case String:
  78.           data = new std::string;
  79.           break;
  80.         case Bytes:
  81.           data = new uint8[ parameter ];
  82.           break;
  83.       }
  84.     }
  85.     ~item( itemType type, inte parameter ) : type( type ) {
  86.       switch( type ) {
  87.         case Int32:
  88.           delete ( int32 * ) data;
  89.           break;
  90.         case String:
  91.           delete ( std::string * ) data;
  92.           break;
  93.         case Bytes:
  94.           delete ( uint8 * ) data;
  95.           break;
  96.       }
  97.     }
  98.   };
  99. };
  100. class packet_CMSG_AUTH_SESSION : public WSPacket {
  101. public:
  102.   packet_CMSG_AUTH_SESSION(  ): WSPacket( 0x1df ) { }
  103. private:
  104.   
  105. }*/
  106. #endif