Supervisor<G extends Grunt> constructor

Supervisor<G extends Grunt>({
  1. required Type gruntType,
  2. required DuplexChannel grunt,
})

Implementation

Supervisor({required this.gruntType, required this.grunt}) {
  _sub = grunt.inbound.listen((DecodedMessage event) {
    log.info(
        " got message from worker: ${event.messageCodeInfo}: ${event.payload?.runtimeType}");
    switch (event.messageCode) {
      case GruntMessages.kReady:
        if (!_ready.isCompleted) {
          _ready.complete();
        }
        grunt.send(SupervisorMessages.kAck);
        break;
      case GruntMessages.kStatusUpdate:
        if (!_ready.isCompleted) {
          _ready.complete();
        }
        var workStatus = WorkStatus.fromJson(event.payload);
        if (workStatus != null) {
          log.info("  * details: ${workStatus.message}");
          if (workStatus.percentComplete != null) {
            log.info(
                "  * pct: ${(workStatus.percentComplete! * 100).toInt() / 100}%");
          }
          if (workStatus.error != null) {
            log.info("  * error: ${workStatus.error}");
          }
          log.info("  ---------------------------------");

          _status = _status + workStatus;
          _ctrl.add(_status);
        }
        break;
      default:
        log.severe("Invalid message: ${event.messageCode}");
    }
  });
}