runServer method
Implementation
Future<ServerInfo> runServer() async {
Actors actors = Actors(_actors);
await actors.initState();
var actorContainers = ActorContainers(actors.actorContainers);
_supervisors.addAll(
List.generate(numberOfIsolates, (index) => IsolateSupervisor()));
await Future.wait(List.generate(
_supervisors.length, (index) => _supervisors[index].initState()));
final TemplateRender templateRender = TemplateRender(_instance.cache);
templateRender.rootPath = _instance.viewPath;
final ServerInput serverInput = ServerInput(
_instance.port,
_instance.host,
_instance.routers,
_instance.routes,
_instance.middlewares,
_instance.webSocket,
_instance.socketIOServer,
corsOptions: _instance.corsOptions,
securityContext: _instance.securityContext,
exceptionsHandler: exceptionsAndErrosHandler);
ServerContext serverContext = ServerContext(actorContainers);
ServerInfo? serverInfo;
for (var i = 0; i < _supervisors.length; i++) {
IsolateError? error;
var subscription = _supervisors[i].errors.listen((event) {
error ??= event;
});
var subscriptionServerInfo = _supervisors[i].serverInfo.listen((event) {
serverInfo ??= event.serverInfo;
});
templateRender.rootPath = _instance.viewPath;
await _supervisors[i].start(ServerTaskHandler(
i, true, templateRender, serverInput, serverContext));
subscription.cancel();
subscriptionServerInfo.cancel();
if (error != null) {
throw Exception(
'an error occurred in the server instance: $i.\n\nInstance error:\n\n${error!.error}\n\nInstance stack trace:\n\n${error!.stackTrace}');
}
}
return serverInfo!;
}