Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package tech.ivoice.client.solutions.medtech.helpers;
- import java.util.Arrays;
- import tech.ivoice.platform.extension.sdk.fsm_support.Platform;
- import tech.ivoice.platform.fsm.*;
- import tech.ivoice.platform.sdk.messages.Messages;
- import tech.ivoice.platform.sdk.messages.common.PlaySource;
- import tech.ivoice.platform.sdk.messages.session.Play;
- import java.util.concurrent.ArrayBlockingQueue;
- import tech.ivoice.platform.sdk.messages.common.SequencePlaySource;
- public class SequencePlayer {
- @SuppressWarnings("unchecked")
- private FsmContext<SequencePlayer> context = FsmContext.of(this);
- private Platform platform;
- private ArrayBlockingQueue<PlaySource> sources;
- public SequencePlayer(Platform platform, PlaySource playSource) {
- if (playSource instanceof SequencePlaySource) {
- PlaySource[] sources1 = ((SequencePlaySource) playSource).getSources();
- this.sources = new ArrayBlockingQueue(sources1.length);
- this.sources.addAll(Arrays.asList(sources1));
- } else {
- this.sources = new ArrayBlockingQueue(1);
- this.sources.add(playSource);
- }
- this.platform = platform;
- }
- public State<SequencePlayer> start = context.state("start")
- .onEnter((o, state, states) -> {
- PlaySource poll = sources.poll();
- platform.accept(Messages.justPlay(poll));
- }).onProcess((Object message, DataState<SequencePlayer> currentState, SequencePlayer states) -> {
- if (message instanceof Play.Success) {
- if (!sources.isEmpty()) {
- return states.playNext.withData(message);
- } else {
- return states.finish.withData(message);
- }
- } else if (message instanceof Play.Fail) {
- return states.finish.withData(((Play.Fail) message).getCause());
- } else {
- return currentState;
- }
- })
- .build();
- private State<SequencePlayer> playNext = context.state("playNext")
- .onEnter((Object message, State prevState, SequencePlayer states, Actions actions) -> {
- return actions.redirect(prevState);
- }).build();
- public OutState<SequencePlayer> finish = context.outState("finish");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement