It works almost exactly like the built-in RegisterEvent/OnEvent system:
lua Code:
local MyFrame = CreateFrame("Frame")
MyFrame:RegisterEvent("SOME_EVENT")
MyFrame:SetScript("OnEvent", function(self, event, arg1, arg2)
print(event .. " fired with arguments " .. arg1 .. " and " .. arg2)
end)
versus:
lua Code:
local MyFrame = CreateFrame("Frame")
local LibSomething = LibStub("LibSomething-1.0")
LibSomething.RegisterCallback(MyFrame, "SomethingHappened")
function MyAddon:SomethingHappened(event, arg1, arg2)
print(event .. " fired with arguments " .. arg1 .. " and " ... arg2)
end
If you're asking how to use CallbackHandler directly, eg. in a library:
lua Code:
local LibSomething = LibStub:NewLibrary("LibSomething-1.0", 1)
-- Set up the callback system:
local CallbackHandler = LibStub("CallbackHandler-1.0")
LibSomething.callbacks = CallbackHandler:New(LibSomething)
-- Fire an event named "SomethingHappened" with arguments 52 and "lolcats":
LibSomething.callbacks:Fire("SomethingHappened", 52, "lolcats")
If you want more details about how it works internally, just read the code for CallbackHandler-1.0 and/or any library that uses it. It's pretty straightforward.