簡體   English   中英

akka fsm matchEvent實現

[英]akka fsm matchEvent implemantation

我試圖了解AKKA fsm“ matchEvent”:

public final <ET> FSMStateFunctionBuilder<S, D> matchEvent(Class<ET> eventType, TypedPredicate2<ET, D> predicate, Apply2<ET, D, State<S, D>> apply) {
        return (new FSMStateFunctionBuilder()).event(eventType, predicate, apply);
    }

http://doc.akka.io/japi/akka/2.3.4/index.html?akka/actor/AbstractFSM.html中查找之后,我發現了以下內容:

public <P> FSMStateFunctionBuilder<S,D> event(java.lang.Class<P> eventType,
                                              FI.TypedPredicate2<P,D> predicate,
                                              FI.Apply2<P,D,FSM.State<S,D>> apply)

如果事件類型和謂詞匹配,則添加匹配的case語句。 參數:eventType-要在謂詞上匹配的事件類型-要在數據上評估的謂詞,並且事件套用-如果存在匹配項,則應用於事件和狀態數據的操作返回:添加了case語句的構建器

有人可以告訴我如何進行事件匹配嗎?

從docs 簡單示例中提取:

...
public class Buncher extends AbstractFSM<State, Data> {
{
  startWith(Idle, Uninitialized);

  when(Idle,
    matchEvent(SetTarget.class, Uninitialized.class,
      (setTarget, uninitialized) ->
        stay().using(new Todo(setTarget.getRef(), new LinkedList<>()))));

  // transition elided ...

  when(Active, Duration.create(1, "second"),
    matchEvent(Arrays.asList(Flush.class, StateTimeout()), Todo.class,
      (event, todo) -> goTo(Idle).using(todo.copy(new LinkedList<>()))));

  // unhandled elided ...

  initialize();
  }
}

如果您想根據傳入的事件字段或數據(或組合)來表示保護條件,請使用...:

when(Active, Duration.create(1, "second"),
    matchEvent(Arrays.asList(Flush.class, StateTimeout()), Todo.class,
      (event, todo) -> todo.getQueue != null //any logical condition using event or data, 

      (event, todo) -> goTo(Idle).using(todo.copy(new LinkedList<>()))));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM