private static void Start() { for (int i = 0; i < VideoSettings.NbEncodeDaemon; i++) { Task daemon = Task.Run(() => { while (true) { FileItem fileItem = null; try { Thread.Sleep(1000); fileItem = null; if (!queueFileItems.TryDequeue(out fileItem)) { continue; } CurrentPositionInQueue++; // si le client a pas demandé le progress depuis plus de 20s, annuler l'opération if ((DateTime.UtcNow - fileItem.FileContainer.LastTimeProgressRequested).TotalSeconds > FrontSettings.MaxGetProgressCanceled) { fileItem.EncodeErrorMessage = "Canceled"; fileItem.EncodeProgress = null; fileItem.IpfsErrorMessage = "Canceled"; fileItem.IpfsProgress = null; LogManager.AddEncodingMessage("SourceFileName " + Path.GetFileName(fileItem.FileContainer.SourceFileItem.FilePath) + " car dernier getProgress a dépassé 20s", "Annulation"); fileItem.CleanFiles(); } else { // encode video if (EncodeManager.Encode(fileItem)) { IpfsDaemon.Queue(fileItem); } } } catch (Exception ex) { LogManager.AddEncodingMessage(ex.ToString(), "Exception non gérée"); fileItem.EncodeErrorMessage = "Exception non gérée"; fileItem.CleanFiles(); } } }); daemons.Add(daemon); } }
private static void Start() { daemon = Task.Run(() => { while (true) { try { Thread.Sleep(1000); FileItem fileItem; if (!queueFileItems.TryDequeue(out fileItem)) { continue; } CurrentPositionInQueue++; // si le client a pas demandé le progress depuis plus de 20s, annuler l'opération if ((DateTime.UtcNow - fileItem.FileContainer.LastTimeProgressRequested).TotalSeconds > FrontSettings.MaxGetProgressCanceled) { fileItem.EncodeErrorMessage = "Canceled"; fileItem.EncodeProgress = null; fileItem.IpfsErrorMessage = "Canceled"; fileItem.IpfsProgress = null; continue; } // encode video if (!EncodeManager.Encode(fileItem)) { continue; } switch (fileItem.TypeFile) { case TypeFile.SpriteVideo: { string[] files = EncodeManager.GetListImageFrom(fileItem.FilePath); // récupération des images string outputPath = Path.ChangeExtension(TempFileManager.GetNewTempFilePath(), ".jpeg"); // nom du fichier sprite bool successSprite = SpriteManager.CombineBitmap(files.Skip(files.Length - VideoSettings.NbSpriteImages).ToArray(), outputPath); // création du sprite TempFileManager.SafeDeleteTempFiles(files); // suppression des images if (successSprite) { fileItem.FilePath = outputPath; // réaffectation chemin sprite LogManager.AddEncodingMessage("FileSize " + fileItem.FileSize, "End Sprite"); IpfsDaemon.Queue(fileItem); } else { TempFileManager.SafeDeleteTempFile(outputPath); } break; } case TypeFile.EncodedVideo: IpfsDaemon.Queue(fileItem); break; default: throw new InvalidOperationException("type non prévu"); } } catch (Exception ex) { LogManager.AddEncodingMessage(ex.ToString(), "Exception non gérée"); } } }); }