Как ограничить доступ локальному актеру

Я ищу методы инкапсуляции, такие как private для членов класса. Я хотел бы, чтобы актер предоставил возможность принимать некоторые распространенные безопасные сообщения и привилегии, которые могут изменить состояние нежелательным образом. Я также могу создать прокси-актор, который будет фильтровать сообщения на основе политики доступа. Но оба актера по-прежнему будут доступны через полный путь актора ref. Как я могу сделать некоторую ссылку на актера частной, доступ к которой может получить только ее родитель?


person ayvango    schedule 20.08.2015    source источник


Ответы (1)


К любому актору может обращаться любой другой актор, если путь известен с помощью ActorSelection.

Если вы хотите ограничить определенные сообщения, вы можете сделать это с помощью таких вещей, как package-private.

Допустим, у вас есть DangerousActor, и вы хотите, чтобы субъекты, определенные в том же пакете, могли отправлять DangerousMessage, но у вас также есть SafeMessage, и вас устраивает, что кто-либо еще в системе акторов отправляет это.

package dangerous

object DangerousActor {
  private[dangerous] case object DangerousMessage
  case object SafeMessage
}

case DangerousActor extends Actor {
  import DangerousActor._

  def receive = {
    case DangerousMessage =>
    case SafeMessage => 
  }
}

Только субъекты, также определенные в пакете dangerous, смогут ссылаться на DangerousMessage.

person Ryan    schedule 20.08.2015