void GameSocket::ProcessData(unsigned char* data, int size) { Reader.SetBuffer(data); int offset = 0; while(offset < size) { unsigned short psize = Reader.ReadWord() + 6; unsigned short opcode = Reader.ReadWord(); Reader.Skip(2); switch(opcode) { case GAME_CLIENT_KEEP_ALIVE: case GAME_CLIENT_ACCEPT_HANDSHAKE: break; case GAME_CLIENT_INFO: SendServerInfo(); break; case GAME_CLIENT_PATCH_REQUEST: SendPatchInfo(); break; case GAME_CLIENT_AUTH: OnAuth(); break; case GAME_CLIENT_CHARACTER: OnCharacter(); break; case GAME_CLIENT_INGAME_REQUEST: OnIngameRequest(); break; case GAME_CLIENT_MOVEMENT: OnMovement(); break; case GAME_CLIENT_CLOSE: OnGameQuit(); break; case GAME_CLIENT_CHAT: OnChat(); break; case GAME_CLIENT_ITEM_MOVE: OnItem(); break; case GAME_CLIENT_TARGET: OnTarget(); break; case GAME_CLIENT_INGAME_NOTIFY: OnIngameNotify(); break; case GAME_CLIENT_EMOTION://update carlosx OnEmotion(); break; case GAME_CLIENT_SIT: //update carlosx OnSit(); break; case GAME_CLIENT_ESTRELLA: //update carlosx OnEstrella(); break; case GAME_CLIENT_ADDSKILL: //update carlosx OnUpdateSkill(); break; case GAME_CLIENT_MASTERY: //update carlosx OnMastertSkill(); break; case GAME_CLIENT_ATSKILL: //update carlosx OnATSkill(); break; case GAME_CLIENT_ADDSTR: //update carlosx OnADDStr(); break; case GAME_CLIENT_ADDINT: //update carlosx OnADDInt(); break; case GAME_CLIENT_GM: OnGM(); break; default: printf("Unknown opcode: %.4x\n", opcode); } Reader.Reset(); Reader.Skip(psize); offset += psize; } Reader.Reset(); }
BOOL CDCNeighbour::OnPacket(CDCPacket* pPacket) { pPacket->SmartDump( &m_pHost, FALSE, FALSE, (DWORD_PTR)this ); m_nInputCount++; m_tLastPacket = GetTickCount(); if ( pPacket->m_nLength < 2 ) { return OnPing(); } else if ( *pPacket->m_pBuffer == '<' ) { return OnChat( pPacket ); } else if ( *pPacket->m_pBuffer != '$' ) { return OnUnknown( pPacket ); } if ( pPacket->Compare( _P("$Search ") ) ) { return OnQuery( pPacket ); } else if ( pPacket->Compare( _P("$To: ") ) ) { return OnChatPrivate( pPacket ); } else if ( pPacket->Compare( _P("$HubTopic ") ) ) { return OnHubTopic( pPacket ); } else if ( pPacket->Compare( _P("$HubName" ) ) ) { return OnHubName( pPacket ); } // Convert '|' to '\0' (make ASCIIZ) pPacket->m_pBuffer[ pPacket->m_nLength - 1 ] = 0; LPCSTR szCommand = (LPCSTR)pPacket->m_pBuffer; // Split off parameters LPSTR szParams = strchr( (LPSTR)pPacket->m_pBuffer, ' ' ); if ( szParams ) { *szParams++ = 0; } if ( strcmp( szCommand, "$MyINFO" ) == 0 ) { return OnUserInfo( szParams ); } else if ( strcmp( szCommand, "$Quit" ) == 0 ) { return OnQuit( szParams ); } else if ( strcmp( szCommand, "$Lock" ) == 0 ) { return OnLock( szParams ); } else if ( strcmp( szCommand, "$Supports" ) == 0 ) { return OnSupports( szParams ); } else if ( strcmp( szCommand, "$Hello" ) == 0 ) { return OnHello( szParams ); } else if ( strcmp( szCommand, "$OpList" ) == 0 ) { return OnOpList( szParams ); } else if ( strcmp( szCommand, "$ConnectToMe" ) == 0 ) { return OnConnectToMe( szParams ); } else if ( strcmp( szCommand, "$ForceMove " ) == 0 ) { return OnForceMove( szParams ); } else if ( strcmp( szCommand, "$ValidateDenide" ) == 0 ) { return OnValidateDenide(); } else if ( strcmp( szCommand, "$GetPass" ) == 0 ) { return OnGetPass(); } else if ( strcmp( szCommand, "$UserIP" ) == 0 ) { return OnUserIP( szParams ); } else if ( strcmp( szCommand, "$ZOn" ) == 0 ) { return OnZOn(); } else if ( strcmp( szCommand, "$RevConnectToMe" ) == 0 ) { return OnRevConnectToMe( szParams ); } return OnUnknown( pPacket ); }