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); } }
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"); } } }); }
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); }
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]; } }
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(); } }); }
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); } }
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"); }