Beispiel #1
0
    /////////////////////////////////////////////////////////////////////////////////////////////////////
    //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);
        }
    }
Beispiel #2
0
    /////////////////////////////////////////////////////////////////////////////////////////////////////
    //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);
        }
    }
Beispiel #3
0
    /////////////////////////////////////////////////////////////////////////////////////////////////////
    //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);
        }
    }
Beispiel #4
0
        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);
        }
Beispiel #5
0
    /////////////////////////////////////////////////////////////////////////////////////////////////////
    //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();
    }
Beispiel #6
0
    /////////////////////////////////////////////////////////////////////////////////////////////////////
    //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);
        }
    }
Beispiel #7
0
    /////////////////////////////////////////////////////////////////////////////////////////////////////
    //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);
        }
    }
Beispiel #8
0
    /////////////////////////////////////////////////////////////////////////////////////////////////////
    //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);
    }