callMethod method

Future callMethod(
  1. String name, [
  2. dynamic argument
])

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;
}