private[this] def supervisor()

in src/main/scala/com/twitter/scaffold/InterpreterSupervisor.scala [14:43]


  private[this] def supervisor(id: String): Cancellable =
    context.system.scheduler.scheduleOnce(idleTimeout, self, Destroy(id))

  def receive = {
    case Create =>
      val id = randomId()
      val interpreter = context.actorOf(Interpreter.props, s"interpreter-$id")
      interpreters += id -> new SupervisedInterpreter(interpreter, supervisor(id))
      sender ! Created(id)

    case Destroy(id) =>
      interpreters.remove(id) match {
        case Some(supervisedInterpreter) =>
          supervisedInterpreter.interpreter ! PoisonPill
          supervisedInterpreter.supervisor.cancel()
          sender ! Destroyed
        case None =>
          sender ! NoSuchInterpreter
      }

    case Request(id, request) =>
      interpreters.get(id) match {
        case Some(supervisedInterpreter) =>
          supervisedInterpreter.interpreter.forward(request)
          supervisedInterpreter.supervisor.cancel()
          supervisedInterpreter.supervisor = supervisor(id)
        case None =>
          sender ! NoSuchInterpreter
      }
  }