Skip to content

Disconnect

Remove a callback from a message. light.disconnect() returns the old callback if there was one.

function light.disconnect

Client Synchronous
1
2
3
4
5
function disconnect<Data>(
   message: Message<Data>
) -> (
   ((Data) -> ())?
)

function light.disconnect

Server Synchronous
1
2
3
4
5
function disconnect<Data>(
   message: Message<Data>
) -> (
   ((Player, Data) -> ())?
)

An example message-call profiler using light.disconnect() and light.connect_sync():

profiler.luau
local profile_message
do
    local sessions = {}
    function profile_message(message: Message)
        if sessions[message] then
            return nil
        end

        local old_callback = light.disconnect(message)

        if not old_callback then
            return nil
        end

        local calls = 0

        light.connect_sync(message, function(...)
            calls += 1

            old_callback(...)
        end)

        -- wrapping in a coroutine since session shouldn't be ended twice
        sessions[message] = coroutine.wrap(function()
            sessions[message] = nil

            light.disconnect(message)

            light.connect(message, old_callback)

            return table.freeze({
                calls = calls
            })
        end)

        return sessions[message]
    end
end