private static long GetTransferSize() { long totalTransferSize = 0; // bytes File = new FileOperations(); int len = FilePaths.Length; FileNames = new string[len]; FileSizeAsBytes = new long[len]; FileSizes = new double[len]; SizeUnits = new FileOperations.SizeUnit[len]; for (int i = 0; i < FilePaths.Length; i++) { File.Init(FilePaths[i], FileOperations.TransferMode.Send); totalTransferSize += File.FileSizeAsBytes; FileNames[i] = File.FileName; //FilePaths[i] = File.FilePath; FileSizeAsBytes[i] = File.FileSizeAsBytes; FileSizes[i] = File.FileSize; SizeUnits[i] = File.FileSizeUnit; File.CloseFile(); } lock (Lck_TransferMetrics) _transferMetrics.TotalDataSizeAsBytes = totalTransferSize; return(totalTransferSize); }
private static void ReceivingCoreFcn() { lock (Lck_TransferMetrics) { _transferMetrics.TotalBytesSent = 0; _transferMetrics.TotalDataSent = 0; _transferMetrics.CountOfFiles = FilePaths.Length; } Stopwatch watch = Stopwatch.StartNew(); IsTransfering = true; FileNames = new string[FilePaths.Length]; for (int i = 0; i < FilePaths.Length; i++) { GetCurrentFileName(); FileNames[i] = CurrentFile.FileName; FilePaths[i] = FileSaveURL + CurrentFile.FileName; SendReadySignal(); File = new FileOperations(); Debug.WriteLine("receiveing for: " + i + " FilePaths.Length: " + FilePaths.Length); File.Init(FileSaveURL + CurrentFile.FileName, FileOperations.TransferMode.Receive); Debug.WriteLine("saveURL:" + FileSaveURL + " name: " + CurrentFile.FileName); lock (Lck_TransferMetrics) { _transferMetrics.CurrentFile = CurrentFile; _transferMetrics.IndexOfCurrentFile = i + 1; } long byteCounter = 0; long totalBytesWritten = 0; int numberOfBytesRead = 0; watch.Restart(); while (IsTransferEnabled) { byte[] receivedData = server.GetData(); if (receivedData == null) { UpdateMetrics(watch, byteCounter); watch.Restart(); break; } if (receivedData[0] == (byte)Functions.TransferMode) { SendAck(Functions.TransferMode); File.FileWriteAtByteIndex(totalBytesWritten, receivedData); numberOfBytesRead = receivedData.Length - 1; totalBytesWritten += numberOfBytesRead; byteCounter += numberOfBytesRead; if (watch.Elapsed.TotalSeconds >= 0.5) { UpdateMetrics(watch, byteCounter); byteCounter = 0; watch.Restart(); } } else if (receivedData[0] == (byte)Functions.EndofFileTransfer) { SendAck(Functions.EndofFileTransfer); UpdateMetrics(watch, byteCounter); watch.Restart(); break; } else if (receivedData[0] == (byte)Functions.AllisSent) { UpdateMetrics(watch, byteCounter); watch.Restart(); server.CloseServer(); server = null; IsTransfering = false; StartServer(); if (File != null) { File.CloseFile(); } OnTransferFinished(); return; } else if (receivedData[0] == (byte)Functions.Aborted) { server.CloseServer(); server = null; IsTransfering = false; StartServer(); if (File != null) { File.CloseFile(); } if (OnTransferAborted != null) { OnTransferAborted(); } return; } else { Debug.WriteLine("ReceivingCoreFcn :function byte was wrong:"); break; } } File.CloseFile(); if (!IsTransferEnabled) { byte[] abortData = PrepareAbortMessage(); server.SendDataToClient(abortData); break; } } if (server != null) { server.GetData(); if (OnTransferFinished != null) { OnTransferFinished(); } server.CloseServer(); server = null; } IsTransfering = false; StartServer(); }
private static void SendingCoreFcn() { lock (Lck_TransferMetrics) { _transferMetrics.CountOfFiles = FilePaths.Length; _transferMetrics.TotalBytesSent = 0; _transferMetrics.TotalDataSent = 0; } Stopwatch watch = Stopwatch.StartNew(); IsTransfering = true; for (int i = 0; i < FilePaths.Length; i++) { SendFileInformation(i); if (!WaitforReceiverToBeReady()) { Debug.WriteLine("receiver sent not ready"); continue; } File = new FileOperations(); File.Init(FilePaths[i], FileOperations.TransferMode.Send); CurrentFile.FilePath = File.FilePath; CurrentFile.FileName = File.FileName; CurrentFile.FileSize = File.FileSize; CurrentFile.FileSizeAsBytes = File.FileSizeAsBytes; CurrentFile.SizeUnit = File.FileSizeUnit; lock (Lck_TransferMetrics) { _transferMetrics.CurrentFile = CurrentFile; _transferMetrics.IndexOfCurrentFile = i + 1; } long byteCounter = 0; long totalBytesRead = 0; int numberOfBytesRead = 0; byte[] buffer; watch.Restart(); while (IsTransferEnabled) { File.FileReadAtByteIndex(totalBytesRead, out numberOfBytesRead, out buffer, chunkSize: BufferSize * 4, functionByte: (byte)Functions.TransferMode); if (numberOfBytesRead == 0) { UpdateMetrics(watch, byteCounter); watch.Restart(); break; } client.SendDataServer(buffer); totalBytesRead += numberOfBytesRead; byteCounter += numberOfBytesRead; if (!CheckAck(Functions.TransferMode)) { client.DisconnectFromServer(); client = null; server.CloseServer(); server = null; StartServer(); if (File != null) { File.CloseFile(); } return; } if (watch.Elapsed.TotalSeconds >= 0.5) { UpdateMetrics(watch, byteCounter); byteCounter = 0; watch.Restart(); } if (totalBytesRead == File.FileSizeAsBytes) { UpdateMetrics(watch, byteCounter); watch.Restart(); break; } } File.CloseFile(); if (!IsTransferEnabled) { byte[] abortData = PrepareAbortMessage(); client.SendDataServer(abortData); break; } byte[] endBytes = new byte[5]; endBytes[0] = (byte)Functions.EndofFileTransfer; client.SendDataServer(endBytes); CheckAck(Functions.EndofFileTransfer); } IsTransfering = false; SendLastFrame(); if (OnTransferFinished != null) { OnTransferFinished(); } client.DisconnectFromServer(); client = null; if (server != null) { ; } server.CloseServer(); server = null; StartServer(); }