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