From fb322a95e8eda695aa4113f39ac9df29887fe263 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=84=B8=EC=A0=A4=EA=B7=80=20=EA=B3=A0=EC=96=91=EC=9D=B4?= =?UTF-8?q?=EB=93=A4?= <46598063+qwreey75@users.noreply.github.com> Date: Fri, 24 Dec 2021 19:37:13 +0900 Subject: [PATCH] added disconnecter --- src/event.lua | 33 +++++++++++++++++++++++++++++++++ src/store.lua | 8 +++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/event.lua b/src/event.lua index 465d445..913263b 100644 --- a/src/event.lua +++ b/src/event.lua @@ -72,6 +72,39 @@ function module.init(shared) -- when created binding new.created = prefix .. "Created::"; new.createdSync = prefix .. "CreatedSync::"; + + -- roblox connections disconnecter + local insert = table.insert; + local idSpace = {}; + local disconnecter = {}; + function disconnecter:add(connection) + insert(self,connection); + end + function disconnecter:destroy() + local id = self.id; + if id then + idSpace[id] = nil; + end + for i,v in pairs(self) do + pcall(v.Disconnect,v); + self[i] = nil; + end + end + disconnecter.__index = disconnecter; + function new.new(id) + if id then + local old = idSpace[id]; + if old then + return old; + end + end + local this = setmetatable({id = id},disconnecter); + if id then + idSpace[id] = this; + end + return this; + end + return new; end diff --git a/src/store.lua b/src/store.lua index af7d6a0..c3f205d 100644 --- a/src/store.lua +++ b/src/store.lua @@ -141,11 +141,17 @@ function module.init(shared) self[key] = self[key] or value; end function new.new(self,id) + if id then + local old = storeIdSpace[id]; + if old then + return old; + end + end local this = setmetatable( {__self = self or {},__evt = setmetatable({},week),__reg = setmetatable({},week)},store ); if id then - storeIdSpace[id] = id; + storeIdSpace[id] = this; end return this; end