Calls methodOrCallback
with args
if it is a closure, otherwise, treat
it as a method name in object
, and invoke it.
void dispatchMethod(object, callbackOrMethod, List args) {
_eventsLog.info(() => '>>> [$_name]: dispatch $callbackOrMethod');
if (callbackOrMethod is Function) {
int maxArgs = smoke.maxArgs(callbackOrMethod);
if (maxArgs == -1) {
_eventsLog.warning(
'invalid callback: expected callback of 0, 1, 2, or 3 arguments');
}
args.length = maxArgs;
Function.apply(callbackOrMethod, args);
} else if (callbackOrMethod is String) {
smoke.invoke(object, smoke.nameToSymbol(callbackOrMethod), args,
adjust: true);
} else {
_eventsLog.warning('invalid callback');
}
_eventsLog.fine(() => '<<< [$_name]: dispatch $callbackOrMethod');
}