{"id":22104841,"url":"https://github.com/nemeslaszlo/seeder-tracker-leecher","last_synced_at":"2025-10-06T02:54:47.441Z","repository":{"id":117466547,"uuid":"197831319","full_name":"NemesLaszlo/Seeder-Tracker-Leecher","owner":"NemesLaszlo","description":"Basic \"Torrent\" Implementation With RMI.","archived":false,"fork":false,"pushed_at":"2019-07-19T19:38:51.000Z","size":37,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-03-24T02:44:30.271Z","etag":null,"topics":["java","leecher","multithreading","seeder","seeder-tracker-leecher","socket","synchronized","tracker"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NemesLaszlo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-19T19:31:40.000Z","updated_at":"2020-04-25T18:48:47.000Z","dependencies_parsed_at":"2023-07-17T12:56:50.779Z","dependency_job_id":null,"html_url":"https://github.com/NemesLaszlo/Seeder-Tracker-Leecher","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/NemesLaszlo/Seeder-Tracker-Leecher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NemesLaszlo%2FSeeder-Tracker-Leecher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NemesLaszlo%2FSeeder-Tracker-Leecher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NemesLaszlo%2FSeeder-Tracker-Leecher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NemesLaszlo%2FSeeder-Tracker-Leecher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NemesLaszlo","download_url":"https://codeload.github.com/NemesLaszlo/Seeder-Tracker-Leecher/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NemesLaszlo%2FSeeder-Tracker-Leecher/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278551490,"owners_count":26005389,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","leecher","multithreading","seeder","seeder-tracker-leecher","socket","synchronized","tracker"],"created_at":"2024-12-01T06:35:30.820Z","updated_at":"2025-10-06T02:54:47.412Z","avatar_url":"https://github.com/NemesLaszlo.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Seeder-Tracker-Leecher\nBasic \"Torrent\" implementation.\n\nAz alapfeladat során a következő futtatható osztályokat implementáljuk:\n\nTracker: A rácsatlakozó csomópontoknak elküldi, hogy mely fájlokat mely csomópontok tárolják.\nSeeder: Regisztrálja a Tracker-ben az általa tárolt fájlok neveihez a saját portját, majd kiszolgálja a rácsatlakozó csomópontok kéréseit.\nLeecher: A Tracker-től lekéri valamely fájlt tároló Seeder csomópont portját, csatlakozik a Seeder-hez és letölti tőle a fájlt.\nAz egyszerűség kedvéért a fájlneveket és a fájlokat is String-ekkel, a hálózat csomópontjait pedig a portjaikkal (Integer) reprezentáljuk. Feltesszük, hogy egy fájlnévvel pontosan egy csomópont tárol fájlt.\n\nAz egyes osztályok szerkezetére és viselkedésére az alábbi követelmények vonatkoznak:\n\n# Tracker\n\nEgy fájlnévhez portokat rendelő asszociatív adatszerkezetben tartja számon, hogy melyik Leecher csomópont melyik fájlt tárolja. Az adatszerkezet legyen objektumszintű attribútum.\nvoid storeFileId(String fileId, Integer peerPort) metódus hozzárendel az adatszerkezetben egy fájlnévhez egy portot.\nInteger lookupPeerPort(String fileId) metódus megkeresi az adatszerkezetben, hogy egy adott fájlnevet tároló csomópont mely porton érhető el.\nvoid start() metódus egymás után fogad tetszőlegesen sok csomópontot az 55555 porton, akikkel a következő protokoll szerint kommunikál:\n\nAmennyiben a leech üzenetet kapja a csomóponttól, vár egy további, fájlnevet tartalmazó üzenetet, majd visszaküldi a fájlnévhez fájlt tároló csomópont portját.\nAmennyiben a seed üzenetet kapja a csomóponttól, vár egy további, egész szám portot tartalmazó üzenetet, majd tetszőlegesen sok, fájlnevet tartalmazó üzenetet vár. Minden kapott fájlnévhez eltárolja az előzőleg kapott portot.\nA kiszolgálást követően bontja a kapcsolatot a csomóponttal, és várja a következő felcsatlakozó csomópontot.\nA main metódus belépési pont példányosít egy Tracker objektumot és elindítja azt a start metódussal. Parancssori argumentumokat nem vár.\n\n# Seeder\n\nParancssori argumentumok:\n\nAz első parancssori argumentum egy egész szám port, amelyre majd a letölteni szándékozó csomópontok csatlakozhatnak.\nA további páros darab további argumentum fájlnév-fájl párok sorozata (pl. k1 v1 k2 v2 k3 v3), ahol a fájlneveket (pl. k1) az általuk jelölt fájl tartalma (pl. v1) követi.\nA fájlnevekhez tartozó fájlokat egy String-hez String-et rendelő asszociatív adatszerkezetben tartja számon.\n\nFutása során sorban a következő két lépést hajtja végre:\n\nRegisztrálja az 55555 porton várakozó Tracker-be a fájlneveket a saját portjával. Ehhez először elküldi a seed üzenetet, majd a saját portját, majd elküldi a fájlneveket (pl. k1, k2, k3). A küldés után lezárja a kapcsolatot.\nVárakozik felcsatlakozó csomópontokra a saját portján. A felcsatlakozott csomóponttól egy fájlnevet kap (pl. k1), válaszul pedig visszaküldi a fájlnévhez tartozó fájlt (pl. v1). A küldés után lezárja a kapcsolatot.\n\n# Leecher\n\nParancssori argumentum:\n\nEgy fájlnév (pl. k1).\nFutása során sorban a következő két lépést hajtja végre:\n\nLekéri az 55555 porton várakozó Tracker-től a fájlnévhez tartozó fájlt tároló csomópont portját. Ehhez először elküldi a leech üzenetet, aztán a fájlnevet, majd vár egy egész szám portot tartalmazó üzenetet. Az üzenet érkezése után lezárja a kapcsolatot.\nFelcsatlakozik a kapott porton várakozó Seeder csomópontra és letölti tőle a fájlnévhez tartozó fájlt. Ehhez elküldi a fájlnevet, majd várja a fájlt reprezentáló String üzenetet. A fájl beérkezése után lezárja a kapcsolatot.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnemeslaszlo%2Fseeder-tracker-leecher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnemeslaszlo%2Fseeder-tracker-leecher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnemeslaszlo%2Fseeder-tracker-leecher/lists"}