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<DoxService> services = param.services;
/// creating dox in new isolate;
Dox().isolateId = param.isolateId;
Dox().initialize(appConfig);
Dox().addServices(services);
/// register routes
Route().setRoutes(param.routes);
/// starting registered services in new isolate;
await Dox().startServices();
/// starting server in new isolate
DoxServer().setResponseHandler(param.config.responseHandler);
await DoxServer().listen(
DoxServer.portFor(appConfig.serverPort),
address: DoxServer.hostFor(appConfig.host),
isolateId: param.isolateId,
);
/// 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);
}