callMethod method
Implementation
Future callMethod(String name, [dynamic argument]) {
if (isWorker && _master != null) {
var handler = _master?._requestHandlers[name];
handler ??= _master?._pool?._methods[name];
dynamic result = handler!(argument);
if (result is! Future) {
return Future<void>.value(result);
} else {
return result;
}
} else if (_targetWorker != null) {
var handler = _targetWorker?._requestHandlers[name];
handler ??= _targetWorker?._pool?._methods[name];
dynamic result = handler!(argument);
if (result is! Future) {
return Future<void>.value(result);
} else {
return result;
}
}
var completer = Completer();
var rid = 0;
while (_responseHandlers[rid] != null) {
rid++;
}
_responseHandlers[rid] = completer;
if (argument == null) {
_sendPort.send({'t': 'req', 'i': rid, 'n': name});
} else {
_sendPort.send(<String, dynamic>{
't': 'req',
'i': rid,
'n': name,
'a': argument,
});
}
return completer.future;
}