mirror of
https://github.com/littensy/charm.git
synced 2026-10-22 12:41:37 +00:00
fix: remove unsynced signals immediately
This commit is contained in:
parent
fd752d87d7
commit
72b290219d
1 changed files with 26 additions and 26 deletions
|
|
@ -5,6 +5,7 @@ local types = require("./types")
|
||||||
local utils = require("./utils")
|
local utils = require("./utils")
|
||||||
|
|
||||||
type ReactiveProxy<T = {}> = Charm.ReactiveProxy<T>
|
type ReactiveProxy<T = {}> = Charm.ReactiveProxy<T>
|
||||||
|
|
||||||
type SyncPayload = types.SyncPayload
|
type SyncPayload = types.SyncPayload
|
||||||
|
|
||||||
type SyncStatus = number
|
type SyncStatus = number
|
||||||
|
|
@ -227,6 +228,27 @@ local function selectFromGlobalPatch(client: any, globalPatch: { [string]: any }
|
||||||
return payloads
|
return payloads
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function startInterval(callback: () -> ())
|
||||||
|
if not game then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if connection then
|
||||||
|
connection:Disconnect()
|
||||||
|
end
|
||||||
|
|
||||||
|
local timestamp = os.clock()
|
||||||
|
|
||||||
|
connection = game:GetService("RunService").Heartbeat:Connect(function()
|
||||||
|
if config.interval >= 0 and os.clock() >= timestamp + config.interval then
|
||||||
|
timestamp = os.clock()
|
||||||
|
debug.profilebegin("CharmSync")
|
||||||
|
callback()
|
||||||
|
debug.profileend()
|
||||||
|
end
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
Subscribes a client to the given signals. When an update occurs, the client
|
Subscribes a client to the given signals. When an update occurs, the client
|
||||||
will receive a partial state patch to merge into their local state. May be
|
will receive a partial state patch to merge into their local state. May be
|
||||||
|
|
@ -270,6 +292,7 @@ end
|
||||||
]]
|
]]
|
||||||
local function removeClient(client: any)
|
local function removeClient(client: any)
|
||||||
clients[client] = nil
|
clients[client] = nil
|
||||||
|
purgeUntracked()
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
|
|
@ -292,6 +315,8 @@ local function removeSignalsFromClient(client: any, ...: string)
|
||||||
|
|
||||||
if next(clientKeys) == nil then
|
if next(clientKeys) == nil then
|
||||||
removeClient(client)
|
removeClient(client)
|
||||||
|
else
|
||||||
|
purgeUntracked()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -322,7 +347,6 @@ local function flush()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
purgeUntracked()
|
|
||||||
table.clear(globalUpdates)
|
table.clear(globalUpdates)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -334,32 +358,8 @@ end
|
||||||
@param onSync Called when sending patches to a client.
|
@param onSync Called when sending patches to a client.
|
||||||
]]
|
]]
|
||||||
local function connect(onSync: (client: any, payloads: { SyncPayload }) -> ())
|
local function connect(onSync: (client: any, payloads: { SyncPayload }) -> ())
|
||||||
if connection then
|
|
||||||
connection:Disconnect()
|
|
||||||
end
|
|
||||||
|
|
||||||
syncCallback = onSync
|
syncCallback = onSync
|
||||||
|
startInterval(flush)
|
||||||
if not game then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
local timer = 0
|
|
||||||
|
|
||||||
connection = game:GetService("RunService").Heartbeat:Connect(function(deltaTime)
|
|
||||||
if config.interval < 0 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
|
|
||||||
timer += deltaTime
|
|
||||||
|
|
||||||
if timer >= config.interval then
|
|
||||||
timer = 0
|
|
||||||
debug.profilebegin("CharmSync")
|
|
||||||
flush()
|
|
||||||
debug.profileend()
|
|
||||||
end
|
|
||||||
end)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
--[[
|
--[[
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue