def busy()

in pekko-sample-distributed-workers-scala/src/main/scala/worker/FrontEnd.scala [56:82]


  def busy(workCounter: Int, workInProgress: Work): Behavior[Command] = {
    def sendWork(work: Work): Unit = {
      implicit val timeout: Timeout = Timeout(5.seconds)
      ctx.ask[SubmitWork, WorkManager.Ack](workManager, replyTo => SubmitWork(work, replyTo)) {
        case Success(_) => WorkAccepted
        case Failure(_) => Failed
      }
    }

    sendWork(workInProgress)

    Behaviors.receiveMessage {
      case Failed =>
        ctx.log.info("Work {} not accepted, retry after a while", workInProgress.workId)
        timers.startSingleTimer("retry", Retry, 3.seconds)
        Behaviors.same
      case WorkAccepted =>
        ctx.log.info("Got ack for workId {}", workInProgress.workId)
        idle(workCounter)
      case Retry =>
        ctx.log.info("Retrying work {}", workInProgress.workId)
        sendWork(workInProgress)
        Behaviors.same
      case Tick =>
        Behaviors.unhandled
    }
  }