/// <summary> /// Wysyła plik na serwer /// </summary> /// <param name="nazwa">Nazwa pliku</param> /// <param name="data">Data pliku</param> /// <param name="rozmiar">Rozmiar pliku</param> /// <returns>Odpowiedź od serwera</returns> public int uploadFile(string nazwa, DateTime data, int rozmiar) { string katalog = ((folder[folder.Length - 1] == '/') ? folder : folder + "/"); if (!File.Exists(katalog + nazwa)) return -4; try { StringWriter stringWriter = new StringWriter(); XmlSerializer xml = new XmlSerializer(typeof(klientUpload)); klientUpload upload = new klientUpload(sessionID, (int)operacje.wysylanie, nazwa, (long)(data - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds, rozmiar, 0, hashPliku(katalog + nazwa)); xml.Serialize(stringWriter, upload, 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 -- wysylanie zapytanie"); } serwerBase odpSerwera = new serwerBase(); try { StringReader stringReader = new StringReader(""); string str = pobierz(); XmlSerializer xml = new XmlSerializer(typeof(serwerBase)); odpSerwera = (serwerBase)xml.Deserialize(new StringReader(str)); } catch (Wyjatki.BladOdbierania bo) { bo.add("-- odpowiedz wgrywanie plikow"); throw bo; } catch (Exception) { throw new Wyjatki.BladParsowania("Dostano bledne dane od serwera lub nastapil blad programu -- odpowiedz wgrywanie plikow"); } if (odpSerwera.operacja != (int)operacje.wysylanie) return -3; if (odpSerwera.odp == (int)odpowiedzi.plik_istnieje) { string odp; if (MessageBox.Show("Plik " + nazwa + " istnieje na serwerze, czy zastapic go?", "", MessageBoxButtons.YesNo) == DialogResult.Yes) { odp = "ok"; } else { odp = "abort"; } try { StringWriter stringWriter = new StringWriter(); XmlSerializer xml = new XmlSerializer(typeof(klientOdpDownload)); klientOdpDownload kod = new klientOdpDownload(sessionID, (int)operacje.wysylanie, odp); xml.Serialize(stringWriter, kod, 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 -- odpowiedz czy plik zastapic"); } try { StringReader stringReader = new StringReader(""); string str2 = pobierz(); XmlSerializer x = new XmlSerializer(typeof(serwerBase)); odpSerwera = (serwerBase)x.Deserialize(new StringReader(str2)); } catch (Wyjatki.BladOdbierania bo) { bo.add("-- odpowiedz na zapytanie czy zastapic"); throw bo; } catch (Exception ex) { throw new Wyjatki.BladParsowania("Dostano bledne dane od serwera lub nastapil blad programu -- odpowiedz na zapytanie czy zastapic" + ex.ToString()); } } if (odpSerwera.operacja != (int)operacje.wysylanie) return -3; if (odpSerwera.odp == (int)odpowiedzi.wszystko_ok || odpSerwera.odp == (int)odpowiedzi.plik_nie_istnieje) { int rozmiarUp = 102400; int rozmiarTmp = rozmiar; FileStream fileStream = new FileStream(katalog + nazwa, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fileStream); int c = 0; try { while (rozmiarTmp != 0) { c++; if (rozmiarTmp < rozmiarUp) rozmiarUp = rozmiarTmp; byte[] bytes = br.ReadBytes(rozmiarUp); wyslij(bytes, rozmiarUp); rozmiarTmp -= rozmiarUp; System.Threading.Thread.Sleep(100); } } catch (Exception) { throw new Wyjatki.BladWysylania("Blad podczas wysylania pliku na serwer -- wysylanie pliku"); } finally { fileStream.Close(); } fileStream.Close(); try { XmlSerializer xml = new XmlSerializer(typeof(klientHash)); klientHash khash = new klientHash(sessionID, (int)operacje.wysylanie, hashPliku(katalog + nazwa)); StringWriter sw = new StringWriter(); xml.Serialize(sw, khash, names); string str = sw.ToString() + endl; wyslij(ASCIIEncoding.ASCII.GetBytes(str), str.Length); } catch (Exception) { throw new Wyjatki.BladWysylania("Blad podczas wysylania pliku na serwer -- wysylanie hasha"); } } return odpSerwera.odp; }
/// <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; }