private String DoCopyFromServer (BackgroundWorker LocalCopyFromServerListBackgroundWorker, String SourceFileName, ref MemoryStream TargetStream, CopyInfoBlock InfoBlock) { if (TargetStream == null) TargetStream = new MemoryStream(); Int64 Position = 0; byte [] ReadBuffer = ReadFileBlockEventCall (SourceFileName, -1, 0, NetworkBlockSize); if (ReadBuffer == null) { InfoBlock.m_Status = "SourceFile \"" + SourceFileName + "\" nicht zugreifbar"; return "SourceFile \"" + SourceFileName + "\" nicht zugreifbar"; } while (ReadBuffer.Length > 0) { Position = ProcessReceivedBlock (TargetStream, ReadBuffer, -1, Position, ReadBuffer.Length); ReadBuffer = ReadFileBlockEventCall (SourceFileName, -1, Position, NetworkBlockSize); } Position = ProcessReceivedBlock (TargetStream, null, -1, Position, 0); TargetStream.Seek (0, SeekOrigin.Begin); InfoBlock.m_Status = "Ok"; return "Ok"; }
private String DoCopyToServer (BackgroundWorker LocalCopyToServerListBackgroundWorker, String SourceFileName, String TargetFileName, CopyInfoBlock CopyInfo) { NetworkBlockSize = CopyInfo.m_TransferBlockSize; if (!Basics.IsThisFileAccessable (SourceFileName)) { CopyInfo.m_Status = "File \"" + SourceFileName + "\" nicht Zugreifbar"; if (LocalCopyToServerListBackgroundWorker != null) LocalCopyToServerListBackgroundWorker.ReportProgress (0, CopyInfo); return "File \"" + SourceFileName + "\" nicht Zugreifbar"; } Int64 FullLength = (new FileInfo (SourceFileName)).Length; Int64 TransferedLength = 0; CopyInfo.m_LengthOfActuallFile = FullLength; CopyInfo.m_Type = ProgressReportType.FILE_STARTED; if ((LocalCopyToServerListBackgroundWorker != null) && (LocalCopyToServerListBackgroundWorker.WorkerReportsProgress == true)) LocalCopyToServerListBackgroundWorker.ReportProgress (0, CopyInfo); if (IsTestRun) { Basics.ReportInformationToEventViewer ("CommonBasics.DoCopyToServer", "Es wurde das Kopieren des Files \r\n\"" + SourceFileName + "\" auf\r\n\"" + TargetFileName + "\" begonnen"); } int LoopCounter = 10; while (TransferedLength < FullLength) { if (!Basics.IsThisFileAccessable (SourceFileName)) { if (LoopCounter-- < 0) { Basics.ReportErrorToEventViewer ("CommonBasics.DoCopyToServer", "Der File \"" + SourceFileName + "\" war nicht zugreibar"); CopyInfo.m_Status = "LockFehler"; return "LockFehler"; } Thread.Sleep (500); continue; } int ActuallBlockLength = (int) (((FullLength - TransferedLength) < NetworkBlockSize) ? (FullLength - TransferedLength) : NetworkBlockSize); byte [] FileBuffer = new byte [ActuallBlockLength]; BinaryReader BinaryFileReader = new BinaryReader (System.IO.File.OpenRead (SourceFileName)); BinaryFileReader.BaseStream.Seek (TransferedLength, System.IO.SeekOrigin.Begin); BinaryFileReader.Read (FileBuffer, 0, ActuallBlockLength); BinaryFileReader.Close (); TransferedLength = SendFileBlockEventCall (TargetFileName, FileBuffer, FullLength, TransferedLength, ActuallBlockLength); if (TransferedLength == 0) { Basics.ReportErrorToEventViewer ("CommonBasics.DoCopyToServer", "Beim Transfer des Files\r\n\"" + SourceFileName + "\"\r\nauf den TargetFile\r\n\"" + TargetFileName + "\"\r\nkam als Transferlänge 0 oder -1 zurück"); return "Transferfehler"; } CopyInfo.m_Type = ProgressReportType.BLOCK_ENDE; CopyInfo.m_LengthInThisFileUpToNow = TransferedLength; if ((LocalCopyToServerListBackgroundWorker != null) && (LocalCopyToServerListBackgroundWorker.WorkerReportsProgress == true)) LocalCopyToServerListBackgroundWorker.ReportProgress (0, CopyInfo); //delete FileBuffer; } Int64 FinalLengthOfTarget = SendFileBlockEventCall (TargetFileName, null, FullLength, TransferedLength, 0); CopyInfo.m_Type = ProgressReportType.FILE_ENDED; CopyInfo.m_OverallLengthUpToNow = CopyInfo.m_OverallLengthUpToNow + FullLength; if (IsTestRun) { Basics.ReportInformationToEventViewer ("CommonBasics.DoCopyToServer", "Es wurde das Kopieren des Files \r\n\"" + SourceFileName + "\" auf\r\n\"" + TargetFileName + "\" beendet"); } CopyInfo.m_ActiveFileIndex++; if (FinalLengthOfTarget != FullLength) { CopyInfo.m_Status = "Längenfehler"; if ((LocalCopyToServerListBackgroundWorker != null) && (LocalCopyToServerListBackgroundWorker.WorkerReportsProgress == true)) LocalCopyToServerListBackgroundWorker.ReportProgress (0, CopyInfo); return "Längenfehler"; } CopyInfo.m_Status = "Ok"; if ((LocalCopyToServerListBackgroundWorker != null) && (LocalCopyToServerListBackgroundWorker.WorkerReportsProgress == true)) LocalCopyToServerListBackgroundWorker.ReportProgress (0, CopyInfo); return "Ok"; }
private String DoCopyFromServer (BackgroundWorker LocalCopyFromServerListBackgroundWorker, String SourceFileName, String TargetFileName, CopyInfoBlock InfoBlock) { Int64 Position = 0; byte[] ReadBuffer = ReadFileBlockEventCall (SourceFileName, -1, 0, NetworkBlockSize); if ((ReadBuffer == null) || (ReadBuffer.Length == 0)) { InfoBlock.m_Status = "SourceFile \"" + SourceFileName + "\" nicht zugreifbar"; return "SourceFile \"" + SourceFileName + "\" nicht zugreifbar"; } while (ReadBuffer.Length > 0) { Position = ProcessReceivedBlock (TargetFileName, ReadBuffer, -1, Position, ReadBuffer.Length); ReadBuffer = ReadFileBlockEventCall (SourceFileName, -1, Position, NetworkBlockSize); } Position = ProcessReceivedBlock (TargetFileName, null, -1, Position, 0); if (!File.Exists (TargetFileName)) { InfoBlock.m_Status = "TargetFile \"" + TargetFileName + "\" nicht zugreifbar"; return "File \"" + TargetFileName + "\" nicht zugreifbar"; } InfoBlock.m_Status = "Ok"; if (InfoBlock.m_SourceLastWriteTime > DateTime.MinValue) { FileInfo FInfo = new FileInfo (TargetFileName); FInfo.LastWriteTime = InfoBlock.m_SourceLastWriteTime; } return "Ok"; }
private void FillSourceLastWriteTime (CopyInfoBlock CopyInfo) { DateTime LastWriteTime = GetLastWriteTimeForServerFile (CopyInfo.m_From); if (LastWriteTime != DateTime.MinValue) CopyInfo.m_SourceLastWriteTime = LastWriteTime; return; // DataSet SourceFileSituation = null; }
public void StartProcessTheCopyToServerQueue () { CommonDataBase.CommonBasics DoFileCopyToServerBasics = new CommonBasics (); String NextCopyOrderToProcess = ProcessCopyQueue (null, null); if (!String.IsNullOrEmpty (NextCopyOrderToProcess)) { DoFileCopyToServerBasics.SendFileBlockEventCall += new SendFileBlockEvent (m_DoFileCopyToServerBasics_SendFileBlockEventCall); DoFileCopyToServerBasics.CopyToServerListFinishedCall += new CopyToServerListFinished (m_DoFileCopyToServerBasics_SendFileListFinishedCall); } else { return; } while (!String.IsNullOrEmpty (NextCopyOrderToProcess)) { XDocument Order = XDocument.Load (NextCopyOrderToProcess); DataCollection<CopyInfoBlock> CopyList = new DataCollection<CopyInfoBlock>(); String From = String.Empty; String To = String.Empty; DateTime SourceLastWriteTime = DateTime.MinValue; foreach (XElement HeadEntry in Order.Document.Nodes ()) { if (HeadEntry.Name != CommonDataBase.CommonBasics.XML_AUTO_COPY_LIST) continue; foreach (XElement Entry in HeadEntry.Nodes ()) { if (Entry.Name != CommonDataBase.CommonBasics.XML_AUTO_FILE) continue; foreach (XElement FileEntry in Entry.Nodes ()) { if (FileEntry.Name == CommonDataBase.CommonBasics.XML_AUTO_FROM) From = FileEntry.Value; if (FileEntry.Name == CommonDataBase.CommonBasics.XML_AUTO_TO) To = FileEntry.Value; if (FileEntry.Name == CommonDataBase.CommonBasics.XML_AUTO_SOURCE_LAST_MODIFIED) SourceLastWriteTime = DateTime.Parse (FileEntry.Value); } } } CopyInfoBlock InfoBlock = new CopyInfoBlock (From, To, SourceLastWriteTime); InfoBlock.m_CleanupInformation = NextCopyOrderToProcess; CopyList.Add (InfoBlock); DoFileCopyToServerBasics.CopyToServer (CopyList, true); if (CopyList [0].m_Status != "Ok") { MessageBox.Show ("!!Der Übertragungsvorgang Zum Server von\r\n\"" + InfoBlock.m_From + "\"\r\nauf \"" + InfoBlock.m_To + "\"\r\nist fehlgeschlagen!!\r\nDer Status war\r\n\"" + CopyList [0].m_Status + "\"\r\nBitte Fehler beheben und ggf. wiederholen"); } else { FileInfo FInfo = new FileInfo (From); FInfo.LastWriteTime = DateTime.Now.AddSeconds (-30); } ProcessCopyQueue (null, NextCopyOrderToProcess); Basics.DoEvents (); NextCopyOrderToProcess = ProcessCopyQueue (null, null); } }
public void SetTransferStatus(CopyInfoBlock InfoBlock) { foreach (DataTransferPresentationData Entry in TransferList) { if (Entry.CopyOrderFileName == InfoBlock.m_CleanupInformation) { Entry.ErrorMessage = InfoBlock.m_Status; if (InfoBlock.m_Status == "Ok") { Entry.Status = true; } else { Entry.ShowOnError = Visibility.Visible; } } } if (CopyToServerListProgressCall != null) CopyToServerListProgressCall(new CopyInfoBlock (ProgressReportType.UNUSED)); }
void m_CacheSynchronizationWorker_DoWork (object sender, DoWorkEventArgs e) { // Wait until UpLoad has been finished m_DownLoadFilesEvent = new ManualResetEvent (false); TableSyncParameter Param = (TableSyncParameter) e.Argument; NameValueCollection TableNames = Param.TablesToProcess; //CommonStatusMessage = "Directories werden überprüft"; BackgroundWorker LocalCacheSynchronizationWorker = sender as BackgroundWorker; CommonDataBase.CommonBasics m_CacheSynchronizationBasics = new CommonBasics (); m_CacheSynchronizationBasics.ReadFileBlockEventCall += new ReadFileBlockEvent (m_CacheSynchronizationBasics_ReadFileBlockEventCall); m_CacheSynchronizationBasics.CopyFromServerListFinishedCall += new CopyFromServerListFinished (m_CacheSynchronizationBasics_ReadFileListFinishedCall); m_CacheSynchronizationBasics.GetRemoteFileDataEventCall += new GetRemoteFileDataEvent (m_CacheSynchronizationBasics_GetRemoteFileDataEventCall); m_CacheSynchronizationBasics.DoSpecialNamingCall += new DoSpecialNamingEvent (m_Basics_DoSpecialNamingCall); m_CacheSynchronizationBasics.CopyFromServerListFinishedCall += new CopyFromServerListFinished (m_CacheSynchronizationBasics_CopyFromServerListFinishedCall); int MatchIndex = 0; foreach (String TableName in TableNames.Keys) { DataCollection<CopyInfoBlock> CopyBlock = new DataCollection<CopyInfoBlock>(); String TargetDirectory = Path.Combine (Path.Combine (CommonDataBase.DataBase.GetLocalWPMediaRoot (), "Source"), TableName); String SourceDirectory = Path.Combine (Path.Combine (CommonDataBase.DataBase.GetRemoteWPMediaRoot (), "Source"), TableName); if (TableNames [TableName] != "Gallerie") { if ((Param.CopyOnlyWhenElementNameMatchOneEntryPerTable != null) && (Param.CopyOnlyWhenElementNameMatchOneEntryPerTable [MatchIndex].Count > 0)) { DataCollection<CopyInfoBlock> HelpCopyBlock = new DataCollection<CopyInfoBlock>(); m_CacheSynchronizationBasics.SynchronizeNetworkDirectory (SourceDirectory, TargetDirectory, new String [] { ".sca", ".xml", ".auto", ".ppt", ".png", ".jpg", ".bmp", ".tiff", ".jpeg", ".db" }, TableName, TableNames [TableName].Replace (FORCE_DOWNLOAD_INDICATOR, ""), HelpCopyBlock, 30); foreach (CopyInfoBlock HelpEntry in HelpCopyBlock) { String Extension = Path.GetExtension (HelpEntry.m_From); String MatchString = String.Empty; if (String.Compare (Extension, ".stb", true) == 0) { MatchString = Path.GetFileNameWithoutExtension (HelpEntry.m_From); } else { MatchString = Path.GetFileName (Path.GetDirectoryName (HelpEntry.m_From)); } if (Param.CopyOnlyWhenElementNameMatchOneEntryPerTable [MatchIndex].Contains (MatchString) == true) { CopyBlock.Add (HelpEntry); } } } else { m_CacheSynchronizationBasics.SynchronizeNetworkDirectory (SourceDirectory, TargetDirectory, new String [] { ".sca", ".xml", ".auto", ".ppt", ".png", ".jpg", ".bmp", ".tiff", ".jpeg", ".db" }, TableName, TableNames [TableName].Replace ( FORCE_DOWNLOAD_INDICATOR, ""), CopyBlock, 30); } } if (CopyBlock.Count > 0) { CopyInfoBlock RunInfoBlock = new CopyInfoBlock (String.Empty, String.Empty, DateTime.MinValue); RunInfoBlock.m_Status = "Für \"" + TableName + "\" sind " + CopyBlock.Count.ToString () + " Updates erforderlich"; LocalCacheSynchronizationWorker.ReportProgress (0, RunInfoBlock); m_CacheSynchronizationBasics.RunCopyFromServerListSynchron (LocalCacheSynchronizationWorker, CopyBlock); foreach (CopyInfoBlock Block in CopyBlock) { if (Block.m_Status != "Ok") { Basics.ReportErrorToEventViewer ("WPMediaDataBase.m_CacheSynchronizationWorker_DoWork", "Der File\r\n\"" + Block.m_To + "\"\r\nkonnte nicht übertragen werden"); } } } CopyInfoBlock InfoBlock = new CopyInfoBlock (String.Empty, String.Empty, DateTime.MinValue); InfoBlock.m_Status = "Processed " + TableName; LocalCacheSynchronizationWorker.ReportProgress (101, InfoBlock); MatchIndex++; } }