/// <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"); } }
private void _device_RaiseError(string type, string msg) { OnErrorRaised?.Invoke(type, msg); }