Added Unconnect to connections. Allows fastmode connections to be removed

This commit is contained in:
Ryan Ward 2022-12-25 21:14:34 -05:00
parent f5e95b8c9f
commit 8c3d66a7b1
3 changed files with 111 additions and 67 deletions

View File

@ -83,6 +83,7 @@ multi:mainloop()
Added Added
--- ---
- `multi:newConnection():Unconnect(conn_link)` Fastmode previously didn't have the ability to be unconnected to. This method works with both fastmode and non fastmode. `fastMode` will be made the default in v16.0.0 (This is a breaking change for those using the Destroy method, use this time to migrate to using `Unconnect()`)
- `thread.chain(...)` allows you to chain `thread.hold(FUNCTIONs)` together - `thread.chain(...)` allows you to chain `thread.hold(FUNCTIONs)` together
```lua ```lua
while true do while true do

View File

@ -244,6 +244,14 @@ function multi:newConnection(protect,func,kill)
return call_funcs return call_funcs
end end
function c:Unconnect(conn)
if conn.fast then
table.remove(fast,conn.ind)
elseif conn.Destroy then
conn:Destroy()
end
end
function c:fastMode() function c:fastMode()
if find_optimization then return self end if find_optimization then return self end
function self:Fire(...) function self:Fire(...)
@ -253,7 +261,7 @@ function multi:newConnection(protect,func,kill)
end end
function self:Connect(func) function self:Connect(func)
table.insert(fast, func) table.insert(fast, func)
local temp = {} local temp = {fast = true, ind = #fast}
setmetatable(temp,{ setmetatable(temp,{
__call=function(s,...) __call=function(s,...)
return self:Connect(...) return self:Connect(...)

View File

@ -5,7 +5,42 @@ multi:getOptimizationConnection()(function(msg)
print(msg) print(msg)
end) end)
-- local conn1, conn2, conn3 = multi:newConnection(), multi:newConnection(), multi:newConnection() local conn1, conn2, conn3 = multi:newConnection(), multi:newConnection():fastMode(), multi:newConnection()
local link = conn1(function()
print("Conn1, first")
end)
local link2 = conn1(function()
print("Conn1, second")
end)
local link3 = conn1(function()
print("Conn1, third")
end)
local link4 = conn2(function()
print("Conn2, first")
end)
local link5 = conn2(function()
print("Conn2, second")
end)
local link6 = conn2(function()
print("Conn2, third")
end)
print("All conns\n-------------")
conn1:Fire()
conn2:Fire()
conn1:Unconnect(link3)
conn2:Unconnect(link6)
print("All conns Edit\n---------------------")
conn1:Fire()
conn2:Fire()
-- thread:newThread(function() -- thread:newThread(function()
-- print("Awaiting status") -- print("Awaiting status")
-- thread.hold(conn1 + (conn2 * conn3)) -- thread.hold(conn1 + (conn2 * conn3))
@ -25,74 +60,74 @@ end)
-- conn3:Fire() -- conn3:Fire()
-- end) -- end)
local conn = multi:newSystemThreadedConnection("conn"):init() -- local conn = multi:newSystemThreadedConnection("conn"):init()
multi:newSystemThread("Thread_Test_1", function() -- multi:newSystemThread("Thread_Test_1", function()
local multi, thread = require("multi"):init() -- local multi, thread = require("multi"):init()
local conn = GLOBAL["conn"]:init() -- local conn = GLOBAL["conn"]:init()
local console = THREAD.getConsole() -- local console = THREAD.getConsole()
conn(function(a,b,c) -- conn(function(a,b,c)
console.print(THREAD:getName().." was triggered!",a,b,c) -- console.print(THREAD:getName().." was triggered!",a,b,c)
end) -- end)
multi:mainloop() -- multi:mainloop()
end) -- end)
multi:newSystemThread("Thread_Test_2", function() -- multi:newSystemThread("Thread_Test_2", function()
local multi, thread = require("multi"):init() -- local multi, thread = require("multi"):init()
local conn = GLOBAL["conn"]:init() -- local conn = GLOBAL["conn"]:init()
local console = THREAD.getConsole() -- local console = THREAD.getConsole()
conn(function(a,b,c) -- conn(function(a,b,c)
console.print(THREAD:getName().." was triggered!",a,b,c) -- console.print(THREAD:getName().." was triggered!",a,b,c)
end) -- end)
multi:newAlarm(2):OnRing(function() -- multi:newAlarm(2):OnRing(function()
console.print("Fire 2!!!") -- console.print("Fire 2!!!")
conn:Fire(4,5,6) -- conn:Fire(4,5,6)
THREAD.kill() -- THREAD.kill()
end) -- end)
multi:mainloop() -- multi:mainloop()
end) -- end)
local console = THREAD.getConsole() -- local console = THREAD.getConsole()
conn(function(a,b,c) -- conn(function(a,b,c)
console.print("Mainloop conn got triggered!",a,b,c) -- console.print("Mainloop conn got triggered!",a,b,c)
end) -- end)
alarm = multi:newAlarm(1) -- alarm = multi:newAlarm(1)
alarm:OnRing(function() -- alarm:OnRing(function()
console.print("Fire 1!!!") -- console.print("Fire 1!!!")
conn:Fire(1,2,3) -- conn:Fire(1,2,3)
end) -- end)
alarm = multi:newAlarm(3):OnRing(function() -- alarm = multi:newAlarm(3):OnRing(function()
multi:newSystemThread("Thread_Test_3",function() -- multi:newSystemThread("Thread_Test_3",function()
local multi, thread = require("multi"):init() -- local multi, thread = require("multi"):init()
local conn = GLOBAL["conn"]:init() -- local conn = GLOBAL["conn"]:init()
local console = THREAD.getConsole() -- local console = THREAD.getConsole()
conn(function(a,b,c) -- conn(function(a,b,c)
console.print(THREAD:getName().." was triggered!",a,b,c) -- console.print(THREAD:getName().." was triggered!",a,b,c)
end) -- end)
multi:newAlarm(4):OnRing(function() -- multi:newAlarm(4):OnRing(function()
console.print("Fire 3!!!") -- console.print("Fire 3!!!")
conn:Fire(7,8,9) -- conn:Fire(7,8,9)
end) -- end)
multi:mainloop() -- multi:mainloop()
end) -- end)
end) -- end)
multi:newSystemThread("Thread_Test_4",function() -- multi:newSystemThread("Thread_Test_4",function()
local multi, thread = require("multi"):init() -- local multi, thread = require("multi"):init()
local conn = GLOBAL["conn"]:init() -- local conn = GLOBAL["conn"]:init()
local conn2 = multi:newConnection() -- local conn2 = multi:newConnection()
local console = THREAD.getConsole() -- local console = THREAD.getConsole()
multi:newAlarm(2):OnRing(function() -- multi:newAlarm(2):OnRing(function()
conn2:Fire() -- conn2:Fire()
end) -- end)
multi:newThread(function() -- multi:newThread(function()
console.print("Conn Test!") -- console.print("Conn Test!")
thread.hold(conn + conn2) -- thread.hold(conn + conn2)
console.print("It held!") -- console.print("It held!")
end) -- end)
multi:mainloop() -- multi:mainloop()
end) -- end)
multi:mainloop() -- multi:mainloop()