isolateHandler function

void isolateHandler(
  1. IsolateSpawnParameter param
)

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