import java.io.*; import java.net.*; import java.util.*; public class JututoaKasutaja extends Thread{ PrintWriter vorku; Socket sc; String kasutajanimi; Map kasutajad; boolean veel=true; public JututoaKasutaja(Socket sc, Map kasutajad){ this.sc=sc; this.kasutajad=kasutajad; start(); //käivitab run-i siis kui serveril aega on } void trykiKoigile(String tekst){ for(Iterator it=kasutajad.values().iterator(); it.hasNext();){ JututoaKasutaja k=it.next(); k.vorku.println(kasutajanimi+": "+tekst); } } void tootleKask(String rida){ if(rida.startsWith(".ots")){ veel=false; } if(rida.startsWith(".era ")){ String[] m=rida.split(" "); if(m.length<=2){ vorku.println("Vigane käsk"); return; } JututoaKasutaja sihtkasutaja=kasutajad.get(m[1]); if(sihtkasutaja==null){ vorku.println("kasutajat "+m[1]+" ei leitud"); return; } String teade=rida.substring(rida.indexOf(" ", 5)+1); //alates kohast, mis järgneb peale viiendat tähte //olevale esimesele tühikule sihtkasutaja.vorku.println(kasutajanimi+" teatab sulle "+teade); vorku.println("Teatasid kasutajale "+m[1]+" "+teade); } if(rida.startsWith(".eemalda ")){ String[] m=rida.split(" "); if(m.length!=2){ vorku.println("Vigane käsk"); return; } JututoaKasutaja eemaldatav=kasutajad.get(m[1]); if(eemaldatav==null){ vorku.println("Kasutajat "+m[1]+" ei leitud"); return; } eemaldatav.vorku.println("Sind eemaldab: "+kasutajanimi); vorku.println("Eemaldasid kasutaja "+m[1]); kasutajad.remove(m[1]); eemaldatav.veel=false; try{ eemaldatav.sc.close(); }catch(Exception ex){System.out.println(ex);} } } void tootleRida(String rida){ if(rida.startsWith(".")){ tootleKask(rida); } else { trykiKoigile(rida); } } boolean kasKasutajanimiSobib(String knimi){ if(kasutajad.containsKey(knimi)){ vorku.println("Nimi "+knimi+" juba olemas"); return false; } if(knimi.indexOf(" ")!=-1){ vorku.println("Nimes tühik"); return false; } return true; } public void run(){ try{ BufferedReader vorgust=new BufferedReader( new InputStreamReader(sc.getInputStream())); vorku=new PrintWriter(sc.getOutputStream(), true); vorku.println("Palun kasutajanimi:"); kasutajanimi=vorgust.readLine(); if(!kasKasutajanimiSobib(kasutajanimi)){ sc.close(); return; } kasutajad.put(kasutajanimi, this); while(veel){ String rida=vorgust.readLine(); tootleRida(rida); } sc.close(); }catch(Exception ex){ System.out.println(ex); } kasutajad.remove(this.kasutajanimi); } }