/// <summary>
        ///     Solicita al servidor la cancion con el id cancion en la calidad indicada
        /// </summary>
        /// <param name="idGetSong">El id de la cancion a solicitar al servidor</param>
        /// <param name="calidad">La calidad de la cancion a solicitar</param>
        /// <param name="isPersonalGetSong">Indica si la cancion es personal o normal</param>
        public async void GetSong(int idGetSong, Calidad calidad, bool isPersonalGetSong)
        {
            _getSong = true;
            var          channel      = new Channel(Configuration.URIGrpcServer, ChannelCredentials.Insecure);
            var          client       = new Canciones.CancionesClient(channel);
            var          request      = new SolicitudObtenerCancion();
            var          memoryStream = new MemoryStream();
            var          position     = 0;
            FormatoAudio formatAudio;
            var          error = Error.Ninguno;

            for (var i = 1; i <= CounTrys; i++)
            {
                try
                {
                    request.IdCancion = idGetSong;
                    request.CalidadCancionARecuperar = calidad;
                    request.TokenAutenticacion       = ApiServiceLogin.GetServiceLogin().GetAccessToken();
                    var call = isPersonalGetSong
                        ? client.ObtenerCancionPersonal(request)
                        : client.ObtenerCancion(request);
                    using (call)
                    {
                        while (await call.ResponseStream.MoveNext() && _getSong)
                        {
                            var response = call.ResponseStream.Current;
                            memoryStream.Write(response.Data.ToByteArray(), 0, response.Data.Length);
                            position   += response.Data.Length;
                            formatAudio = response.FormatoCancion;
                            error       = response.Error;
                            if (position == ChunkSize)
                            {
                                OnInitialRecivedSong?.Invoke(response.Data.ToByteArray(),
                                                             ConvertFormatAudioToExtension(formatAudio));
                            }
                            else if (position > ChunkSize)
                            {
                                OnSongChunkRived?.Invoke(response.Data.ToByteArray());
                            }
                            if (!_getSong)
                            {
                                memoryStream.Dispose();
                            }
                        }
                    }
                }
                catch (RpcException)
                {
                    OnErrorRaised?.Invoke("No se pudo recuperar la canción, porfavor verifique su conexion a internet");
                    break;
                }

                if (error != Error.Ninguno)
                {
                    if (error == Error.TokenFaltante || error == Error.TokenInvalido)
                    {
                        await ApiServiceLogin.GetServiceLogin().ReLogin();
                    }
                    else
                    {
                        OnErrorRaised?.Invoke(ManageGetSongError(error));
                        break;
                    }
                }
                else
                {
                    OnTerminatedRecivedSong?.Invoke();
                    memoryStream.Dispose();
                    break;
                }
            }

            if (error == Error.TokenFaltante || error == Error.TokenInvalido)
            {
                OnErrorRaised?.Invoke("AuntenticacionFallida");
            }
        }
Exemple #2
0
 private void _device_RaiseError(string type, string msg)
 {
     OnErrorRaised?.Invoke(type, msg);
 }