/* * Mäluga mängimise server * Autorid: Paavo Viilup, Margo Pohlak, Kaupo Toom * (C)2001 * Kui kasutad koodi ilma autoreid mainimata, saad lõuga :-) */ import java.io.*; import java.net.*; import java.util.*; import java.util.Vector; //siin on kõik siililegi selge, kaasatakse kõik vajalikud paketid import java.util.Date; import java.applet.Applet; /** *Main-meetod loob serveri värati "ss" ning vektori "uhendused" ühenduste hoidmiseks. *Seejärel asutakse väratit kuulama ning iga uue ühenduse korral käivitatakse lõim "MaluLoim" */ public class Malumang{ public static void main(String argumendid[]) throws IOException{ ServerSocket ss=new ServerSocket(3001); Vector uhendused=new Vector(); System.out.println("Valmis yhenduste loomiseks!"); while(true){ Socket sc=ss.accept(); uhendused.add(sc); new MaluLoim(sc, uhendused); } } } /** *Siin tehakse ära põhiline töö. Alustuseks luuakse vajalikud muutujad ning vahendid. *Siis pannakse konstruktoris vajalikud komponendid (värat ja vektor) paika. */ class MaluLoim extends Thread{ Vector v; Socket sc; String nimi, rida, punkte; /**Muutuja tsüklitele.*/int i; /**Küsimuse ja vastuse asukoht vastavates baasides.*/int index; /**Kasutatakse kasutaja konto kontrollimiseks. "0" ei ole kontot, "1" konto olemas"*/int onolemas; /**Kasutaja punktid. Saadakse failist.*/int skoor; /**Kasutatakse juhusliku küsimuse valimiseks*/Random rand=new Random(); /**Konstruktor, kus pannakse paika vajalikud komponendid ning käivitatakse "run" meetod*/public MaluLoim(Socket uus_sc, Vector uus_v){ v=uus_v; sc=uus_sc; start(); } public void run(){ try{ BufferedReader sisse=new BufferedReader(new InputStreamReader(sc.getInputStream())); // sisenevate sümbolite lugeja PrintWriter vestleja=new PrintWriter(sc.getOutputStream(), true); // kasutajale sümbolite saatmime vestleja.println("Sisesta nimi: "); nimi=sisse.readLine(); // loetakse nimi onolemas=0; //eeldatakse, et sellist kasutajat ei ole File fail=new File("."); String[] failid=fail.list(); // jooksva kataloogi failidest luuakse massiiv LinkedList faililist=new LinkedList(); for(i=0;inew Date().getTime()){ // tsükkel kestab kuni loppajaga määratud aeg on käes if(sisse.ready()){ // kui sisse on midagi tulnud, siis String vastus=sisse.readLine(); // loetakse rida if(vastus.startsWith(".punktid")){ // kui rida on selline, siis kuvatakse kasutaja punktide arv BufferedReader failist=new BufferedReader(new FileReader(nimi+File.separator+"punktid.dat")); punkte=failist.readLine(); failist.close(); vestleja.println("Sul on hetkel "+punkte+" punkti."); }else if(vastus.startsWith(".lopp")){ // kui rida selline, siis ühendus katkestatakse sc.close(); v.remove(sc); } }else{ aeg=new Date().getTime(); // ...muidu kontrollime aega } } // Thread.sleep(5000); index=rand.nextInt(kysimused.size()); // valitakse küsimus vestleja.println("Küsimus: "+kysimused.get(index)); loppaeg=new Date().getTime()+10000; // nüüd on tsükli ajaks 10 sekundit aeg=new Date().getTime(); int kontroll=0; while (loppaeg>new Date().getTime()){ if(sisse.ready()){ String vastus=sisse.readLine(); if(vastus.equals(vastused.get(index))){ // kui vastus on sama, mis realt loeti, siis... BufferedReader failist=new BufferedReader(new FileReader(nimi+File.separator+"punktid.dat")); punkte=failist.readLine(); failist.close(); skoor=Integer.parseInt(punkte); // loetakse failist, liidetakse sellele 2 juurde ja kirjutatakse uuesti faili skoor=skoor+2; PrintWriter punktid=new PrintWriter(new FileWriter(nimi+File.separator+"punktid.dat")); punktid.println(skoor); punktid.close(); for(int i=0; inew Date().getTime()){ // jälle tsükkel if(sisse.ready()){ String vastus=sisse.readLine(); if(vastus.equals(vastused.get(index))){ BufferedReader failist=new BufferedReader(new FileReader(nimi+File.separator+"punktid.dat")); punkte=failist.readLine(); failist.close(); skoor=Integer.parseInt(punkte); skoor=skoor+1; PrintWriter punktid=new PrintWriter(new FileWriter(nimi+File.separator+"punktid.dat")); punktid.println(skoor); punktid.close(); for(int i=0; i