run<Event, Req extends Object?, Res extends Object?> method
Future<Maybe<Res>>
run<
Event, Req extends Object?, Res extends Object?>({ - required Event event,
- Req? data,
- Duration? timeout,
- bool trackTime = false,
})
Method for calling the Backend's registered actions from the Frontend
Implementation
@protected
Future<Maybe<Res>> run<Event, Req extends Object?, Res extends Object?>({
required Event event,
Req? data,
Duration? timeout,
bool trackTime = false,
}) async {
final code = generateMessageCode(event);
final completer = Completer<Maybe<dynamic>>();
final currentTrace = StackTrace.current;
final runningFunctionName = getNameOfParentRunningFunction(
currentTrace.toString(),
);
_completers[code] = completer;
_runningFunctions[code] = runningFunctionName;
if (trackTime) {
_timeTrackers[code] = DateTime.now();
}
_frontendIn.send(
Message<Event, Req?>(
event: event,
data: data,
code: code,
timestamp: DateTime.now(),
serviceData: ServiceData.none,
),
);
Timer? timer;
if (timeout != null) {
timer = Timer(timeout, () {
_completers.remove(code);
_runningFunctions.remove(code);
throw Exception(
'Timeout ($timeout) of action $event with code $code exceed');
});
}
final result = await completer.future;
timer?.cancel();
_completers.remove(code);
_runningFunctions.remove(code);
return result.castTo<Res>();
}