From 00d359a064ca6958eb8efc1022de12d7d8b82f7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=9C=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D0=BD=D0=BA=D0=B5=D0=B2=D0=B8=D1=87?= Date: Wed, 3 Dec 2025 17:42:51 +0700 Subject: [PATCH] Fix IpcMessage::empty so skeleton stops reading args and server replies --- include/ipc/IpcMessage.h | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/include/ipc/IpcMessage.h b/include/ipc/IpcMessage.h index a6a7298..50e21a4 100644 --- a/include/ipc/IpcMessage.h +++ b/include/ipc/IpcMessage.h @@ -39,16 +39,27 @@ public: } bool empty() const { - return raw_.empty(); + // Для входящих сообщений считаем "пустым" то, у которого + // больше не осталось непрочитанных данных во входном потоке. + // + // Для свежесозданного сообщения (ещё не инициализирован in_) + // поведение остаётся прежним: пусто == raw_.empty(). + if (!in_initialized_) { + return raw_.empty(); + } + + // Если поток уже инициализирован, смотрим, остались ли данные. + // peek() вернёт EOF, когда всё прочитано. + return in_.peek() == EOF; } private: std::string raw_; std::ostringstream out_; - std::istringstream in_; - bool in_initialized_{false}; + mutable std::istringstream in_; + mutable bool in_initialized_{false}; - void ensureInput() { + void ensureInput() const { if (!in_initialized_) { in_.str(raw_); in_initialized_ = true;