mirror of
https://github.com/ciphervance/supercell-wx.git
synced 2025-10-30 19:00:04 +00:00
Handle raw message content when istream is EOF
This commit is contained in:
parent
ad7f3674d6
commit
465507d6b5
1 changed files with 25 additions and 8 deletions
|
|
@ -164,16 +164,33 @@ bool TextProductMessage::Parse(std::istream& is)
|
|||
if (dataValid)
|
||||
{
|
||||
// Store raw message content
|
||||
std::streampos messageEnd = is.tellg();
|
||||
std::streamsize messageSize = messageEnd - messageStart;
|
||||
p->messageContent_.resize(messageEnd - messageStart);
|
||||
is.seekg(messageStart);
|
||||
if (is.peek() == common::Characters::SOH)
|
||||
if (is.good())
|
||||
{
|
||||
is.seekg(std::streamoff {1}, std::ios_base::cur);
|
||||
messageSize--;
|
||||
// Read content equal to the message size
|
||||
std::streampos messageEnd = is.tellg();
|
||||
std::streamsize messageSize = messageEnd - messageStart;
|
||||
p->messageContent_.resize(messageEnd - messageStart);
|
||||
is.seekg(messageStart);
|
||||
if (is.peek() == common::Characters::SOH)
|
||||
{
|
||||
is.seekg(std::streamoff {1}, std::ios_base::cur);
|
||||
messageSize--;
|
||||
}
|
||||
is.read(p->messageContent_.data(), messageSize);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Read remaining content in the input stream
|
||||
is.clear();
|
||||
is.seekg(messageStart);
|
||||
if (is.peek() == common::Characters::SOH)
|
||||
{
|
||||
is.seekg(std::streamoff {1}, std::ios_base::cur);
|
||||
}
|
||||
|
||||
constexpr std::istreambuf_iterator<char> eos;
|
||||
p->messageContent_ = {std::istreambuf_iterator<char>(is), eos};
|
||||
}
|
||||
is.read(p->messageContent_.data(), messageSize);
|
||||
|
||||
// Trim extra characters from raw message
|
||||
while (p->messageContent_.size() > 0 &&
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue