- local _, _, key, value = string.find(line, "([^:]+):%s(.+)")
- if key then
- local k = string.lower(key)
- if k == "binary" then
- value = tonumber(value)
- local data = {}
- while value > 0 do
- local b = assert(obj:read_bytes(value))
- table.insert(data, b.data)
- value = value - #b
- end
- local w = obj:read_bytes(1) -- read newline at end of binary
- self._pending_reply[k] = table.concat(data)
- elseif k == "changed" then
- if not self._pending_reply[k] then
- self._pending_reply[k] = {}
- end
-
- self._pending_reply[k][value] = true
- else
- self._pending_reply[k] = value
+ arg = { line }
+ end
+ local handler = self._reply_handlers[1]
+ table.remove(self._reply_handlers, 1)
+ self._pending_reply = {}
+ handler(success, arg)
+
+ if next(self._reply_handlers) == nil then
+ self:_start_idle()
+ end
+ else
+ local _, _, key, value = string.find(line, "([^:]+):%s(.+)")
+ if key then
+ local k = string.lower(key)
+ if k == "binary" then
+ value = tonumber(value)
+ local data = {}
+ while value > 0 do
+ local b = assert(obj:read_bytes(value))
+ table.insert(data, b.data)
+ value = value - #b