mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-10-20 17:41:37 +00:00
Refactor Session and ApiContext to allow cancelation
This commit is contained in:
parent
f21f01be1a
commit
30ce927621
3 changed files with 83 additions and 75 deletions
|
|
@ -19,17 +19,14 @@ setmetatable(ApiContext.Error, {
|
|||
end
|
||||
})
|
||||
|
||||
-- TODO: Switch to onMessages and batch processing
|
||||
function ApiContext.new(baseUrl)
|
||||
assert(type(baseUrl) == "string")
|
||||
|
||||
local self = {
|
||||
baseUrl = baseUrl,
|
||||
onMessageCallback = nil,
|
||||
serverId = nil,
|
||||
rootInstanceId = nil,
|
||||
instanceMetadataMap = nil,
|
||||
connected = false,
|
||||
messageCursor = -1,
|
||||
partitionRoutes = nil,
|
||||
}
|
||||
|
|
@ -100,21 +97,14 @@ function ApiContext:connect()
|
|||
self.partitionRoutes = body.partitions
|
||||
self.rootInstanceId = body.rootInstanceId
|
||||
self.instanceMetadataMap = body.instanceMetadataMap
|
||||
self.connected = true
|
||||
end)
|
||||
end
|
||||
|
||||
function ApiContext:read(ids)
|
||||
if not self.connected then
|
||||
return Promise.reject()
|
||||
end
|
||||
|
||||
local url = ("%s/api/read/%s"):format(self.baseUrl, table.concat(ids, ","))
|
||||
|
||||
return Http.get(url)
|
||||
:catch(function(err)
|
||||
self.connected = false
|
||||
|
||||
return Promise.reject(err)
|
||||
end)
|
||||
:andThen(function(response)
|
||||
|
|
@ -131,10 +121,6 @@ function ApiContext:read(ids)
|
|||
end
|
||||
|
||||
function ApiContext:retrieveMessages()
|
||||
if not self.connected then
|
||||
return Promise.reject()
|
||||
end
|
||||
|
||||
local url = ("%s/api/subscribe/%s"):format(self.baseUrl, self.messageCursor)
|
||||
|
||||
return Http.get(url)
|
||||
|
|
@ -143,8 +129,6 @@ function ApiContext:retrieveMessages()
|
|||
return self:retrieveMessages()
|
||||
end
|
||||
|
||||
self.connected = false
|
||||
|
||||
return Promise.reject(err)
|
||||
end)
|
||||
:andThen(function(response)
|
||||
|
|
@ -154,20 +138,9 @@ function ApiContext:retrieveMessages()
|
|||
return Promise.reject("Server changed ID")
|
||||
end
|
||||
|
||||
local promise = Promise.resolve(nil)
|
||||
|
||||
for _, message in ipairs(body.messages) do
|
||||
promise = promise:andThen(function()
|
||||
return self.onMessageCallback(message)
|
||||
end)
|
||||
end
|
||||
|
||||
self.messageCursor = body.messageCursor
|
||||
|
||||
return promise
|
||||
end)
|
||||
:andThen(function()
|
||||
return self:retrieveMessages()
|
||||
return body.messages
|
||||
end)
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue