Akka:FSM - 重用具有不同子类型消息的actor

时间:2015-07-31 02:02:36

标签: scala akka actor fsm

假设我有以下消息:

trait Msg { def c: Int }
case class MsgType1(c: Int) extends Msg
case class MsgType2(c: Int) extends Msg

现在,我想为不同类型的 Msg 重用相同的FSM actor,如下所示。在这种情况下,我们使用泛型类型 Msg 作为消息类型。当我实例化这个演员时,我想以某种方式指出我希望接收哪种类型的消息

class ActorFSM1() extends FSM[s, Data] {
  when(SomeState) {
    case Event(msg: Msg, data: Data) =>

而不是如下复制代码:

class ActorFSM1() extends FSM[s, Data] {
  when(SomeState) {
    case Event(MsgType1(c), data: Data) =>

class ActorFSM2() extends FSM[s, Data] {
  when(SomeState) {
    case Event(MsgType2(c), data: Data) =>

这可能吗? 注意:我不希望在同一个actor中有不同的case语句。他们应该是不同的演员,碰巧接收不同的Msg子类型。其余逻辑在不同实例之间是相同的。

1 个答案:

答案 0 :(得分:1)

class ActorFSM1[T<:Msg] extends FSM[s, Data] {
    when(SomeState) {
        case Event(msg: T, data: Data) =>