mirror of
https://github.com/rojo-rbx/rojo.git
synced 2026-10-24 06:34:09 +00:00
Basic synchronization of edited objects
This commit is contained in:
parent
00b903e97c
commit
8729de1312
6 changed files with 148 additions and 34 deletions
|
|
@ -57,14 +57,35 @@ function ApiContext:connect()
|
|||
|
||||
self.serverId = body.serverId
|
||||
self.connected = true
|
||||
|
||||
return self:_retrieveMessages()
|
||||
end)
|
||||
end
|
||||
|
||||
function ApiContext:_retrieveMessages()
|
||||
function ApiContext:readAll()
|
||||
if not self.connected then
|
||||
return Promise.resolve()
|
||||
return Promise.reject()
|
||||
end
|
||||
|
||||
return Http.get(self.url .. "/read_all")
|
||||
:andThen(function(response)
|
||||
local body = response:json()
|
||||
|
||||
if body.serverId ~= self.serverId then
|
||||
return Promise.reject("server changed ID")
|
||||
end
|
||||
|
||||
self.messageCursor = body.messageCursor
|
||||
|
||||
return body.instances
|
||||
end, function(err)
|
||||
self.connected = false
|
||||
|
||||
return Promise.reject(err)
|
||||
end)
|
||||
end
|
||||
|
||||
function ApiContext:retrieveMessages()
|
||||
if not self.connected then
|
||||
return Promise.reject()
|
||||
end
|
||||
|
||||
return Http.get(self.url .. "/subscribe/" .. self.messageCursor)
|
||||
|
|
@ -81,7 +102,7 @@ function ApiContext:_retrieveMessages()
|
|||
|
||||
self.messageCursor = body.messageCursor
|
||||
|
||||
return self:_retrieveMessages()
|
||||
return self:retrieveMessages()
|
||||
end, function(err)
|
||||
self.connected = false
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,4 @@
|
|||
local Promise = require(script.Parent.Parent.modules.Promise)
|
||||
|
||||
local Config = require(script.Parent.Config)
|
||||
local Http = require(script.Parent.Http)
|
||||
local ApiContext = require(script.Parent.ApiContext)
|
||||
|
||||
local REMOTE_URL = ("http://localhost:%d"):format(Config.port)
|
||||
|
|
@ -14,10 +11,59 @@ function Session.new()
|
|||
|
||||
setmetatable(self, Session)
|
||||
|
||||
local api = ApiContext.new(REMOTE_URL, function(message)
|
||||
print("Got message:", message)
|
||||
local created = {}
|
||||
|
||||
created["0"] = game:GetService("ReplicatedFirst")
|
||||
|
||||
local api
|
||||
local function readAll()
|
||||
print("Reading all...")
|
||||
|
||||
return api:readAll()
|
||||
:andThen(function(instances)
|
||||
for id, instance in pairs(instances) do
|
||||
if id ~= "0" then
|
||||
local existing = created[id]
|
||||
if existing ~= nil then
|
||||
pcall(existing.Destroy, existing)
|
||||
end
|
||||
|
||||
local real = Instance.new(instance.className)
|
||||
real.Name = instance.name
|
||||
|
||||
for key, value in pairs(instance.properties) do
|
||||
real[key] = value
|
||||
end
|
||||
|
||||
created[id] = real
|
||||
end
|
||||
end
|
||||
|
||||
for id, instance in pairs(instances) do
|
||||
if id ~= "0" then
|
||||
print("parent", created[id], created[tostring(instance.parent)])
|
||||
created[id].Parent = created[tostring(instance.parent)]
|
||||
end
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
api = ApiContext.new(REMOTE_URL, function(message)
|
||||
print("got message", message)
|
||||
|
||||
if message.type == "InstanceChanged" then
|
||||
print("Instance", message.id, "changed!")
|
||||
readAll()
|
||||
else
|
||||
warn("Unknown message type " .. message.type)
|
||||
end
|
||||
end)
|
||||
|
||||
api:connect()
|
||||
:andThen(readAll)
|
||||
:andThen(function()
|
||||
return api:retrieveMessages()
|
||||
end)
|
||||
|
||||
return self
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue