Пример #1
0
        /// <summary>
        /// Ściąga pliki z serwera
        /// </summary>
        /// <param name="nazwyPlikow">Lista plików do ściagnięcia</param>
        /// <param name="uzytkownik">Użytkownik od którego mają być ściągane pliki</param>
        /// <param name="gli">Zmienna reprezentuje pasek postępu</param>
        /// <param name="path">Zmienna reprezentuje folder do zapisu pliku</param>
        /// <returns>Odpowiedź od serwera lub 1 w przypadku gdy wszystko poszło dobrze</returns>
        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;
        }