Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
444
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.29 KB | None | 0 0
  1. package tech.ivoice.client.solutions.medtech.helpers;
  2.  
  3. import java.util.Arrays;
  4. import tech.ivoice.platform.extension.sdk.fsm_support.Platform;
  5. import tech.ivoice.platform.fsm.*;
  6. import tech.ivoice.platform.sdk.messages.Messages;
  7. import tech.ivoice.platform.sdk.messages.common.PlaySource;
  8. import tech.ivoice.platform.sdk.messages.session.Play;
  9.  
  10. import java.util.concurrent.ArrayBlockingQueue;
  11. import tech.ivoice.platform.sdk.messages.common.SequencePlaySource;
  12.  
  13. public class SequencePlayer {
  14.  
  15.     @SuppressWarnings("unchecked")
  16.     private FsmContext<SequencePlayer> context = FsmContext.of(this);
  17.     private Platform platform;
  18.     private ArrayBlockingQueue<PlaySource> sources;
  19.  
  20.     public SequencePlayer(Platform platform, PlaySource playSource) {
  21.  
  22.         if (playSource instanceof SequencePlaySource) {
  23.             PlaySource[] sources1 = ((SequencePlaySource) playSource).getSources();
  24.             this.sources = new ArrayBlockingQueue(sources1.length);
  25.             this.sources.addAll(Arrays.asList(sources1));
  26.         } else {
  27.             this.sources = new ArrayBlockingQueue(1);
  28.             this.sources.add(playSource);
  29.         }
  30.         this.platform = platform;
  31.     }
  32.  
  33.     public State<SequencePlayer> start = context.state("start")
  34.             .onEnter((o, state, states) -> {
  35.                 PlaySource poll = sources.poll();
  36.                 platform.accept(Messages.justPlay(poll));
  37.             }).onProcess((Object message, DataState<SequencePlayer> currentState, SequencePlayer states) -> {
  38.         if (message instanceof Play.Success) {
  39.             if (!sources.isEmpty()) {
  40.                 return states.playNext.withData(message);
  41.             } else {
  42.                 return states.finish.withData(message);
  43.             }
  44.         } else if (message instanceof Play.Fail) {
  45.             return states.finish.withData(((Play.Fail) message).getCause());
  46.         } else {
  47.             return currentState;
  48.         }
  49.     })
  50.             .build();
  51.  
  52.     private State<SequencePlayer> playNext = context.state("playNext")
  53.             .onEnter((Object message, State prevState, SequencePlayer states, Actions actions) -> {
  54.                 return actions.redirect(prevState);
  55.             }).build();
  56.  
  57.     public OutState<SequencePlayer> finish = context.outState("finish");
  58.  
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement