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;