using namespace System;
using namespace System::Net;
using namespace System::IO;


ref class pobierz_wyslij {
    private: String^ sciezka; // nazwa pliku do pobrania i ścieżka
    private: String^ plik;
    private: String^ login;
    private: String^ haslo;

    // konstruktor
    public: pobierz_wyslij (String^ scie,String^ zbior,String^ logi,String^ has) {
                sciezka=scie;
                plik=zbior;
                login=logi;
                haslo=has;
            }
    // metoda pobierająca plik
    public: System::Void pobierz_plik() {
                Uri^ adres = gcnew Uri("ftp://"+sciezka+"/"+plik);
                FtpWebRequest^ req =
                  dynamic_cast<FtpWebRequest^>(WebRequest::Create(adres));
                req->Credentials=gcnew NetworkCredential(login,haslo);
                req->Method=WebRequestMethods::Ftp::DownloadFile;
                FtpWebResponse^ resp=dynamic_cast<FtpWebResponse^>(req->GetResponse());
                Stream^ resp_stream = resp->GetResponseStream();
                FileStream^ stru_plik = gcnew FileStream("./"+plik,FileMode::Create);
                // czytaj plik z serwera i zapisuj do strumienia
                int ile_bajtow;
                array<Byte> ^ bufor = gcnew array<Byte>(1024);
                do {
                   ile_bajtow=resp_stream->Read(bufor,0,bufor->Length);
                   stru_plik->Write(bufor,0,ile_bajtow);
                } while(ile_bajtow!=0);
                stru_plik->Flush();
                stru_plik->Close();
                resp_stream->Close();
                resp->Close();
            }
    public: System::Void wyslij_plik() {
                Uri^ adres = gcnew Uri("ftp://"+sciezka+"/"+plik);
                FtpWebRequest^ req =
                  dynamic_cast<FtpWebRequest^>(WebRequest::Create(adres));
                req->Credentials=gcnew NetworkCredential(login,haslo);
                req->Method=WebRequestMethods::Ftp::UploadFile;
                FileStream^ stru_plik = gcnew FileStream("./"+plik,FileMode::Open);
                Stream^ req_stream = req->GetRequestStream();
                int ile_bajtow;
                array<Byte> ^ bufor = gcnew array<Byte>(1024);
                do {
                   ile_bajtow=stru_plik->Read(bufor,0,1024);
                   req_stream->Write(bufor,0,ile_bajtow);
                } while(ile_bajtow!=0);
                req_stream->Close();
                FtpWebResponse^ resp=dynamic_cast<FtpWebResponse^>(req->GetResponse());
            }
};
