2012-03-29 28 views
2

我試圖在Akka中使用FSM來模擬協議的狀態(握手,傳輸,有效負載解碼等)。我想定義類似於超時的東西,但是以「已處理字節」的形式定義(例如,如果在處理完n字節後我仍處於相同狀態,請離開此處)。簡單地說,我想重新定義stateTimeout屬性的行爲。任何想法如何地道地實現這一點?Akka FSM通過非時間測量的「超時」(斯卡拉)

+0

字節是否作爲actor消息進來,所以你可以數它們並決定切換狀態? – 2012-03-29 14:09:20

+0

否: - \它是演員狀態的一部分,知道到目前爲止消耗了多少字節。 – 2012-03-29 14:12:40

回答

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需要一個完整的功能1 ,這比我想要的更加冗長。我發現這很有用,會考慮如何使它更容易。

+0

你總是可以將兩部分分成幾個方法... – 2012-03-29 23:48:10