///////////////////////////////////////////////////////////////////////////////////////////////////// //send ///////////////////////////////////////////////////////////////////////////////////////////////////// public void send(Queue <FormattedFile> files_queue, bool alive, string connection_name, int connection_limit) { try { while (files_queue.Count > 0) { FormattedFile file = files_queue.Dequeue(); //rename file change extention from "txt" to "tmp" string name = Path.GetFileNameWithoutExtension(file.filename); string tmp_filename = Path.ChangeExtension(file.filename, ".tmp"); bool has = exists(tmp_filename, alive, connection_name); if (has) { } //upload temporary bool up = upload(tmp_filename, file.content, alive, connection_name, connection_limit); if (!up) { Debug.Assert(false); return; } //rename bool ren = rename(tmp_filename, file.filename, alive, connection_name); if (!ren) { Debug.Assert(false); return; } } } catch (Exception e) { Console.WriteLine(e.Message); } }
///////////////////////////////////////////////////////////////////////////////////////////////////// //upload ///////////////////////////////////////////////////////////////////////////////////////////////////// public void upload(Queue <FormattedFile> files_queue, bool alive, string connection_name) { try { while (files_queue.Count > 0) { FormattedFile file = files_queue.Dequeue(); FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + address + "/" + directory + "/" + file.filename); request.Method = WebRequestMethods.Ftp.UploadFile; request.Credentials = new NetworkCredential(username, password); request.ContentLength = file.content.Length; request.KeepAlive = alive; if (!String.IsNullOrEmpty(connection_name)) { request.ConnectionGroupName = connection_name; } Stream stream = request.GetRequestStream(); byte[] buf = Encoding.ASCII.GetBytes(file.content); stream.Write(buf, 0, file.content.Length); stream.Close(); FtpWebResponse response = (FtpWebResponse)request.GetResponse(); response.Close(); } } catch (Exception e) { Console.WriteLine(e.Message); } }
///////////////////////////////////////////////////////////////////////////////////////////////////// //read_messages ///////////////////////////////////////////////////////////////////////////////////////////////////// public static void read_messages(string path, Queue <FormattedFile> files_queue) { List <FileInfo> files = new DirectoryInfo(path).GetFiles("*.txt").OrderBy(f => f.CreationTime).ToList(); foreach (FileInfo file in files) { StreamReader stream = new StreamReader(file.FullName); string buf = stream.ReadToEnd(); stream.Close(); FormattedFile formatted_file = new FormattedFile(file.FullName, file.Name, buf); files_queue.Enqueue(formatted_file); } }
public new static T Load(Uri path) { string f = WinFormUtils.GetEntryAssemblyFilename(false) + settingsExtension; //string f = Filename; // static- not set yet T t = FormattedFile <T, S, R> .Load(path, f); if (t == FormattedFile <T, S, R> .Empty) { t = new T(); t.InitDefaults(); } return(t); }
///////////////////////////////////////////////////////////////////////////////////////////////////// //work (thread) ///////////////////////////////////////////////////////////////////////////////////////////////////// private void work(object param) { FormattedFile file = (FormattedFile)param; bool alive = true; string connection_name = "foo"; int connection_limit = 500; Stopwatch watch = new Stopwatch(); watch.Start(); //rename file change extention from "txt" to "tmp" string name = Path.GetFileNameWithoutExtension(file.filename); string tmp_filename = Path.ChangeExtension(file.filename, ".tmp"); bool has = exists(tmp_filename, alive, connection_name); if (has) { Debug.Assert(false); return; } //upload temporary bool up = upload(tmp_filename, file.content, alive, connection_name, connection_limit); if (!up) { Debug.Assert(false); return; } //rename bool ren = rename(tmp_filename, file.filename, alive, connection_name); if (!ren) { Debug.Assert(false); return; } watch.Stop(); string fname = file.full_filename + ".time.txt"; StreamWriter stream = new StreamWriter(fname); string tmp = watch.ElapsedMilliseconds.ToString(); stream.Write(tmp); stream.Close(); }
///////////////////////////////////////////////////////////////////////////////////////////////////// //send_thread ///////////////////////////////////////////////////////////////////////////////////////////////////// public void send_thread(Queue <FormattedFile> files_queue) { try { while (files_queue.Count > 0) { FormattedFile file = files_queue.Dequeue(); Thread thread = new Thread(work); thread.Start(file); //block the calling thread (main) to measure time after all threads done thread.Join(); } } catch (Exception e) { Console.WriteLine(e.Message); } }
///////////////////////////////////////////////////////////////////////////////////////////////////// //delete ///////////////////////////////////////////////////////////////////////////////////////////////////// public void delete(Queue <FormattedFile> files_queue) { try { while (files_queue.Count > 0) { FormattedFile file = files_queue.Dequeue(); FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://" + address + "/" + directory + "/" + file.filename); request.Method = WebRequestMethods.Ftp.DeleteFile; request.Credentials = new NetworkCredential(username, password); FtpWebResponse response = (FtpWebResponse)request.GetResponse(); response.Close(); } } catch (Exception e) { Console.WriteLine(e.Message); } }
///////////////////////////////////////////////////////////////////////////////////////////////////// //benchmark ///////////////////////////////////////////////////////////////////////////////////////////////////// static void benchmark(string address, string username, string password) { int nbr_messages = 30; int nbr_lines = 60; string root = "C://FTP"; string path = "C://FTP//_1"; bool do_test_1 = false; Stopwatch watch = new Stopwatch(); Ftp ftp = new Ftp(address, username, password, "."); Queue <FormattedFile> files_queue = new Queue <FormattedFile>(); ///////////////////////////////////////////////////////////////////////////////////////////////////// //generate test files: number of files and file size as parameters ///////////////////////////////////////////////////////////////////////////////////////////////////// delete_messages(root); delete_messages(path); make_messages(path, nbr_messages, nbr_lines); //get file size List <FileInfo> files = new DirectoryInfo(path).GetFiles("*.txt").OrderBy(f => f.CreationTime).ToList(); long length = files.Last().Length; ///////////////////////////////////////////////////////////////////////////////////////////////////// //performance parameters ///////////////////////////////////////////////////////////////////////////////////////////////////// bool alive = false; string connection_name = null; ///////////////////////////////////////////////////////////////////////////////////////////////////// //test FTP client ///////////////////////////////////////////////////////////////////////////////////////////////////// read_messages(path, files_queue); Debug.Assert(files_queue.Count() == nbr_messages); watch.Start(); print_start("Test FTP client", length, nbr_messages); FtpClient ftp_client = new FtpClient(address, false); ftp_client.login(username, password); while (files_queue.Count > 0) { FormattedFile file = files_queue.Dequeue(); string name = Path.GetFileNameWithoutExtension(file.filename); string tmp_filename = Path.ChangeExtension(file.filename, ".tmp"); ftp_client.put(file.content, tmp_filename); } ftp_client.quit(); watch.Stop(); print_end(watch.ElapsedMilliseconds); watch.Reset(); Debug.Assert(files_queue.Count() == 0); ///////////////////////////////////////////////////////////////////////////////////////////////////// //test upload ///////////////////////////////////////////////////////////////////////////////////////////////////// if (do_test_1) { delete_messages(root); read_messages(path, files_queue); Debug.Assert(files_queue.Count() == nbr_messages); watch.Start(); print_start("Test upload (alive false, no connection name)", length, nbr_messages); ftp.send(files_queue, alive, connection_name, nbr_messages); watch.Stop(); print_end(watch.ElapsedMilliseconds); watch.Reset(); Debug.Assert(files_queue.Count() == 0); } alive = true; ///////////////////////////////////////////////////////////////////////////////////////////////////// //test upload ///////////////////////////////////////////////////////////////////////////////////////////////////// if (do_test_1) { delete_messages(root); read_messages(path, files_queue); Debug.Assert(files_queue.Count() == nbr_messages); watch.Start(); print_start("Test upload (alive true, no connection name)", length, nbr_messages); ftp.send(files_queue, alive, connection_name, nbr_messages); watch.Stop(); print_end(watch.ElapsedMilliseconds); watch.Reset(); Debug.Assert(files_queue.Count() == 0); } connection_name = address + username; ///////////////////////////////////////////////////////////////////////////////////////////////////// //test upload ///////////////////////////////////////////////////////////////////////////////////////////////////// delete_messages(root); read_messages(path, files_queue); Debug.Assert(files_queue.Count() == nbr_messages); watch.Start(); print_start("Test upload (alive true, connection name)", length, nbr_messages); ftp.send(files_queue, alive, connection_name, nbr_messages); watch.Stop(); print_end(watch.ElapsedMilliseconds); watch.Reset(); Debug.Assert(files_queue.Count() == 0); ///////////////////////////////////////////////////////////////////////////////////////////////////// //test upload async ///////////////////////////////////////////////////////////////////////////////////////////////////// delete_messages(root); read_messages(path, files_queue); Debug.Assert(files_queue.Count() == nbr_messages); watch.Start(); print_start("Test async(alive true, connection name)", length, nbr_messages); ftp.send_async(files_queue, alive, connection_name, nbr_messages); watch.Stop(); print_end(watch.ElapsedMilliseconds); watch.Reset(); Debug.Assert(files_queue.Count() == 0); ///////////////////////////////////////////////////////////////////////////////////////////////////// //test upload async read async ///////////////////////////////////////////////////////////////////////////////////////////////////// if (do_test_1) { delete_messages(root); read_messages(path, files_queue); Debug.Assert(files_queue.Count() == nbr_messages); watch.Start(); print_start("Test async read (alive true, connection name)", length, nbr_messages); ftp.send_async_read(files_queue, alive, connection_name, nbr_messages); watch.Stop(); print_end(watch.ElapsedMilliseconds); watch.Reset(); Debug.Assert(files_queue.Count() == 0); } ///////////////////////////////////////////////////////////////////////////////////////////////////// //test send thread ///////////////////////////////////////////////////////////////////////////////////////////////////// delete_messages(root); read_messages(path, files_queue); Debug.Assert(files_queue.Count() == nbr_messages); print_start("Test send thread (alive true, connection name)", length, nbr_messages); ftp.send_thread(files_queue); Debug.Assert(files_queue.Count() == 0); //read each file with saved time in thread long tt = 0; List <FileInfo> file_times = new DirectoryInfo("C://FTP//_1").GetFiles("*.time.txt").OrderBy(f => f.CreationTime).ToList(); foreach (FileInfo f in file_times) { StreamReader reader = new StreamReader(f.FullName); string buf = reader.ReadToEnd(); long t = Convert.ToInt64(buf); tt += t; reader.Close(); } string message = "\t\t" + tt / (float)1000.0 + " seconds, " + file_times.Count + " files"; Console.Write(message); }