diff --git a/src/packets/packet.luau b/src/packets/packet.luau index 4afdeb0..d050009 100644 --- a/src/packets/packet.luau +++ b/src/packets/packet.luau @@ -85,25 +85,20 @@ return function(props: types.packetProps>, id: numb function exported.wait() -- define it up here so we can use it to disconnect - local index: number - local runningThread = coroutine.running() - table.insert(listeners, function(data, player) + local Callback: (any,Player) -> () + Callback = function(data, player) task.spawn(runningThread, data, player) - - -- Disconnects the listener - table.remove(listeners, index) - end) - - -- we connected, time to set the index for when we need to disconnect. - index = #listeners - - -- the listener will resume the thread + table.remove(listeners,table.find(listeners,Callback)) + end + table.insert(listeners, Callback) return coroutine.yield() end - function exported.listen(callback) table.insert(listeners, callback) + return function() + table.remove(listeners,table.find(listeners, callback)) + end end function exported.getListeners() diff --git a/src/process/read.luau b/src/process/read.luau index c8a0a77..0cf1d74 100644 --- a/src/process/read.luau +++ b/src/process/read.luau @@ -35,7 +35,15 @@ return function(incomingBuffer: buffer, references: { [number]: unknown }?, play readRefs.set(references) while readCursor < length do - local packet = ref[buffer.readu8(incomingBuffer, readCursor)] + local packet + while true do + packet = ref[buffer.readu8(incomingBuffer, readCursor)] + if not packet then + task.wait() + else + break + end + end readCursor += 1 local value, valueLength = packet.reader(incomingBuffer, readCursor) diff --git a/src/process/server.luau b/src/process/server.luau index fcac755..5e765f2 100644 --- a/src/process/server.luau +++ b/src/process/server.luau @@ -101,7 +101,10 @@ function serverProcess.start() end Players.PlayerAdded:Connect(playerAdded) - + Players.PlayerRemoving:Connect(function(Player) + perPlayerReliable[Player] = nil + perPlayerUnreliable[Player] = nil + end) RunService.Heartbeat:Connect(function() -- Check if the channel has anything before trying to send it if globalReliable.cursor > 0 then