if type(err) ~= "number" then
self._output, self._input = nil, nil
self:_error(err)
- else
- line = tostring(line)
- if line == "OK" or line:match("^ACK ") then
- local success = line == "OK"
- local arg
- if success then
- arg = self._pending_reply
- else
- arg = { line }
- end
- local handler = self._reply_handlers[1]
- table.remove(self._reply_handlers, 1)
- self._pending_reply = {}
- handler(success, arg)
+ return
+ end
- if next(self._reply_handlers) == nil then
- self:_start_idle()
- end
+ line = tostring(line)
+ if line == "OK" or line:match("^ACK ") then
+ local success = line == "OK"
+ local arg
+ if success then
+ arg = self._pending_reply
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
- 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
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
end
end
- do_read()
end
+ do_read()
end)
end
do_read()