mirror of
https://github.com/lifestorm/wnsrc.git
synced 2025-12-16 13:23:46 +03:00
Upload
This commit is contained in:
53
addons/sam-master/lua/sam/libs/sh_async_netstream.lua
Normal file
53
addons/sam-master/lua/sam/libs/sh_async_netstream.lua
Normal file
@@ -0,0 +1,53 @@
|
||||
--[[
|
||||
| This file was obtained through the combined efforts
|
||||
| of Madbluntz & Plymouth Antiquarian Society.
|
||||
|
|
||||
| Credits: lifestorm, Gregory Wayne Rossel JR.,
|
||||
| Maloy, DrPepper10 @ RIP, Atle!
|
||||
|
|
||||
| Visit for more: https://plymouth.thetwilightzone.ru/
|
||||
--]]
|
||||
|
||||
if SAM_LOADED then return end
|
||||
|
||||
local netstream = sam.netstream
|
||||
netstream.async = {}
|
||||
|
||||
if SERVER then
|
||||
local IsValid = IsValid
|
||||
function netstream.async.Hook(name, fn, check)
|
||||
netstream.Hook(name, function(ply, i, ...)
|
||||
if not sam.isnumber(i) then return end
|
||||
local res = function(...)
|
||||
if IsValid(ply) then
|
||||
netstream.Start(ply, name, i, ...)
|
||||
end
|
||||
end
|
||||
fn(res, ply, ...)
|
||||
end, check)
|
||||
end
|
||||
else
|
||||
local count = 0
|
||||
local receivers = {}
|
||||
|
||||
local hook_fn = function(i, ...)
|
||||
local receiver = receivers[i]
|
||||
if receiver[2] then
|
||||
receiver[2]()
|
||||
end
|
||||
receiver[1]:resolve(...)
|
||||
receivers[i] = nil
|
||||
end
|
||||
|
||||
function netstream.async.Start(name, func_to_call, ...)
|
||||
local promise = sam.Promise.new()
|
||||
count = count + 1
|
||||
receivers[count] = {promise, func_to_call}
|
||||
netstream.Hook(name, hook_fn)
|
||||
if func_to_call then
|
||||
func_to_call()
|
||||
end
|
||||
netstream.Start(name, count, ...)
|
||||
return promise
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user