Beispiel #1
0
 /// <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;
 }
Beispiel #2
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;
        }