コード例 #1
0
        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);
            }
        }
コード例 #2
0
        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");
                    }
                }
            });
        }