public FileMD5Stats(IFileStats stats, MD5Checksum checksum) { if (stats == null) { throw new ArgumentNullException("stats"); } _fileStats = (stats is FileStats) ? (FileStats)stats : new FileStats(stats.Length, stats.LengthLastVerifedUTC); _checksum = checksum; }
public FileCompareStatsVerifiedMD5(IFileStats stats, byte[] checksum, Guid groupID, DateTime lastCompared) { _md5 = new FileMD5Stats(stats, checksum); _lastCompared = FileStats.NormalizeDateTime(lastCompared); if (_md5.LastCalculatedUTC.Equals(_lastCompared)) { throw new InvalidOperationException("Last verified date must be different from last calculated date"); } _groupID = groupID; }
public FileMD5Stats(IFileStats stats, byte[] checksum) { if (stats == null) { throw new ArgumentNullException("status"); } if (checksum == null) { throw new ArgumentNullException("checksum"); } if (checksum.Length == 0) { throw new ArgumentException("Checksum cannot have zero bytes", "checksum"); } _fileStats = (stats is FileStats) ? (FileStats)stats : new FileStats(stats.Length, stats.LengthLastVerifedUTC); try { _checksum = new MD5Checksum(checksum); } catch (Exception e) { throw new ArgumentException(e.Message, "checksum", e); } }
public bool Equals(IFileStats other) => other != null && other is FileCompareStatsVerifiedMD5 && Equals((FileCompareStatsVerifiedMD5)other);
public bool Equals(IFileStats other) => other != null && other is FileCompareStatusReverified && Equals((FileCompareStatusReverified)other);
internal IFileStats AnalyzeFile(IFileStats fileStats) { if (IO.ReadAllLines(fileStats.FilePath, out string[] content))
public bool Equals(IFileStats other) => other != null && other is FileMD5Stats && Equals((FileMD5Stats)other);
private async Task <bool> BeginSending(string key, uint slicesCount, string fileName, IFileStats properties, string directory, bool isQueue) { Dictionary <string, object> vs = new Dictionary <string, object> { { "Receiver", "FileReceiver" }, { "DownloadKey", key }, { "SlicesCount", (int)slicesCount }, { "FileName", fileName }, { "DateModified", properties.LastWriteTime.ToUnixTimeMilliseconds() }, { "DateCreated", properties.CreationTime.ToUnixTimeMilliseconds() }, { "FileSize", properties.Length }, { "Directory", directory }, { "ServerIP", ipFinderResult.MyIP } }; if (!isQueue) { vs.Add("Guid", Guid.NewGuid().ToString()); vs.Add("SenderName", deviceName); } else { vs.Add("IsQueueItem", "true"); } var result = await packageManager.Send(vs); if (result.Status == RomeAppServiceResponseStatus.Success) { return(true); } else { System.Diagnostics.Debug.WriteLine("BeginSending: Send failed (" + result.Status.ToString() + ")"); return(false); } }
private string GetQueueFileInfo(string key, uint slicesCount, string fileName, IFileStats properties, string directory, bool isQueue) { Dictionary <string, object> vs = new Dictionary <string, object> { { "Receiver", "FileReceiver" }, { "DownloadKey", key }, { "SlicesCount", (int)slicesCount }, { "FileName", fileName }, { "DateModified", properties.LastWriteTime.ToUnixTimeMilliseconds() }, { "DateCreated", properties.CreationTime.ToUnixTimeMilliseconds() }, { "FileSize", properties.Length }, { "Directory", directory }, { "ServerIP", ipFinderResult.MyIP } }; var serialized = JsonConvert.SerializeObject(vs, Formatting.None); return(serialized); }
/// <param name="files">A list of Tuple(Relative directory path, StorageFile) objects.</param> public async Task <FileTransferResult> SendQueue(CancellationToken cancellationToken, List <Tuple <string, IFile> > files, string parentDirectoryName) { if ((ipFinderResult == null) || (ipFinderResult.Success == false)) { await Handshake(); if (ipFinderResult == null) { ipFinderResult = new IPDetectionCompletedEventArgs { Success = false, } } ; } if (ipFinderResult.Success == false) { return(FileTransferResult.FailedOnHandshake); } InitServer(); Dictionary <IFile, string> sFileKeyPairs = new Dictionary <IFile, string>(); IFileStats[] fs = new IFileStats[files.Count]; ulong totalSlices = 0; for (int i = 0; i < files.Count; i++) { var item = files[i]; var key = GenerateUniqueRandomKey(); fs[i] = await item.Item2.GetFileStats(); var slicesCount = (uint)Math.Ceiling(((double)fs[i].Length) / ((double)Constants.FileSliceMaxLength)); totalSlices += slicesCount; keyTable.Add(key, new FileDetails { storageFile = item.Item2, lastPieceAccessed = 0, lastSliceSize = (uint)((ulong)fs[i].Length % Constants.FileSliceMaxLength), lastSliceId = slicesCount - 1 }); sFileKeyPairs.Add(item.Item2, key); InitUrls(key, slicesCount); } var queueFinishKey = RandomFunctions.RandomString(15); server.AddResponseUrl("/" + queueFinishKey + "/finishQueue/", (Func <IWebServer, RequestDetails, string>)QueueFinished); System.Diagnostics.Debug.WriteLine("/" + queueFinishKey + "/finishQueue/"); queueFinishTcs = new TaskCompletionSource <string>(); fileSendTcs = null; ulong finishedSlices = 0; ClearInternalEventSubscribers(); FileTransferProgressInternal += (s, ee) => { FileTransferProgress?.Invoke(s, new FileTransferProgressEventArgs { State = ee.State, CurrentPart = finishedSlices + ee.CurrentPart, Total = totalSlices }); if (ee.State == FileTransferState.Finished) { finishedSlices += ee.Total; } }; cancellationToken.Register(() => { queueFinishTcs?.TrySetResult(TRANSFER_CANCELLED_MESSAGE); server?.Dispose(); }); if (await SendQueueInit(totalSlices, queueFinishKey, parentDirectoryName) == false) { return(FileTransferResult.FailedOnQueueInit); } bool infoSendResult = await SendQueueInfo(files, sFileKeyPairs, fs); return(await WaitQueueToFinish(cancellationToken)); }
public FileCompareStats(IFileStats stats, byte[] checksum, Guid groupID) { _md5 = new FileMD5Stats(stats, checksum); _groupID = groupID; }
public bool Equals(IFileStats other) => other != null && other is FileMD5StatsVerifiedLength && Equals((FileMD5StatsVerifiedLength)other);