- define your FSM with RuleSet: State(S) x Event(E) -> Actions (A), State(S')
- define your actor extends Actor, using ActorGroup for multi-threading;
- use actorGroup.tell(Event) to submit an async job.
- src/main/java/me/lyso/mampa/demo/ActorDemoV4.java
- src/main/java/me/lyso/mampa/demo/ActorDemoV3.java
- src/main/java/me/lyso/mampa/demo/ActorDemoV2.java
- src/main/java/me/lyso/mampa/demo/ActorDemo.java
- tellAfter/tellTimeout接口返回Timeout
- 支持timeout在状态切换时自动cancel
- 支持一个消息batch个多个actor中的多个fsm-target(如果target不存在则忽略);
- 支持match-all-actor(即一个消息可发给一个ActorGroup中的所有Actor);
- 支持多优先级队列;
- 添加更多perf-counter及异常handle;
- 支持一个mampa中有多种rule-set;
- 优化接口逻辑,将IActor分化为IActorGroup/IActor,tell接口中将target拆分;
- testcases for multi-rule-set;
- 修复AbstractRuleSet.handle中找action的一个bug;
- 最外部的接口改名为IActorGroup,tell参数中的target分化为三个:(K1 actorTarget, IFsmType fsmType, K2 fsmTarget),内部接口IActorGroup只需要两个(IFsmType fsmType, K2 fsmTarget);
- AbstractRuleSet构造函数变更,需要传入FsmType,ActorGroup/Actor构造函数中可传入1个或多个AbstractRuleSet;
- IAction接口抛出exception;
- 使用object-pool优化actor中的fsm使用;
- 增加可以匹配所有fsm的fsmRouter接口
增加了如下两种addRule:
- 某种state对应所有event;
- 某种event对应所有state;
从此,大家可以方便的添加三个级别的rules: level1:指定state+event; level2.1:仅指定state,则能handle这个state对应的所有event; level2.2:仅指定event,则能handle这个event对应所有的state情形; levle3:default-rule:以上rule都找不到时的规则。
每来一个事件,FSM会根据当前state和etype按level从上到下顺序查找合适的rule。耶!
- 一些bugfix及exception-handle;
- Refactor timeout.
- Add init hook, stop state.
- Demo V2 updated.
- 提供FSM、Actor用不同的方式路由的能力;
- 修复Timeout的逻辑;
- 提供销毁FSM的能力;
- ThreadPool放回到Actor内部;
- 取消ShutdownHook;
- State里添加自定义数据,可以根据自定义数据扩展出更丰富的state跳转和action;
- 完善Timeout的流程:timeout-action执行时会判断触发时的state type是否变更;
- 精简参数及流程,对应用层隐藏更多细节;
- 完善所有java-doc;
- 一个新的demo-码农的生活单调版;
- 增加ActorGroup,Thread初始化时创建好,每个Thread负责一个Actor的Disruptor,由IActorRouter负责消息路由到哪个Actor;
- 将Actors类简化、静态化(->ActorGroups);
- 优化向Disruptorpublish时总是new EventTranslator(不构造小对象);
- 优化IAction中传入的Event为不需要构造新对象;
- 较少泛型类型,增加代码的可读性/可维护性;
- Timer;
- 一个有意思的demo;
- Timer有个bug,即timer即不分状态,又只有一个Timeout类型,导致无法区分当前收到的timeout是不是当前状态导致的;
- Actor的mailbox(Disruptor)增加优先级队列(可能需要自定义EventProcessor);
- Reuse FSM in Actor;
- TimeoutAction.handle: 是否可以不new TimerTask?