Vytvorte klient-server aplikáciu na kopírovanie adresára.

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

  • Sťahovanie adresára (stromu adresárov a súborov) prebieha paralelne cez používateľom daný počet TCP soketov.
  • Kopírovanie prebieha iba zo servera na klienta
  • Jeden súbor sa presúva vždy len cez jeden soket, po jeho prenesení posiela tento soket ďalší súbor, ak ešte je ďalší, čo treba posielať
  • 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í. Pokračovanie kopírovania, ktoré funguje iba v prípade, že po prerušení musí ostať bežať klient alebo server je nedostatočné.
  • Od momentu prerušenia (už stiahnuté časti súborov sa neťahajú znova) opäť paralelne cez daný počet TCP soketov.
  • Pri prerušení klienta sa musia korektne uzavrieť všetky TCP spojenia aj uzavrieť súbory bez chybových hlášok v konzolách
  • Nie je potrebné programovať prehľadávač disku „na druhej strane“ na výber adresára ani výber cieľového umiestnenia adresára.
  • Pri spustení servera sa určí, aký adresár bude poskytovaný na kopírovanie – stačí cez konštantu
  • Odporúčam nepoužívať vytváranie špeciálnych paketov s hlavičkami, ale posielať cez Socket.getOutputStream().write() po prípadných úvodných dohodách iba dáta. Uzatvorenie streamu sa dá odchytiť cez výnikmku IOException, keď sa zatvorí socket.
  • Program má byť schopný skopírovať bez problémov na lokálnej sieti, alebo v rámci localhostu aj 1GB stredne veľkých súborov 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ň
      • progressbar znázorňujúci percento skopírovania počtu súborov
      • progressbar znázorňujúci percento skopírovanej veľkosti dát v MB
      • nejaký komponent na nastavenie počtu vlákien pri začatí kopírovania (môže byť read-only pri možnosti pokračovania, ak potrebujete)
      • tlačidlo na začatie kopírovania
      • 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