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;
}