2012-08-27 13:31:16 -04:00
// ProtocolRecognizer.h
// Interfaces to the cProtocolRecognizer class representing the meta-protocol that recognizes possibly multiple
// protocol versions and redirects everything to them
# pragma once
# include "Protocol.h"
2012-09-23 16:03:26 -04:00
# include "../ByteBuffer.h"
2012-08-27 13:31:16 -04:00
2012-09-06 08:39:07 -04:00
// Adjust these if a new protocol is added or an old one is removed:
2013-05-08 07:10:55 -04:00
# define MCS_CLIENT_VERSIONS "1.2.4, 1.2.5, 1.3.1, 1.3.2, 1.4.2, 1.4.4, 1.4.5, 1.4.6, 1.4.7, 1.5, 1.5.1, 1.5.2"
# define MCS_PROTOCOL_VERSIONS "29, 39, 47, 49, 51, 60, 61"
2012-09-06 08:39:07 -04:00
2012-08-27 13:31:16 -04:00
class cProtocolRecognizer :
public cProtocol
{
2012-08-30 05:56:59 -04:00
typedef cProtocol super ;
2012-08-27 13:31:16 -04:00
public :
2012-10-31 15:54:42 -04:00
enum
{
PROTO_VERSION_1_2_5 = 29 ,
PROTO_VERSION_1_3_2 = 39 ,
PROTO_VERSION_1_4_2 = 47 ,
2012-11-15 06:00:40 -05:00
PROTO_VERSION_1_4_4 = 49 ,
2012-12-24 17:09:01 -05:00
PROTO_VERSION_1_4_6 = 51 ,
2013-03-14 16:34:37 -04:00
PROTO_VERSION_1_5_0 = 60 ,
2013-05-08 07:10:55 -04:00
PROTO_VERSION_1_5_2 = 61 ,
2012-11-11 09:15:59 -05:00
2013-03-14 16:34:37 -04:00
PROTO_VERSION_NEXT ,
PROTO_VERSION_LATEST = PROTO_VERSION_NEXT - 1 , ///< Automatically assigned to the last protocol version, this serves as the default for PrimaryServerVersion
2012-10-31 15:54:42 -04:00
} ;
2012-08-27 13:31:16 -04:00
cProtocolRecognizer ( cClientHandle * a_Client ) ;
2012-09-25 04:23:19 -04:00
virtual ~ cProtocolRecognizer ( ) ;
2012-08-27 13:31:16 -04:00
2012-11-15 06:00:40 -05:00
/// Translates protocol version number into protocol version text: 49 -> "1.4.4"
static AString GetVersionTextFromInt ( int a_ProtocolVersion ) ;
2012-08-27 13:31:16 -04:00
/// Called when client sends some data:
virtual void DataReceived ( const char * a_Data , int a_Size ) override ;
2012-10-21 04:01:59 -04:00
/// Sending stuff to clients (alphabetically sorted):
2013-03-03 14:05:11 -05:00
virtual void SendAttachEntity ( const cEntity & a_Entity , const cEntity * a_Vehicle ) override ;
2012-10-21 03:46:28 -04:00
virtual void SendBlockAction ( int a_BlockX , int a_BlockY , int a_BlockZ , char a_Byte1 , char a_Byte2 , BLOCKTYPE a_BlockType ) override ;
2012-10-21 04:01:59 -04:00
virtual void SendBlockBreakAnim ( int a_EntityID , int a_BlockX , int a_BlockY , int a_BlockZ , char a_Stage ) override ;
2012-10-21 03:46:28 -04:00
virtual void SendBlockChange ( int a_BlockX , int a_BlockY , int a_BlockZ , BLOCKTYPE a_BlockType , NIBBLETYPE a_BlockMeta ) override ;
virtual void SendBlockChanges ( int a_ChunkX , int a_ChunkZ , const sSetBlockVector & a_Changes ) override ;
virtual void SendChat ( const AString & a_Message ) override ;
virtual void SendChunkData ( int a_ChunkX , int a_ChunkZ , cChunkDataSerializer & a_Serializer ) override ;
virtual void SendCollectPickup ( const cPickup & a_Pickup , const cPlayer & a_Player ) override ;
virtual void SendDestroyEntity ( const cEntity & a_Entity ) override ;
virtual void SendDisconnect ( const AString & a_Reason ) override ;
virtual void SendEntHeadLook ( const cEntity & a_Entity ) override ;
virtual void SendEntLook ( const cEntity & a_Entity ) override ;
2013-03-17 22:51:55 -04:00
virtual void SendEntVelocity ( const cEntity & a_Entity ) override ;
2012-10-21 03:46:28 -04:00
virtual void SendEntRelMove ( const cEntity & a_Entity , char a_RelX , char a_RelY , char a_RelZ ) override ;
virtual void SendEntRelMoveLook ( const cEntity & a_Entity , char a_RelX , char a_RelY , char a_RelZ ) override ;
2012-10-21 04:01:59 -04:00
virtual void SendEntityEquipment ( const cEntity & a_Entity , short a_SlotNum , const cItem & a_Item ) override ;
virtual void SendEntityStatus ( const cEntity & a_Entity , char a_Status ) override ;
2013-06-18 15:09:51 -04:00
virtual void SendExplosion ( double a_BlockX , double a_BlockY , double a_BlockZ , float a_Radius , const cVector3iArray & a_BlocksAffected , const Vector3d & a_PlayerMotion ) override ;
2012-10-21 03:46:28 -04:00
virtual void SendGameMode ( eGameMode a_GameMode ) override ;
virtual void SendHealth ( void ) override ;
virtual void SendInventoryProgress ( char a_WindowID , short a_Progressbar , short a_Value ) override ;
virtual void SendInventorySlot ( char a_WindowID , short a_SlotNum , const cItem & a_Item ) override ;
virtual void SendKeepAlive ( int a_PingID ) override ;
virtual void SendLogin ( const cPlayer & a_Player , const cWorld & a_World ) override ;
virtual void SendMetadata ( const cEntity & a_Entity ) override ;
virtual void SendPickupSpawn ( const cPickup & a_Pickup ) override ;
virtual void SendPlayerAnimation ( const cPlayer & a_Player , char a_Animation ) override ;
virtual void SendPlayerListItem ( const cPlayer & a_Player , bool a_IsOnline ) override ;
virtual void SendPlayerMoveLook ( void ) override ;
virtual void SendPlayerPosition ( void ) override ;
virtual void SendPlayerSpawn ( const cPlayer & a_Player ) override ;
virtual void SendRespawn ( void ) override ;
virtual void SendSoundEffect ( const AString & a_SoundName , int a_SrcX , int a_SrcY , int a_SrcZ , float a_Volume , float a_Pitch ) override ;
virtual void SendSoundParticleEffect ( int a_EffectID , int a_SrcX , int a_SrcY , int a_SrcZ , int a_Data ) override ;
2012-12-26 04:12:00 -05:00
virtual void SendSpawnFallingBlock ( const cFallingBlock & a_FallingBlock ) override ;
2012-10-21 03:46:28 -04:00
virtual void SendSpawnMob ( const cMonster & a_Mob ) override ;
2013-02-21 16:55:36 -05:00
virtual void SendSpawnObject ( const cEntity & a_Entity , char a_ObjectType , int a_ObjectData , Byte a_Yaw , Byte a_Pitch ) override ;
2013-02-18 11:48:50 -05:00
virtual void SendSpawnVehicle ( const cEntity & a_Vehicle , char a_VehicleType ) override ;
2012-10-21 03:46:28 -04:00
virtual void SendTeleportEntity ( const cEntity & a_Entity ) override ;
virtual void SendThunderbolt ( int a_BlockX , int a_BlockY , int a_BlockZ ) override ;
2012-11-01 17:38:20 -04:00
virtual void SendTimeUpdate ( Int64 a_WorldAge , Int64 a_TimeOfDay ) override ;
2012-10-21 03:46:28 -04:00
virtual void SendUnloadChunk ( int a_ChunkX , int a_ChunkZ ) override ;
virtual void SendUpdateSign ( int a_BlockX , int a_BlockY , int a_BlockZ , const AString & a_Line1 , const AString & a_Line2 , const AString & a_Line3 , const AString & a_Line4 ) override ;
2012-10-21 04:01:59 -04:00
virtual void SendUseBed ( const cEntity & a_Entity , int a_BlockX , int a_BlockY , int a_BlockZ ) override ;
2012-10-21 03:46:28 -04:00
virtual void SendWeather ( eWeather a_Weather ) override ;
virtual void SendWholeInventory ( const cInventory & a_Inventory ) override ;
virtual void SendWholeInventory ( const cWindow & a_Window ) override ;
2013-04-04 07:47:31 -04:00
virtual void SendWindowClose ( const cWindow & a_Window ) override ;
2012-10-21 03:46:28 -04:00
virtual void SendWindowOpen ( char a_WindowID , char a_WindowType , const AString & a_WindowTitle , char a_NumSlots ) override ;
2012-09-06 13:36:59 -04:00
virtual AString GetAuthServerID ( void ) override ;
2012-08-30 05:56:59 -04:00
virtual void SendData ( const char * a_Data , int a_Size ) override ;
2012-08-27 13:31:16 -04:00
protected :
cProtocol * m_Protocol ; //< The recognized protocol
2012-08-30 05:56:59 -04:00
cByteBuffer m_Buffer ; //< Buffer for the incoming data until we recognize the protocol
/// Tries to recognize protocol based on m_Buffer contents; returns true if recognized
bool TryRecognizeProtocol ( void ) ;
/// Called when the recognizer gets a server ping packet; responds with server stats and destroys the client
void HandleServerPing ( void ) ;
2012-08-27 13:31:16 -04:00
} ;