diff --git a/controller-host/mymqtt.lua b/controller-host/mymqtt.lua index 32420b3..21ff70c 100644 --- a/controller-host/mymqtt.lua +++ b/controller-host/mymqtt.lua @@ -242,8 +242,33 @@ function clientMt:subscribe(args) return self:sendPacket() end +function clientMt:receiveBytes(count) + local result, err, partial = nil, nil, "" + while true do + result, err, partial = client:receive(1 - #partial, partial) + if err == "timeout" then + coroutine.yield() + else if result then + return result + else + return nil, err + end + end +end + +function clientMt:receiveByte() + return string.byte(self:receiveBytes(1))) +end + function clientMt:receivePacket() - local firstByte = self:receiveByte() + local firstByte, err = self:receiveByte() + if err then return nil, self:handleError(err) end +end + +function clientMt:threadReceive() + while true do + self:receiveAndHandlePacket() + end end function clientMt:on(eventHandlers) @@ -257,9 +282,10 @@ function mqtt.client(args) reconnect = 5, connection = nil, packetIdentifier = 1, - buffer = "", + buffer = "" } setmetatable(client, {__index = clientMt}) + client.create(function() client:threadReceive() end) return client end