public override SpeechletResponse OnAudioIntent(AudioPlayerRequest audioRequest, Session session, Context context)
        {
            // This Sample has no Audio-Intent#

            switch (audioRequest.Type)
            {
            case RequestTypeEnum.AudioPlayer_PlaybackFailed:
                var request = audioRequest as AudioPlayerRequest_PlaybackFailed;
                log.Error(request.Error.Message);
                break;

            case RequestTypeEnum.AudioPlayer_PlaybackFinished:
            case RequestTypeEnum.AudioPlayer_PlaybackNearlyFinished:
            case RequestTypeEnum.AudioPlayer_PlaybackStarted:
            case RequestTypeEnum.AudioPlayer_PlaybackStopped:
            case RequestTypeEnum.PlaybackController_NextCommandIssued:
            case RequestTypeEnum.PlaybackController_PauseCommandIssued:
            case RequestTypeEnum.PlaybackController_PlayCommandIssued:
            case RequestTypeEnum.PlaybackController_PreviousCommandIssued:
            default:
                break;
            }

            return(null);
        }
        // handle the enqueuing of the next track in a multi-track album, which can occur after Alexa informs your
        // service (this service) that the current track has begun.

        public override async Task <SpeechletResponse> OnAudioPlayerAsync(AudioPlayerRequest audioPlayerRequest,
                                                                          Context context)
        {
            var httpClient = new HttpClient();

            return(await Groove.Music.EnqueueGrooveMusic(context, httpClient, "ENQUEUE"));
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static SpeechletRequestEnvelope FromJson(JObject json)
        {
            if (json["version"] != null && json.Value <string>("version") != Sdk.VERSION)
            {
                throw new SpeechletException("Request must conform to 1.0 schema.");
            }

            SpeechletRequest request;
            JObject          requestJson = json.Value <JObject>("request");
            string           requestType = requestJson.Value <string>("type");
            string           requestId   = requestJson.Value <string>("requestId");
            DateTime         timestamp   = requestJson.Value <DateTime>("timestamp");
            string           token       = requestJson.Value <string>("token");
            long             offset      = requestJson.Value <long>("offsetInMilliseconds");
            string           type        = requestJson.Value <string>("type");

            switch (requestType)
            {
            case "LaunchRequest":
                request = new LaunchRequest(requestId, timestamp);
                break;

            case "IntentRequest":
                request = new IntentRequest(requestId, timestamp,
                                            Intent.FromJson(requestJson.Value <JObject>("intent")));
                break;

            case "SessionStartedRequest":
                request = new SessionStartedRequest(requestId, timestamp);
                break;

            case "SessionEndedRequest":
                SessionEndedRequest.ReasonEnum reason;
                Enum.TryParse <SessionEndedRequest.ReasonEnum>(requestJson.Value <string>("reason"), out reason);
                request = new SessionEndedRequest(requestId, timestamp, reason);
                break;

            default:
                if (requestType.StartsWith("PlaybackController") || requestType.StartsWith("AudioPlayer"))
                {
                    request = new AudioPlayerRequest(requestId, timestamp, token, offset, type);
                }
                else if (requestType == "System.ExceptionEncountered")
                {
                    request = null;
                }
                else
                {
                    throw new ArgumentException("json");
                }
                break;
            }

            return(new SpeechletRequestEnvelope {
                Request = request,
                Session = Session.FromJson(json.Value <JObject>("session")),
                Version = json.Value <string>("version"),
                Context = Context.FromJson(json.Value <JObject>("context"))
            });
        }
Exemplo n.º 4
0
 public abstract AudioPlayerResponse OnAudioPlayer(AudioPlayerRequest audioRequest, Context context);
Exemplo n.º 5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static SpeechletRequestEnvelope FromJson(JObject json)
        {
            if (json["version"] != null && json.Value <string>("version") != Sdk.VERSION)
            {
                throw new SpeechletException("Request must conform to 1.0 schema.");
            }

            SpeechletRequest request;
            JObject          requestJson = json.Value <JObject>("request");
            string           requestType = requestJson.Value <string>("type");
            string           requestId   = requestJson.Value <string>("requestId");
            DateTime         timestamp   = requestJson.Value <DateTime>("timestamp");

            switch (requestType)
            {
            case "LaunchRequest":
                request = new LaunchRequest(requestId, timestamp);
                break;

            case "IntentRequest":
                string intentName = "";
                intentName = requestJson.Value <JObject>("intent").Value <string>("name");
                if (intentName == "AMAZON.NextIntent")
                {
                    request = new AudioIntentRequest(requestId, timestamp,
                                                     Intent.FromJson(requestJson.Value <JObject>("intent")));
                    return(new SpeechletRequestEnvelope
                    {
                        Request = request,
                        Version = json.Value <string>("version"),
                        Context = Context.FromJson(json.Value <JObject>("context"))
                    });
                }
                request = new IntentRequest(requestId, timestamp,
                                            Intent.FromJson(requestJson.Value <JObject>("intent")));
                break;

            case "SessionStartedRequest":
                request = new SessionStartedRequest(requestId, timestamp);
                break;

            case "SessionEndedRequest":
                SessionEndedRequest.ReasonEnum reason;
                Enum.TryParse <SessionEndedRequest.ReasonEnum>(requestJson.Value <string>("reason"), out reason);
                request = new SessionEndedRequest(requestId, timestamp, reason);
                break;

            case "AudioPlayer.PlaybackNearlyFinished":
                request = new AudioPlayerRequest(requestId, timestamp);
                break;

            default:
                System.Diagnostics.Debug.WriteLine("Unhandled requestType" + requestType);
                throw new ArgumentException("json");
            }

            if (requestType == "AudioPlayer.PlaybackNearlyFinished")
            {
                return(new SpeechletRequestEnvelope
                {
                    Request = request,
                    Version = json.Value <string>("version"),
                    Context = Context.FromJson(json.Value <JObject>("context"))
                });
            }

            return(new SpeechletRequestEnvelope {
                Request = request,
                Session = Session.FromJson(json.Value <JObject>("session")),
                Version = json.Value <string>("version")
            });
        }
 public abstract SpeechletResponse OnAudioIntent(AudioPlayerRequest audioRequest, Session session, Context context);
Exemplo n.º 7
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="json"></param>
        /// <returns></returns>
        public static SpeechletRequestEnvelope FromJson(JObject json)
        {
            if (json["version"] != null && json["version"].Value <string>() != Sdk.VERSION)
            {
                throw new SpeechletException("Request must conform to 1.0 schema.");
            }

            SpeechletRequest request;
            var requestJson      = json.Value <JObject>("request");
            var requestTypeParts = requestJson?.Value <string>("type")?.Split('.');

            if (requestTypeParts == null)
            {
                throw new ArgumentException("json");
            }

            var requestType    = requestTypeParts[0];
            var requestSubType = requestTypeParts.Length > 1 ? requestTypeParts[1] : null;

            var requestId = requestJson?.Value <string>("requestId");
            var timestamp = DateTimeHelpers.FromAlexaTimestamp(requestJson);
            var locale    = requestJson?.Value <string>("locale");

            switch (requestType)
            {
            case "LaunchRequest":
                request = new LaunchRequest(requestId, timestamp, locale);
                break;

            case "IntentRequest":
                IntentRequest.DialogStateEnum dialogState = IntentRequest.DialogStateEnum.NONE;
                Enum.TryParse(requestJson.Value <string>("dialogState"), out dialogState);
                var intent = Intent.FromJson(requestJson.Value <JObject>("intent"));
                request = new IntentRequest(requestId, timestamp, locale, intent, dialogState);
                break;

            case "SessionStartedRequest":
                request = new SessionStartedRequest(requestId, timestamp, locale);
                break;

            case "SessionEndedRequest":
                SessionEndedRequest.ReasonEnum reason = SessionEndedRequest.ReasonEnum.NONE;
                Enum.TryParse(requestJson.Value <string>("reason"), out reason);
                request = new SessionEndedRequest(requestId, timestamp, locale, reason);
                break;

            case "AudioPlayer":
                var token                = requestJson?.Value <string>("token");
                var offset               = requestJson?.Value <long>("offsetInMilliseconds") ?? 0;
                var playbackError        = Error.FromJson(requestJson?.Value <JObject>("error"));
                var currentPlaybackState = PlaybackState.FromJson(requestJson?.Value <JObject>("currentPlaybackState"));
                switch (requestSubType)
                {
                case "PlaybackFailed":
                    request = new AudioPlayerPlaybackFailedRequest(requestId, timestamp, locale, requestSubType, token, playbackError, currentPlaybackState);
                    break;

                default:
                    request = new AudioPlayerRequest(requestId, timestamp, locale, requestSubType, token, offset);
                    break;
                }
                break;

            case "PlaybackController":
                request = new PlaybackControllerRequest(requestId, timestamp, locale, requestSubType);
                break;

            case "Display":
                var listItemToken = requestJson?.Value <string>("token");
                request = new DisplayRequest(requestId, timestamp, locale, requestSubType, listItemToken);
                break;

            case "System":
                switch (requestSubType)
                {
                case "ExceptionEncountered":
                    var error = Error.FromJson(requestJson?.Value <JObject>("error"));
                    var cause = Cause.FromJson(requestJson?.Value <JObject>("cause"));
                    request = new SystemExceptionEncounteredRequest(requestId, timestamp, locale, requestSubType, error, cause);
                    break;

                default:
                    throw new ArgumentException("json");
                }
                break;

            default:
                throw new ArgumentException("json");
            }

            return(new SpeechletRequestEnvelope {
                Request = request,
                Session = Session.FromJson(json.Value <JObject>("session")),
                Version = json.Value <string>("version"),
                Context = Context.FromJson(json.Value <JObject>("context"))
            });
        }
Exemplo n.º 8
0
 public Task <AudioPlayerResponse> OnAudioPlayerAsync(AudioPlayerRequest audioRequest, Context context)
 {
     throw new NotImplementedException();
 }
 public override SpeechletResponse OnAudioIntent(AudioPlayerRequest audioRequest, Context context)
 {
     throw new NotImplementedException();
 }
        private static SpeechletRequest RequestFromJson(JObject json)
        {
            SpeechletRequest request;
            var requestTypeParts = json?.Value <string>("type")?.Split('.');

            if (requestTypeParts == null)
            {
                throw new ArgumentException("json");
            }

            var requestType    = requestTypeParts[0];
            var requestSubType = requestTypeParts.Length > 1 ? requestTypeParts[1] : null;

            var requestId = json.Value <string>("requestId");
            var timestamp = DateTimeHelpers.FromAlexaTimestamp(json);
            var locale    = json.Value <string>("locale");

            switch (requestType)
            {
            case "LaunchRequest":
                request = new LaunchRequest(requestId, timestamp, locale);
                break;

            case "IntentRequest":
                IntentRequest.DialogStateEnum dialogState = IntentRequest.DialogStateEnum.NONE;
                Enum.TryParse(json.Value <string>("dialogState"), out dialogState);
                var intent = Intent.FromJson(json.Value <JObject>("intent"));
                request = new IntentRequest(requestId, timestamp, locale, intent, dialogState);
                break;

            case "SessionStartedRequest":
                request = new SessionStartedRequest(requestId, timestamp, locale);
                break;

            case "SessionEndedRequest":
                SessionEndedRequest.ReasonEnum reason = SessionEndedRequest.ReasonEnum.NONE;
                Enum.TryParse(json.Value <string>("reason"), out reason);
                var sessionError = Error.FromJson(json.Value <JObject>("error"));
                request = new SessionEndedRequest(requestId, timestamp, locale, reason, sessionError);
                break;

            case "AudioPlayer":
                var token                = json.Value <string>("token");
                var offset               = json.Value <long?>("offsetInMilliseconds");
                var playbackError        = Error.FromJson(json.Value <JObject>("error"));
                var currentPlaybackState = PlaybackState.FromJson(json.Value <JObject>("currentPlaybackState"));
                switch (requestSubType)
                {
                case "PlaybackFailed":
                    request = new AudioPlayerPlaybackFailedRequest(requestId, timestamp, locale, requestSubType, token, playbackError, currentPlaybackState);
                    break;

                default:
                    request = new AudioPlayerRequest(requestId, timestamp, locale, requestSubType, token, offset);
                    break;
                }
                break;

            case "PlaybackController":
                request = new PlaybackControllerRequest(requestId, timestamp, locale, requestSubType);
                break;

            case "Display":
                var listItemToken = json.Value <string>("token");
                request = new DisplayRequest(requestId, timestamp, locale, requestSubType, listItemToken);
                break;

            case "System":
                switch (requestSubType)
                {
                case "ExceptionEncountered":
                    var systemError = Error.FromJson(json.Value <JObject>("error"));
                    var cause       = Cause.FromJson(json.Value <JObject>("cause"));
                    request = new SystemExceptionEncounteredRequest(requestId, timestamp, locale, requestSubType, systemError, cause);
                    break;

                default:
                    throw new ArgumentException("json");
                }
                break;

            default:
                throw new ArgumentException("json");
            }

            return(request);
        }
        public async Task HandleRequest()
        {
            await RequestProcessHelper.ProcessRequest("AudioPlayerRequestHandler.HandleRequest()", "Audio Player Request", async() =>
            {
                AudioPlayerRequest request = Core.Request.GetRequest().Request as AudioPlayerRequest;

                List <MediaItem> mediaItems = MediaItems.GetMediaItems();
                MediaItem currentMediaItem  = mediaItems.Find(m => m.Title.Contains(request.Token));

                switch (Core.Request.GetSubRequestType())
                {
                // handle playback started
                case AlexaRequestType.PlaybackStarted:
                    Core.Response.ClearAudioPlayer();
                    break;

                // handle playback stopped
                case AlexaRequestType.PlaybackStopped:
                    Core.State.UserState.Token         = request.Token;
                    Core.State.UserState.EnqueuedToken = request.EnqueuedToken;
                    Core.State.UserState.OffsetInMS    = Convert.ToInt32(request.OffsetInMilliseconds);
                    break;

                // handle playback nearly finished
                case AlexaRequestType.PlaybackNearlyFinished:
                    if (!request.HasEnqueuedItem)
                    {
                        var currentPlay = request.Token;
                        int index       = mediaItems.IndexOf(mediaItems.Where(m => m.Title == request.Token).FirstOrDefault());

                        if (index == -1)
                        {
                            index++;
                        }

                        if (index == MediaItems.GetMediaItems().Count)
                        {
                            index = 0;
                        }

                        index = index == 0 ? 0 : index + 1;

                        Core.State.UserState.Token         = request.Token;
                        Core.State.UserState.EnqueuedToken = mediaItems[index].Title;
                        Core.Response.AddAudioPlayer(PlayBehavior.Enqueue, mediaItems[index].AudioSource, Core.State.UserState.EnqueuedToken, Core.State.UserState.Token, 0);
                    }
                    break;

                // handle playback finished
                case AlexaRequestType.PlaybackFinished:
                    if (Core.State.UserState.EnqueuedToken != null)
                    {
                        int index = mediaItems.IndexOf(mediaItems.Where(m => m.Title == Core.State.UserState.EnqueuedToken).FirstOrDefault());
                        Core.State.UserState.Index = index;
                        Core.State.UserState.Token = mediaItems[index].Title;
                        Core.Response.AddAudioPlayer(PlayBehavior.ReplaceAll, mediaItems[index].AudioSource, Core.State.UserState.Token);
                    }
                    else
                    {
                        Core.Response.ClearAudioPlayer();
                    }
                    break;

                // handle playback failed
                case AlexaRequestType.PlaybackFailed:
                    Core.State.UserState.Index = 0;
                    Core.State.UserState.Stage = Stage.Menu;
                    Core.State.UserState.Token = mediaItems.FirstOrDefault().Title;
                    Core.Response.AddAudioPlayer(PlayBehavior.ReplaceAll, mediaItems.FirstOrDefault().AudioSource, Core.State.UserState.Token);
                    break;

                // handle unknown request
                default:
                    break;
                }
            });
        }