mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-04-24 06:35:39 +00:00
Tinkering with zero testing
This commit is contained in:
@@ -15,18 +15,17 @@ ApiContext.Error = {
|
|||||||
|
|
||||||
setmetatable(ApiContext.Error, {
|
setmetatable(ApiContext.Error, {
|
||||||
__index = function(_, key)
|
__index = function(_, key)
|
||||||
error("Invalid API.Error name " .. key, 2)
|
error("Invalid ApiContext.Error name " .. key, 2)
|
||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
-- TODO: Switch to onMessages and batch processing
|
-- TODO: Switch to onMessages and batch processing
|
||||||
function ApiContext.new(baseUrl, onMessage)
|
function ApiContext.new(baseUrl)
|
||||||
assert(type(baseUrl) == "string")
|
assert(type(baseUrl) == "string")
|
||||||
assert(type(onMessage) == "function")
|
|
||||||
|
|
||||||
local context = {
|
local self = {
|
||||||
baseUrl = baseUrl,
|
baseUrl = baseUrl,
|
||||||
onMessage = onMessage,
|
onMessageCallback = nil,
|
||||||
serverId = nil,
|
serverId = nil,
|
||||||
rootInstanceId = nil,
|
rootInstanceId = nil,
|
||||||
connected = false,
|
connected = false,
|
||||||
@@ -34,9 +33,13 @@ function ApiContext.new(baseUrl, onMessage)
|
|||||||
partitionRoutes = nil,
|
partitionRoutes = nil,
|
||||||
}
|
}
|
||||||
|
|
||||||
setmetatable(context, ApiContext)
|
setmetatable(self, ApiContext)
|
||||||
|
|
||||||
return context
|
return self
|
||||||
|
end
|
||||||
|
|
||||||
|
function ApiContext:onMessage(callback)
|
||||||
|
self.onMessageCallback = callback
|
||||||
end
|
end
|
||||||
|
|
||||||
function ApiContext:connect()
|
function ApiContext:connect()
|
||||||
@@ -77,6 +80,11 @@ function ApiContext:read(ids)
|
|||||||
local url = ("%s/api/read/%s"):format(self.baseUrl, table.concat(ids, ","))
|
local url = ("%s/api/read/%s"):format(self.baseUrl, table.concat(ids, ","))
|
||||||
|
|
||||||
return Http.get(url)
|
return Http.get(url)
|
||||||
|
:catch(function(err)
|
||||||
|
self.connected = false
|
||||||
|
|
||||||
|
return Promise.reject(err)
|
||||||
|
end)
|
||||||
:andThen(function(response)
|
:andThen(function(response)
|
||||||
local body = response:json()
|
local body = response:json()
|
||||||
|
|
||||||
@@ -87,10 +95,6 @@ function ApiContext:read(ids)
|
|||||||
self.messageCursor = body.messageCursor
|
self.messageCursor = body.messageCursor
|
||||||
|
|
||||||
return body
|
return body
|
||||||
end, function(err)
|
|
||||||
self.connected = false
|
|
||||||
|
|
||||||
return Promise.reject(err)
|
|
||||||
end)
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -102,23 +106,7 @@ function ApiContext:retrieveMessages()
|
|||||||
local url = ("%s/api/subscribe/%s"):format(self.baseUrl, self.messageCursor)
|
local url = ("%s/api/subscribe/%s"):format(self.baseUrl, self.messageCursor)
|
||||||
|
|
||||||
return Http.get(url)
|
return Http.get(url)
|
||||||
:andThen(function(response)
|
:catch(function(err)
|
||||||
local body = response:json()
|
|
||||||
|
|
||||||
if body.serverId ~= self.serverId then
|
|
||||||
return Promise.reject("Server changed ID")
|
|
||||||
end
|
|
||||||
|
|
||||||
-- TODO: Wait for all messages to be processed before resuming.
|
|
||||||
-- This callback will return a promise!
|
|
||||||
for _, message in ipairs(body.messages) do
|
|
||||||
self.onMessage(message)
|
|
||||||
end
|
|
||||||
|
|
||||||
self.messageCursor = body.messageCursor
|
|
||||||
|
|
||||||
return self:retrieveMessages()
|
|
||||||
end, function(err)
|
|
||||||
if err.type == HttpError.Error.Timeout then
|
if err.type == HttpError.Error.Timeout then
|
||||||
return self:retrieveMessages()
|
return self:retrieveMessages()
|
||||||
end
|
end
|
||||||
@@ -127,6 +115,28 @@ function ApiContext:retrieveMessages()
|
|||||||
|
|
||||||
return Promise.reject(err)
|
return Promise.reject(err)
|
||||||
end)
|
end)
|
||||||
|
:andThen(function(response)
|
||||||
|
local body = response:json()
|
||||||
|
|
||||||
|
if body.serverId ~= self.serverId then
|
||||||
|
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.onMessageCalllback(message)
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
|
self.messageCursor = body.messageCursor
|
||||||
|
|
||||||
|
return promise
|
||||||
|
end)
|
||||||
|
:andThen(function()
|
||||||
|
return self:retrieveMessages()
|
||||||
|
end)
|
||||||
end
|
end
|
||||||
|
|
||||||
return ApiContext
|
return ApiContext
|
||||||
@@ -132,9 +132,9 @@ function Session.new()
|
|||||||
|
|
||||||
local instanceMap = makeInstanceMap()
|
local instanceMap = makeInstanceMap()
|
||||||
|
|
||||||
local api
|
local api = ApiContext.new(REMOTE_URL)
|
||||||
|
|
||||||
api = ApiContext.new(REMOTE_URL, function(message)
|
ApiContext:onMessage(function(message)
|
||||||
local idsToGet = {}
|
local idsToGet = {}
|
||||||
|
|
||||||
for _, id in ipairs(message.added) do
|
for _, id in ipairs(message.added) do
|
||||||
|
|||||||
Reference in New Issue
Block a user