From 66be114dc7dfd940c4e799894e153acd26028c1e Mon Sep 17 00:00:00 2001 From: mordred Date: Wed, 20 Mar 2019 09:15:57 +0100 Subject: [PATCH] Great improved connection stability when connecting to a remote world-server --- src/world/Network/GameConnection.cpp | 32 ++++++---------------------- src/world/Network/GameConnection.h | 1 + 2 files changed, 7 insertions(+), 26 deletions(-) diff --git a/src/world/Network/GameConnection.cpp b/src/world/Network/GameConnection.cpp index 8facfd4e..2559793d 100644 --- a/src/world/Network/GameConnection.cpp +++ b/src/world/Network/GameConnection.cpp @@ -154,45 +154,25 @@ void Sapphire::Network::GameConnection::onDisconnect() void Sapphire::Network::GameConnection::onRecv( std::vector< uint8_t >& buffer ) { + m_packets.insert( std::end( m_packets ), std::begin( buffer ), std::end( buffer ) ); // This is assumed packet always start with valid FFXIVARR_PACKET_HEADER for now. Packets::FFXIVARR_PACKET_HEADER packetHeader{}; - const auto headerResult = Packets::getHeader( buffer, 0, packetHeader ); + const auto headerResult = Packets::getHeader( m_packets, 0, packetHeader ); - if( headerResult == Incomplete ) - { - Logger::info( "Dropping connection due to incomplete packet header." ); - Logger::info( "FIXME: Packet message bounary is not implemented." ); - disconnect(); + if( ( headerResult == Incomplete ) || ( headerResult == Malformed ) ) return; - } - else if( headerResult == Malformed ) - { - Logger::info( "Dropping connection due to malformed packet header." ); - disconnect(); - return; - } // Dissect packet list std::vector< Packets::FFXIVARR_PACKET_RAW > packetList; - const auto packetResult = Packets::getPackets( buffer, sizeof( struct FFXIVARR_PACKET_HEADER ), + const auto packetResult = Packets::getPackets( m_packets, sizeof( struct FFXIVARR_PACKET_HEADER ), packetHeader, packetList ); - if( packetResult == Incomplete ) - { - Logger::info( "Dropping connection due to incomplete packets." ); - Logger::info( "FIXME: Packet message bounary is not implemented." ); - disconnect(); + if( ( packetResult == Incomplete ) || ( packetResult == Malformed ) ) return; - } - else if( packetResult == Malformed ) - { - Logger::info( "Dropping connection due to malformed packets." ); - disconnect(); - return; - } // Handle it handlePackets( packetHeader, packetList ); + m_packets.clear(); } void Sapphire::Network::GameConnection::onError( const asio::error_code& error ) diff --git a/src/world/Network/GameConnection.h b/src/world/Network/GameConnection.h index 307d1a01..a83735e5 100644 --- a/src/world/Network/GameConnection.h +++ b/src/world/Network/GameConnection.h @@ -53,6 +53,7 @@ namespace Sapphire::Network LockedQueue< Sapphire::Network::Packets::FFXIVARR_PACKET_RAW > m_inQueue; LockedQueue< Packets::FFXIVPacketBasePtr > m_outQueue; + std::vector< uint8_t > m_packets; public: ConnectionType m_conType;