N' Abend,
ich habe ein kleines Problem, und zwar liest boost::asio::read_until Bytes bis zu einem bestimmten Delimiter, es kann aber durchaus vorkommen das mehr Daten im Receive Buffer geschrieben werden, als der Delimiter endet.
Das Problem hierbei ist aber, wenn ein unvollständiges Packet am Ende steht, versucht er es zu verarbeiten und anschließend zu löschen.(logisch warum)
Es gibt keine 0 terminierenden Packets, bevor jemand fragt. ;o
Beispiel vollständiges Packet (0xFF = Packet end):
Beispiel unvollständiges Packet (first call):
Um das Problem zu lösen, müsste std::getline den letzten Abschnitt ignorieren, da dort das 0xFF fehlt.
Packet (second call):
Ich könnte jetzt einfach eine eigene Split-Funktion schreiben, aber mir währe es lieber den obigen Code um eine Funktion ergänzen zu können und deswegen frage ich euch, ob wer eine Idee parat hätte.
ich habe ein kleines Problem, und zwar liest boost::asio::read_until Bytes bis zu einem bestimmten Delimiter, es kann aber durchaus vorkommen das mehr Daten im Receive Buffer geschrieben werden, als der Delimiter endet.
Somit habe ich mir etwas geschrieben, um alle vollständigen Packets von dem Receive Buffer zu bekommen, dass klappt auch soweit.Quote:
After a successful read_until operation, the streambuf may contain additional data beyond the delimiter. An application will typically leave that data in the streambuf for a subsequent read_until operation to examine.
Das Problem hierbei ist aber, wenn ein unvollständiges Packet am Ende steht, versucht er es zu verarbeiten und anschließend zu löschen.(logisch warum)
Es gibt keine 0 terminierenden Packets, bevor jemand fragt. ;o
Code:
std::string packet_sequence;
std::istream stream(&_bufReceive);
while(!std::getline(stream, packet_sequence, static_cast<char>(buf_delim)).eof())
{
_packetHandler->process(_packetEncoding->decryptLoginPacket(packet_sequence));
_bufReceive.consume(packet_sequence.size());
}
Code:
request_login <user> <password> 0xFF
Code:
request_login <user> <password> 0xFF request_something <so
Packet (second call):
Code:
mething> 0xFF