ASS8.Klient.komunikacja.downloadFiles C# (CSharp) Метод

downloadFiles() публичный Метод

Ściąga pliki z serwera
public downloadFiles ( string nazwyPlikow, string uzytkownik, GlacialComponents.Controls.GLItem gli, string path ) : int
nazwyPlikow string Lista plików do ściagnięcia
uzytkownik string Użytkownik od którego mają być ściągane pliki
gli GlacialComponents.Controls.GLItem Zmienna reprezentuje pasek postępu
path string Zmienna reprezentuje folder do zapisu pliku
Результат int
        public int downloadFiles(string[] nazwyPlikow, string uzytkownik, GLItem gli, string path)
        {
            if (uzytkownik.Length == 0) uzytkownik = ".";
            try
            {
                downloadPliku download = new downloadPliku(sessionID, (int)operacje.pobieranie, uzytkownik, nazwyPlikow);
                XmlSerializer xml = new XmlSerializer(typeof(downloadPliku));
                StringWriter stringWriter = new StringWriter();
                xml.Serialize(stringWriter, download, names);
                string str = stringWriter.ToString() + endl;
                wyslij(ASCIIEncoding.ASCII.GetBytes(str), str.Length);
            }
            catch (Exception)
            {
                throw new Wyjatki.BladWysylania("Blad podczas wysylania danych na serwer. Sprawdz polaczenie z internetem, oraz ewentualnie ustaw proxy -- zapytanie o sciagniecie plikow");
            }
            foreach (string s in nazwyPlikow)
            {
                serwerPliki plikiNaSerwerze = new serwerPliki();
                string[] tab = s.Split("/".ToCharArray());
                string tmp = (folder[folder.Length-1]=='/'?folder:folder+"/");
                for (int i = 0; i < tab.Length - 1; i++)
                {
                    tmp += tab[i] + "/";
                    if (!Directory.Exists(tmp))
                        Directory.CreateDirectory(tmp);
                }
                try
                {
                    XmlSerializer xml = new XmlSerializer(typeof(serwerPliki));
                    string str = pobierz();

                    StringReader stringReader = new StringReader(str);
                    plikiNaSerwerze = (serwerPliki)xml.Deserialize(stringReader);
                }
                catch (Wyjatki.BladOdbierania bo)
                {
                    bo.add("-- odpowiedz sciaganie plikow");
                    throw bo;
                }
                catch (Exception)
                {
                    throw new Wyjatki.BladParsowania("Dostano bledne dane od serwera lub nastapil blad programu -- odpowiedz sciaganie plikow");
                }
                if (plikiNaSerwerze.operacja != (int)operacje.pobieranie) return -3;
                if (plikiNaSerwerze.odp == (int)odpowiedzi.wszystko_ok)
                {
                    if (plikiNaSerwerze.plik.Count != 1)
                    {
                        StringWriter stringWriter = new StringWriter();
                        klientOdpDownload kod = new klientOdpDownload(sessionID, (int)operacje.pobieranie, "ok");
                        XmlSerializer xml = new XmlSerializer(typeof(klientOdpDownload));
                        xml.Serialize(stringWriter, kod, names);
                        string str = stringWriter.ToString() + endl;
                        wyslij(ASCIIEncoding.ASCII.GetBytes(str), str.Length);
                        StringReader stringReader = new StringReader("");
                        str = pobierz();
                        XmlSerializer xmlO = new XmlSerializer(typeof(serwerBase));
                        serwerBase odpSerwera = (serwerBase)xmlO.Deserialize(new StringReader(str));
                        continue;
                    }
                    plikInfo p = plikiNaSerwerze.plik[0];
                    if (p.rozmiar >= 0)
                    {
                        FileStream streamWriter = null;
                        if (path == null)
                            streamWriter = new FileStream(folder + "/" + p.nazwa, FileMode.OpenOrCreate, FileAccess.Write);
                        else
                        {
                            if (p.rozmiar == 0)
                                ((ProgressBar)gli.SubItems[1].Control).PerformStep();
                            streamWriter = new FileStream(path + "/" + p.nazwa, FileMode.OpenOrCreate, FileAccess.Write);
                        }
                        try
                        {
                            StringWriter stringWriter = new StringWriter();
                            klientOdpDownload kod = new klientOdpDownload(sessionID, (int)operacje.pobieranie, "ok");
                            XmlSerializer xml = new XmlSerializer(typeof(klientOdpDownload));
                            xml.Serialize(stringWriter, kod, names);
                            string str = stringWriter.ToString() + endl;
                            wyslij(ASCIIEncoding.ASCII.GetBytes(str), str.Length);
                            int rozmiar = p.rozmiar;
                            int tempRozmiar = rozmiar;
                            while (tempRozmiar > 0)
                            {

                                int readSize = 102400;
                                if (tempRozmiar < readSize)
                                {
                                    readSize = tempRozmiar;
                                }
                                byte[] bytes;
                                int odebrane = pobierz(readSize, out bytes);
                                tempRozmiar -= odebrane;
                                streamWriter.Write(bytes, 0, odebrane);
                                if (gli != null)
                                {
                                    ProgressBar pb = (ProgressBar)gli.SubItems[1].Control;
                                    object[] obj = new object[] { pb, odebrane };
                                    postep(pb, odebrane);
                                }
                            }
                            streamWriter.Close();
                        }
                        catch (Exception ex)
                        {
                            throw new Wyjatki.BladOdbierania("Wystapil Blad podczas odbierania pliku z serwera -- odbieranie pliku i zapisywanie");
                        }
                        finally
                        {
                            streamWriter.Close();
                        }
                    }
                }
            }
            return 1;
        }