From b824f18df9c01e8cbea99a427a12b71a062f6003 Mon Sep 17 00:00:00 2001 From: Sebastiaan de Schaetzen Date: Thu, 18 Jul 2024 11:46:18 +0200 Subject: [PATCH] Initial receive support in mymqtt --- controller-host/mymqtt.lua | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) 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