Акка FSM "тайм-аут" над мерой, которая не время (в Scala) - PullRequest
2 голосов
/ 29 марта 2012

Я пытался использовать FSM в Akka для моделирования состояний протокола (квитирование, передача, декодирование полезной нагрузки ...). Я хочу определить что-то похожее на тайм-аут, но в терминах «обработанных байтов» (например, если после обработки n байтов я остался в том же состоянии, убирайтесь отсюда). Проще говоря, я хотел бы переопределить поведение свойства stateTimeout. Любые идеи о том, как идиоматически достичь этого?

1 Ответ

1 голос
/ 29 марта 2012

Если у вас есть определенное состояние X и метод def isDone(x: D): Boolean, который определяет, что «время истекло», вы можете сделать что-то вроде этого:

when(X) (({
  case Event(...) => ...
  ...
}: StateFunction) andThen {
  case State(_, data, _, _, _) if isDone(data) => // return new state
  case x => x
})

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

...