isolateHandler function
process middleware and controller and sent data via sentPort
Implementation
void isolateHandler(IsolateSpawnParameter param) async {
/// send port of main isolate
AppConfig appConfig = param.config;
List<DoxProvider> providers = param.providers;
/// creating dox in new isolate;
Dox().isolateId = param.isolateId;
Dox().isolateCount = param.isolateCount;
/// RateLimit counts live in the main isolate
RateLimitCounter.instance.connect(param.rateLimitPort);
IsolateBus.instance.connect(param.busPort, param.isolateId);
Dox().initialize(appConfig);
Dox().addProviders(providers);
/// register routes
Route().setRoutes(param.routes);
Route().setFallbacks(param.fallbacks.toList());
Route().setStatics(param.statics);
Route().setBindings(Map<String, RouteBinding>.of(param.bindings));
/// starting registered providers in new isolate;
await Dox().startProviders();
/// starting server in new isolate
DoxServer().setResponseHandler(param.config.responseHandler);
await DoxServer().listen(
DoxServer.portFor(appConfig.serverPort),
address: DoxServer.hostFor(appConfig.host),
);
/// the main isolate sends a reply port here to stop this isolate
ReceivePort commands = ReceivePort();
commands.listen((dynamic reply) async {
commands.close();
await Dox().stopIsolate();
(reply as SendPort).send(true);
});
param.control?.send(commands.sendPort);
}