コード例 #1
0
        private static void ErrorDataReceived(object sender, DataReceivedEventArgs e)
        {
            string output = e.Data;

            if (string.IsNullOrWhiteSpace(output))
            {
                return;
            }

            // Récupérer la progression toutes les 1s
            if (currentFileItem.IpfsProcess.LastTimeProgressChanged.HasValue && (DateTime.UtcNow - currentFileItem.IpfsProcess.LastTimeProgressChanged.Value).TotalMilliseconds < 1000)
            {
                return;
            }

            LogManager.AddIpfsMessage(LogLevel.Debug, Path.GetFileName(currentFileItem.OutputFilePath) + " : " + output, "DEBUG");

            // Récupérer la progression d'envoi, ex : 98.45%
            int startIndex = output.IndexOf('%') - 6;

            if (startIndex >= 0 && output.Length >= startIndex + 7)
            {
                string newProgress = output.Substring(startIndex, 7).Trim();
                currentFileItem.IpfsProcess.SetProgress(newProgress);
            }
        }
コード例 #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 moins de 20s, lancer l'ipfs add
                        if ((DateTime.UtcNow - fileItem.FileContainer.LastTimeProgressRequested).TotalSeconds <= FrontSettings.MaxGetProgressCanceled)
                        {
                            // Ipfs add file
                            IpfsAddManager.Add(fileItem);
                        }
                        else
                        {
                            fileItem.IpfsErrorMessage = "Canceled";
                            fileItem.IpfsProgress     = null;
                        }

                        // Si tout est terminé, supprimer le fichier source
                        if (!fileItem.FileContainer.WorkInProgress())
                        {
                            TempFileManager.SafeDeleteTempFile(fileItem.FileContainer.SourceFileItem.FilePath);
                        }

                        if (!fileItem.IsSource)
                        {
                            // Supprimer le fichier attaché
                            TempFileManager.SafeDeleteTempFile(fileItem.FilePath);
                        }
                    }
                    catch (Exception ex)
                    {
                        LogManager.AddIpfsMessage(ex.ToString(), "Exception non gérée");
                    }
                }
            });
        }
コード例 #3
0
        protected override void ProcessItem(FileItem fileItem)
        {
            // Si le client a pas demandé le progress depuis moins de 20s, annuler l'opération
            if (!fileItem.IpfsProcess.CanProcess())
            {
                string message = "FileName " + Path.GetFileName(fileItem.OutputFilePath) + " car le client est déconnecté";
                LogManager.AddIpfsMessage(message, "Annulation");
                fileItem.IpfsProcess.CancelStarted("Le client est déconnecté.");
                return;
            }

            // Ipfs add file
            IpfsAddManager.Add(fileItem);
        }
コード例 #4
0
        private static void OutputDataReceived(object sender, DataReceivedEventArgs e)
        {
            string output = e.Data;

            if (string.IsNullOrWhiteSpace(output))
            {
                return;
            }

            LogManager.AddIpfsMessage(LogLevel.Debug, Path.GetFileName(currentFileItem.OutputFilePath) + " : " + output, "DEBUG");

            if (output.StartsWith("added "))
            {
                currentFileItem.IpfsHash = output.Split(' ')[1];
            }
        }
コード例 #5
0
        private static void Start()
        {
            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 moins de 20s, annuler l'opération
                        if ((DateTime.UtcNow - fileItem.FileContainer.LastTimeProgressRequested).TotalSeconds > FrontSettings.MaxGetProgressCanceled)
                        {
                            fileItem.IpfsErrorMessage = "Canceled";
                            fileItem.IpfsProgress     = null;
                            LogManager.AddIpfsMessage("FileName " + Path.GetFileName(fileItem.FilePath) + " car dernier getProgress a dépassé 20s", "Annulation");
                        }
                        else
                        {
                            // Ipfs add file
                            IpfsAddManager.Add(fileItem);
                        }
                    }
                    catch (Exception ex)
                    {
                        LogManager.AddIpfsMessage(ex.ToString(), "Exception non gérée");
                        fileItem.IpfsErrorMessage = "Exception non gérée";
                    }

                    fileItem.CleanFiles();
                }
            });
        }
コード例 #6
0
        public static void Add(FileItem fileItem)
        {
            try
            {
                currentFileItem = fileItem;

                LogManager.AddIpfsMessage(LogLevel.Information, "FileName " + Path.GetFileName(currentFileItem.OutputFilePath), "Start");

                currentFileItem.IpfsHash = null;
                currentFileItem.IpfsProcess.StartProcessDateTime();

                // Send to ipfs and return hash from ipfs
                var processStartInfo = new ProcessStartInfo();
                processStartInfo.FileName  = "ipfs";
                processStartInfo.Arguments = $"add {Path.GetFileName(currentFileItem.OutputFilePath)}";

                if (IpfsSettings.Instance.VideoAndSpriteTrickleDag)
                {
                    if (currentFileItem.TypeFile == TypeFile.SourceVideo ||
                        currentFileItem.TypeFile == TypeFile.EncodedVideo ||
                        currentFileItem.TypeFile == TypeFile.SpriteVideo)
                    {
                        processStartInfo.Arguments = $"add -t {Path.GetFileName(currentFileItem.OutputFilePath)}";
                    }
                }

                processStartInfo.RedirectStandardOutput = true;
                processStartInfo.RedirectStandardError  = true;
                processStartInfo.WorkingDirectory       = TempFileManager.GetTempDirectory();

                processStartInfo.UseShellExecute = false;
                processStartInfo.ErrorDialog     = false;
                processStartInfo.CreateNoWindow  = true;
                processStartInfo.WindowStyle     = ProcessWindowStyle.Hidden;

                LogManager.AddIpfsMessage(LogLevel.Information, processStartInfo.FileName + " " + processStartInfo.Arguments, "Launch command");
                using (Process process = Process.Start(processStartInfo))
                {
                    process.OutputDataReceived += new DataReceivedEventHandler(OutputDataReceived);
                    process.ErrorDataReceived  += new DataReceivedEventHandler(ErrorDataReceived);

                    process.BeginOutputReadLine();
                    process.BeginErrorReadLine();

                    bool success = process.WaitForExit(IpfsSettings.Instance.IpfsTimeout * 1000);
                    if (!success)
                    {
                        throw new InvalidOperationException("Timeout : Le fichier n'a pas pu être envoyé à ipfs dans le temps imparti.");
                    }

                    if (process.ExitCode != 0)
                    {
                        throw new InvalidOperationException($"Le fichier n'a pas pu être envoyé à ipfs, erreur {process.ExitCode}.");
                    }
                }

                currentFileItem.IpfsProcess.EndProcessDateTime();
                LogManager.AddIpfsMessage(LogLevel.Information, "Hash " + currentFileItem.IpfsHash + " / FileSize " + currentFileItem.FileSize, "End");
            }
            catch (Exception ex)
            {
                string message = "FileSize " + currentFileItem.FileSize + " / Progress " + currentFileItem.IpfsProcess.Progress;
                currentFileItem.IpfsProcess.SetErrorMessage("Exception non gérée", message, ex);
            }
        }
コード例 #7
0
 protected override void LogException(FileItem fileItem, Exception ex)
 {
     LogManager.AddIpfsMessage(ex.ToString(), "Exception non gérée");
     fileItem.IpfsProcess.SetErrorMessage("Exception non gérée");
 }