diff --git a/plugin/src/ApiContext.lua b/plugin/src/ApiContext.lua index d8d301e1..19dd19eb 100644 --- a/plugin/src/ApiContext.lua +++ b/plugin/src/ApiContext.lua @@ -19,14 +19,15 @@ setmetatable(ApiContext.Error, { end }) -function ApiContext.new(url, onMessage) - assert(type(url) == "string") +function ApiContext.new(baseUrl, onMessage) + assert(type(baseUrl) == "string") assert(type(onMessage) == "function") local context = { - url = url, + baseUrl = baseUrl, onMessage = onMessage, serverId = nil, + rootInstanceId = nil, connected = false, messageCursor = -1, partitionRoutes = nil, @@ -38,7 +39,9 @@ function ApiContext.new(url, onMessage) end function ApiContext:connect() - return Http.get(self.url .. "/api/rojo") + local url = ("%s/api/rojo"):format(self.baseUrl) + + return Http.get(url) :andThen(function(response) local body = response:json() @@ -61,15 +64,18 @@ function ApiContext:connect() self.serverId = body.serverId self.connected = true self.partitionRoutes = body.partitions + self.rootInstanceId = body.rootInstanceId end) end -function ApiContext:readAll() +function ApiContext:read(ids) if not self.connected then return Promise.reject() end - return Http.get(self.url .. "/api/read_all") + local url = ("%s/api/read/%s"):format(self.baseUrl, table.concat(ids, ",")) + + return Http.get(url) :andThen(function(response) local body = response:json() @@ -92,7 +98,9 @@ function ApiContext:retrieveMessages() return Promise.reject() end - return Http.get(self.url .. "/api/subscribe/" .. self.messageCursor) + local url = ("%s/api/subscribe/%s"):format(self.baseUrl, self.messageCursor) + + return Http.get(url) :andThen(function(response) local body = response:json() diff --git a/plugin/src/Http.lua b/plugin/src/Http.lua index d6dd9cdb..57cedc15 100644 --- a/plugin/src/Http.lua +++ b/plugin/src/Http.lua @@ -1,6 +1,6 @@ local HttpService = game:GetService("HttpService") -local HTTP_DEBUG = false +local HTTP_DEBUG = true local Promise = require(script.Parent.Parent.Promise) diff --git a/plugin/src/Session.lua b/plugin/src/Session.lua index 47d8d5d0..4eb1d012 100644 --- a/plugin/src/Session.lua +++ b/plugin/src/Session.lua @@ -11,57 +11,7 @@ function Session.new() setmetatable(self, Session) - local function createFoldersUntil(location, route) - for i = 1, #route - 1 do - local piece = route[i] - - local child = location:FindFirstChild(piece) - - if child == nil then - child = Instance.new("Folder") - child.Name = piece - child.Parent = location - end - - location = child - end - - return location - end - - local function reify(instancesById, id) - local object = instancesById[tostring(id)] - local instance = Instance.new(object.className) - instance.Name = object.name - - for key, property in pairs(object.properties) do - instance[key] = property.value - end - - for _, childId in ipairs(object.children) do - reify(instancesById, childId).Parent = instance - end - - return instance - end - local api - local function readAll() - print("Reading all...") - - return api:readAll() - :andThen(function(response) - for partitionName, partitionRoute in pairs(api.partitionRoutes) do - local parent = createFoldersUntil(game, partitionRoute) - - local rootInstanceId = response.partitionInstances[partitionName] - - print("Root for", partitionName, "is", rootInstanceId) - - reify(response.instances, rootInstanceId).Parent = parent - end - end) - end api = ApiContext.new(REMOTE_URL, function(message) if message.type == "InstanceChanged" then @@ -73,7 +23,9 @@ function Session.new() end) api:connect() - :andThen(readAll) + :andThen(function() + return api:read({api.rootInstanceId}) + end) :andThen(function() return api:retrieveMessages() end)