Я пытался использовать FSM в Akka для моделирования состояний протокола (рукопожатие, передача, декодирование полезной нагрузки...). Я хочу определить что-то вроде тайм-аута, но с точки зрения «обработанных байтов» (например, если я остаюсь в том же состоянии после обработки n
байтов, уходите отсюда). Проще говоря, я хотел бы переопределить поведение свойства stateTimeout
. Любые идеи о том, как идиоматически достичь этого?
Тайм-аут Akka FSM из-за меры, которая не является временем (в Scala)
comment
Поступают ли байты в виде сообщения актора, чтобы вы могли их подсчитать и принять решение о переключении состояния?
- person Peter Schmitz   schedule 29.03.2012
comment
Нет :-\ Это часть состояния актера, чтобы знать, сколько байтов он использовал до сих пор.
- person Hugo Sereno Ferreira   schedule 29.03.2012
Ответы (1)
Предполагая, что у вас есть определенное состояние 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 принимает полную функцию Function1, что делает его немного более подробным, чем мне бы хотелось. Вижу, что это полезно, буду думать, как упростить.
person
Roland Kuhn
schedule
29.03.2012