Supervisor<G extends Grunt>  constructor 
      
      Supervisor<G extends Grunt> ({ 
    
    
- required Type gruntType,
- 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}");
    }
  });
}