Vytvorte klient-server aplikáciu na kopírovanie súboru.

Na riešenie tohto zadania môžete ako základ použiť projekt https://gitlab.science.upjs.sk/kopr/file_copy

  • Sťahovanie súboru prebieha paralelne cez používateľom daný počet TCP soketov.
  • Kopírovanie prebieha iba zo servera na klienta
  • Pri spustení servera sa určí aký súbor bude poskytovaný na kopírovanie – stačí cez konštantu
  • Toto sťahovanie je prerušiteľné tak, že sa vypne server (simulácia straty spojenia) alebo klient (simulácia toho, že používateľ musí nečakane vypnúť/reštartovať počítač). Po opätovnom nadviazaní spojenia medzi serverom a klientom, má klient možnosť pokračovať v dokopírovaní od momentu prerušenia (už stiahnuté časti súboru sa neťahajú znova) opäť paralelne cez rovnaký počet TCP soketov. Pokračovanie kopírovania, ktoré funguje iba ak po prerušení ostane bežať klient aj server je nedostatočné.
  • Pri prerušení klienta sa musia korektne uzavrieť všetky TCP spojenia aj uzavrieť súbory bez chybových hlášok v konzolách
  • Program má byť schopný skopírovať bez problémov na lokálnej sieti, alebo v rámci localhostu aj 1GB súbor pod 1 minútu
  • Požadované vlastnosti
    • projekt musí využívať na správu vlákien Executor – nevytvárate vlastné Thread-y
    • použite aspoň jeden synchronizér
    • odchyťte v úlohe udalosť prerušenia
    • počet dokopy vytvorených TCP spojení počas celej doby kopírovania musí byť rovný počtu TCP Soketov zadaných používateľom s prípadným bonusovým jedným TCP soketom/spojením na manažovanie kopírovania (ak máte potrebu ho použiť) – teda, počas kopírovania žiadne nové TCP spojenia nevznikajú
    • Grafické používateľské rozhranie pre klienta vo frameworku JavaFX obsahujúce aspoň:
      • tlačidlo na začatie kopírovania
      • nejaký komponent na nastavenie počtu vlákien pri začatí kopírovania (read-only pri možnosti pokračovania)
      • progressbar znázorňujúci percento skopírovanej veľkosti dát v MB
      • tlačidlo na opätovné pokračovanie v kopírovaní, ak je (pri spustení) zistené, že kopírovanie bolo prerušené (môže ísť o rovnaké tlačidlo ako na začatie kopírovania ak sa mu nastaví popisok na pokračovanie).
  • Zakázané vlastnosti
    • použitie uspatia vlákna na určitý čas namiesto vhodného sychronizéra