private static void sendzip(string file, long start, int size, string path, DFile ret) { if (LongFile.Exists(path + file) == false) { ret.err = DownloadError.NOTFOUND; return; } FileStream fs = null; try { fs = new FileStream(path + file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); byte[] b = new byte[size]; fs.Seek(start, SeekOrigin.Begin); fs.Read(b, 0, size); ret.err = DownloadError.OK; ret.data = b; } catch { ret.err = DownloadError.LOCKED; } finally { if (fs != null) { fs.Close(); } } }
public static void DeleteZip(string sharename, string token, SyncFile file) { var share = Global.Shares.Find(x => x.Name == sharename); DFile ret = new DFile(); ret.err = DownloadError.NOTFOUND; string path = share.Path + ".ts" + _S + "Temp" + _S; if (File.Exists(path + file.F)) { File.Delete(path + file.F); } }
public static DFile Download(string sharename, string token, SyncFile file, long start, int size) { var share = Global.Shares.Find(x => x.Name == sharename); DFile ret = new DFile(); ret.err = DownloadError.NOTFOUND; if (share == null) { var cs = Global.ConnectionList.Find(x => x.Name == sharename); if (cs != null && cs.Token == token) { sendfile(file, start, size, cs.Path, ret); } } else if (share.ReadOnlyToken == token || share.ReadWriteToken == token) { sendfile(file, start, size, share.Path, ret); } return(ret); }
public static DFile DownloadZip(string sharename, string token, SyncFile file, long start, int size) { var share = Global.Shares.Find(x => x.Name == sharename); DFile ret = new DFile(); ret.err = DownloadError.NOTFOUND; if (share == null) { var cs = Global.ConnectionList.Find(x => x.Name == sharename && x.Token == token); if (cs != null) { string path = cs.Path + ".ts" + _S + "Temp" + _S; sendzip(file.F, start, size, path, ret); } } else if (share.ReadOnlyToken == token || share.ReadWriteToken == token) { string path = share.Path + ".ts" + _S + "Temp" + _S; sendzip(file.F, start, size, path, ret); } return(ret); }
private static void sendfile(SyncFile file, long start, int size, string path, DFile ret) { if (LongFile.Exists(path + file.F) == false) { ret.err = DownloadError.NOTFOUND; return; } var fi = new LongFileInfo(path + file.F); // kludge : for seconds resolution var d1 = fi.LastWriteTime.Ticks / Global.tickfilter; var d2 = file.D.Ticks / Global.tickfilter; if (d1 == d2) { FileStream fs = null; try { fs = new FileStream(fi.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); byte[] b = new byte[size]; fs.Seek(start, SeekOrigin.Begin); fs.Read(b, 0, size); ret.err = DownloadError.OK; ret.data = b; } catch { ret.err = DownloadError.LOCKED; } finally { if (fs != null) { fs.Close(); } } } else { ret.err = DownloadError.OLDER; } }
private bool downloadfile(SyncFile file, string saveto, Func <Connection, SyncFile, long, int, DFile> func) { long left = file.S; int retry = 0; int mb = Global.DownloadBlockSizeMB * Global.MB; //Stopwatch sw = new Stopwatch(); //sw.Start(); while (left > 0) { long len = left; long start = file.S - left; if (len > mb) { len = mb; } //sw.Reset(); DFile df = func(_conn, file, start, (int)len); //_connInfo.Mbs = (len / sw.ElapsedTicks) / (1000*TimeSpan.TicksPerSecond) ; if (df == null) { retry++; Thread.Sleep(new Random((int)FastDateTime.Now.Ticks).Next(2000) + 500); if (retry > 10) { _log.Info(" null "); _que.Enqueue(file); //if (LongFile.Exists(saveto)) LongFile.Delete(saveto); return(false); } } else if (df.err == DownloadError.OK) { retry = 0; string ifn = saveto; if (TorpedoSync.Global.isWindows == false) { ifn = saveto.Replace("\\", "/"); } _log.Info("len = " + len + " , " + saveto.Replace(".!torpedosync", "")); left -= len; LongDirectory.CreateDirectory(LongDirectory.GetDirectoryName(ifn)); // save to disk var fs = new FileStream(ifn, FileMode.OpenOrCreate); fs.Seek(0L, SeekOrigin.End); fs.Write(df.data, 0, df.data.Length); fs.Close(); if (left == 0) { var fi = new LongFileInfo(saveto); if (fi.Length != file.S) { // FEATURE : file length don't match _log.Info("file length don't match."); return(false); } } } else if (df.err == DownloadError.OLDER || df.err == DownloadError.LOCKED) { _ErrorQue.Enqueue(file); _connInfo.LastFileNameDownloaded = ""; _log.Info("Locked/Older : " + saveto); return(false); } else if (df.err == DownloadError.NOTFOUND) { _log.Info("Not Found : " + saveto); _connInfo.LastFileNameDownloaded = ""; _ErrorQue.Enqueue(file); LongFile.Delete(saveto); return(false); } } return(true); }