Как правильно передать данные в конечный автомат в АККА - PullRequest
0 голосов
/ 10 мая 2018

Я следую этому примеру здесь из doc

Вот часть конечного автомата, с которым я работаю

    startWith(ACCEPTED, new myData());


    when(ACCEPTED, matchEvent(someMesage.class, MyData.class,
        (someMessage, myData) -> goTo(EVALUATING).replying(EVALUATING)));

    onTransition(matchState(ACCEPTED,EVALUATING, () -> {
      // Here I want to update the nextState data and pass it to another actor 
      // But the nextState data is always the unititalized object which is new Mydata() when the FSM initializes


    }));
    whenUnhandled(matchAnyEvent(
        (state, data) -> stay().replying("received unhandled request " + state.toString())));

    initialize();
  }

Как мне правильнопередавать данные между различными состояниями в конечном автомате?

Как должен выглядеть вызов actor.tell для субъекта, отправляющего сообщение этому субъекту FSM

Если я отправляю следующее сообщение

  MyFSM.tell(new someMessage(myData), getSelf());

Это правильно соответствует событию, и актер изменяет состояние на EVALUATING и отправляет обратно сообщение EVALUATING.Но то, что я действительно хочу, это изменить myData на основе этого изменения состояния и при переходе, отправить эти измененные данные другому актеру.

Но когда я отправляю сообщение типа someMessage, я не могуотправьте существующий экземпляр myData, и он всегда неинициализируется как часть инициализации конечного автомата.

Другими словами, я пытаюсь управлять состоянием myData с помощью конечного автомата.

Как мне добиться того, чтобы он максимально использовал фреймворк?

Рабочий пример из приведенной выше информации будет действительно полезен!

1 Ответ

0 голосов
/ 21 мая 2018

Вы можете использовать using для предоставления нового состояния, например:

when(ACCEPTED, matchEvent(someMesage.class, MyData.class,
  (someMessage, oldData) -> {
   MyData newState = new MyData(); // or transform the old into a new one
   return goTo(EVALUATING).using(newState).replying(EVALUATING);
}));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...