in src/cpp/RiderLink/Source/RD/src/rd_framework_cpp/src/main/wire/SocketWire.cpp [333:367]
bool SocketWire::Base::read_and_dispatch_message() const
{
sz = (sz == -1 ? receive_pkg.read_integral<int32_t>() : sz);
if (sz == -1)
{
logger->debug("{}: sz == -1", this->id);
return false;
}
id_ = (id_ == -1 ? receive_pkg.read_integral<RdId::hash_t>() : id_);
if (id_ == -1)
{
logger->error("id == -1");
return false;
}
logger->trace("{}: message info: sz={}, id={}", this->id, sz, id_);
const RdId rd_id{id_};
sz -= 8; // RdId
message.require_available(sz);
if (!receive_pkg.read(message.data() + message.get_position(), sz - message.get_position()))
{
logger->error("{}: constructing message failed", this->id);
return false;
}
logger->debug("{}: message received", this->id);
message_broker.dispatch(rd_id, std::move(message));
logger->debug("{}: message dispatched", this->id);
sz = -1;
id_ = -1;
message.rewind();
return true;
// RD_ASSERT_MSG(summary_size == sz, "Broken message, read:%d bytes, expected:%d bytes", summary_size, sz)
}