diff --git a/plugin/src/ApiContext.lua b/plugin/src/ApiContext.lua index 31893647..44259c1c 100644 --- a/plugin/src/ApiContext.lua +++ b/plugin/src/ApiContext.lua @@ -82,11 +82,16 @@ function ApiContext.new(baseUrl) __baseUrl = baseUrl, __serverId = nil, __messageCursor = -1, + __connected = true, } return setmetatable(self, ApiContext) end +function ApiContext:disconnect() + self.__connected = false +end + function ApiContext:connect() local url = ("%s/api/rojo"):format(self.__baseUrl) @@ -132,7 +137,7 @@ function ApiContext:retrieveMessages() local function sendRequest() return Http.get(url) :catch(function(err) - if err.type == Http.Error.Kind.Timeout then + if err.type == Http.Error.Kind.Timeout and self.__connected then return sendRequest() end diff --git a/plugin/src/ServeSession.lua b/plugin/src/ServeSession.lua index 8b6de64a..6033dde4 100644 --- a/plugin/src/ServeSession.lua +++ b/plugin/src/ServeSession.lua @@ -109,12 +109,17 @@ function ServeSession:start() end) end) :catch(function(err) - self:__setStatus(Status.Disconnected, err) + self:__stopInternal(err) end) end function ServeSession:stop() - self:__setStatus(Status.Disconnected) + self:__stopInternal() +end + +function ServeSession:__stopInternal(err) + self:__setStatus(Status.Disconnected, err) + self.__apiContext:disconnect() end function ServeSession:__setStatus(status, detail)