2012-03-29 4 views
2

Akka에서 FSM을 사용하여 프로토콜 상태 (핸드 셰이크, 전송, 페이로드 디코딩 ...)를 모델링하려고했습니다. 타임 아웃과 비슷한 것을 정의하고 싶지만 "처리 된 바이트"(예 : n 바이트를 처리 한 후 동일한 상태로 남겨두면 여기에서 빠져 나옵니다). 간단히 말해서, stateTimeout 속성의 동작을 다시 정의하고 싶습니다. 관용적으로 이것을 달성하는 방법에 대한 아이디어가 있습니까?시간이 아닌 측정 값에 대한 Akka FSM "timeout"(스칼라에서)

+0

바이트가 액터 메시지로 들어 오므로 이들을 셀 수 있으며 상태를 전환 할 것인지 결정할 수 있습니까? –

+0

No : - \ 현재까지 소비 한 바이트 수를 알 수있는 액터의 상태입니다. –

답변

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

당신은 항상 두 부분을 방법으로 나눌 수 있습니다 ... –

관련 문제