bool SocketWire::Base::read_and_dispatch_message()

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)
}