Készítsd el a Labirintus osztályt. A Labirintus osztály valósítson meg egy szervert, amely két porton keresztül várja a külvilágtól a kommunikációt. A Labirintus osztály a két port értékét parancssori paraméterként kapja meg. Az első porton a labirintusban bolyongó kliensek kapcsolódhatnak, a második port pedig a labirintus adminisztrátorainak van fenntartva. A kliensek és az adminisztrátorok egyaránt egyszerű szöveges üzeneteket küldenek, a telnet programot használhatják. Egyszerre tetszőlegesen sok kliens és tetszőlegesen sok adminisztrátor lehet bejelentkezve. A Labirintus osztály ábrázolja a labirintus térképét. A térkép álljon helyszínekből. A térkép minden helyszínének legyen egy egész szám azonosítója; minden helyszínhez különböző azonosító tartozzon. A labirintus tartalmazza továbbá, hogy egy helyszínről kiindulva milyen irányban melyik helyszín érhető el. A lehetséges irányok: eszak, del, kelet, nyugat, fel, le (a program felismerheti az ékezetes verziókat is). A térképnek további megkötései (pl. eszak után del lépéssel ugyanoda kell érkezni) nincsenek. Minden helyszínhez tartozzon továbbá egy szöveges leírás. A Labirintus indításkor parancssori paraméterként a fent leírt két porton kívül kapja meg egy fájl nevét is. A fájl tartalmazza a labirintus kiinduló helyszíneinek leírását az alábbiak szerint. 3 1 Egy kökörcsines réten állsz. leiras-vege eszak 2 del 3 iranyok-vege 2 Egy fenyves melletti úton haladsz. Hosszú út vezet keletre és nyugatra. leiras-vege kelet 1 nyugat 3 iranyok-vege 3 Egy régészeti ásatáshoz érkeztél. leiras-vege fel 2 le 1 iranyok-vege A fájl első sorában a helyszínek száma található meg. A helyszínek leírásai egymás után sorban következnek. A leírás a helyszín sorszámát tartalmazza az első sorban. Ezután egy vagy több sorban következik a helyszín leírása; a leírás végét a "leiras-vege" tartalmú sor jelzi. Ezután a lehetséges irányok és az arra található helyszín azonosítója következik egy-egy sorban. Ezt a részt az "iranyok-vege" tartalmú sor zárja. A Labirintus induláskor olvassa be a kapott fájlból a kezdeti térképet, majd várjon kliensekre és adminisztrátorokra. A klienseknek legyen neve, melyet belépéskor kell megadniuk. A kliensek belépéskor a labirintus egy tetszőleges pontjára kerüljenek. A labirintus írja ki a helyszín leírását a kliensnek. A kliensek és az adminisztrátorok a parancsaikat soronként írják be (kivétel: az adminisztrátorok uj-helyszin parancsa többsoros.) A kliens a következő parancsokat adhatja ki: nez A kliens kapja meg újra a helyszín leírását. merre A kliens kapja meg, melyik irányokba lehet távozni a helyszínről. eszak del kelet nyugat fel le A kliens lépjen át a szomszédos helyszínre, és kapja meg az új helyszín leírását. Ha abba az irányba nem lehet lépni, kapjon hibaüzenetet. kilep A Labirintus bontsa a kapcsolatot a klienssel. (ismeretlen parancs) Ha a kliens nem felismerhető parancsot küld, kapjon hibaüzenetet. Az adminisztrátor parancskészlete a következőket tartalmazza: helyszinek A Labirintus listázza ki a helyszínek azonosítóit, és a leírásuk első sorát. Példa: 1 Egy kökörcsines réten állsz. 2 Egy fenyves melletti úton haladsz. 3 Egy régészeti ásatáshoz érkeztél. nez 1 Kapja meg az 1 azonosítójú helyszín teljes leírását. Ha nem létezik a helyszín, kapjon hibaüzenetet. uj-leiras 1 Új leírás a helyszínhez. Több sort is tartalmazhat. leiras-vege Változtassa meg a helyszín leírását. Ha nem létezik a helyszín, kapjon hibaüzenetet. uj-helyszin 1 Új helyszín hozzáadása. Leírással együtt. leiras-vege Adjon hozzá új helyszínt. Ha már létezik a helyszín azonosítója, kapjon hibaüzenetet. merre 1 Kapja meg, melyik irányokba lehet távozni a helyszínről. Ha nem létezik a helyszín, kapjon hibaüzenetet. uj-irany 1 eszak 2 Új távozási irány felvétele. Ha nem létezik valamelyik helyszín, vagy az irány nem egyike a lehetséges irányoknak, kapjon hibaüzenetet. irany-torlese 1 eszak Helyszínről távozási irány törlése. Hibás paraméterek esetén itt is érkezzen hibaüzenet. kilep A Labirintus bontsa a kapcsolatot az adminisztrátorral. A kliensek és adminisztrátorok számára egyaránt legyen elérhető az "i" parancs, amely hajtsa végre ismét az utoljára kiadott parancsot. Ha még nem volt kiadott parancs, adjon hibaüzenetet. ---------------------------------------------- A program a következő részekkel bővíthető az érdemjegy növelése céljából. A bővítések tetszőleges kombinációban valósíthatóak meg. 1. A kliens "nez" parancsa listázza ki a klienssel azonos helyszínen tartózkodó más kliensek nevét is. Példa: Egy kökörcsines réten állsz. Itt tartózkodik még: Kliens1 Kliens2 Ha egy kliens átlép egy másik helyszínre, a kiinduló és a célhelyszínen tartózkodó kliensek kapjanak erről üzenetet. Példa: Kliens1 távozott a helyszínről. Kliens1 megérkezett a helyszínre. 2. A labirintusban véletlenszerű időközönként és helyen keletkezzenek aranyak. Egy helyszín tetszőleges számú aranyat tartalmazhat. A "nez" parancs mutassa meg, hány arany található a helyszínen. Példa: Egy kökörcsines réten állsz. Itt található 3 arany. A kliens a "aranyat-felvesz" parancs hatására vegyen fel egy aranyat. Egy kliensnél egyszerre legfeljebb egy arany lehet. Azon a helyszínen, ahonnan a kliens indult, legyen megtalálható a kliens kincsesládája. (Több kliens kincsesládája is lehet ugyanazon a helyszínen.) A "nez" parancs mutassa meg, ha a helyszínen található a kliens kincsesládája. Példa: Egy kökörcsines réten állsz. Itt található 2 arany. Itt található a kincsesládád. Ha a kliens a kincsesládájának helyszínén tartózkodik, a "tesz arany lada" parancs hatására a kliens tegye le az aranyat a kincsesládába. A kliens az "eredmeny" (tetszőleges helyszínen kiadható) parancs hatására kapja meg, hány arany található a ládájában. A ládádban 0 arany található. 3. Az adminisztrátor rendelkezzen a következő paranccsal. uj-leny Szellem 5 Húúú Ennek hatására keletkezzen a labirintusnak egy új lakója. A lény a paraméterként megadott számú (itt 5) másodpercenként lépjen át új helyszínre. A másodpercek számától a sor végéig tartó szöveg a lény üzenete. Ezt véletlenszerű időközönként kapják meg azok a kliensek, akik a lénnyel egy helyszínen tartózkodnak. Példa: Szellem azt mondja: "Húúú". Az 1. részfeladat a kliensekhez hasonlóan írja ki a "nez" parancs hatására a helyszínen tartózkodó lényeket. A 2. részfeladathoz kapcsolódóan: a lény véletlenszerűen adjon vagy vegyen el aranyat a helyszínen tartózkodó játékosoktól. ------------------------------------- Ha a feladat valamelyik részlete nem világos (második olvasásra sem), akkor írjátok meg a kérdést levélben, vagy tegyétek fel élőszóban a gyakorlaton.