import java.io.*; import java.net.*; import java.util.*; public class Syda extends Thread{ boolean veel=true; int ruumipikkus=100; int ruumilaius=300; private static Syda ise=null; private Syda(){} static Syda kysiSyda(){ if(ise==null){ ise=new Syda(); ise.start(); } return ise; } Map kasutajad=Collections.synchronizedMap(new Hashtable()); public boolean kasKasutajaOlemas(String knimi){ return kasutajad.containsKey(knimi); } public boolean lisaKasutaja(Kasutaja k){ if(k.kysiKasutajaNimi().contains(" ")){return false;} if(!kasKasutajaOlemas(k.kysiKasutajaNimi())){ kasutajad.put(k.kysiKasutajaNimi(), k); return true; } return false; } boolean kasTohibMinna(int sihtx, int sihty){ if(sihtx<0)return false; if(sihty<0)return false; if(sihtx>ruumipikkus)return false; if(sihty>ruumilaius)return false; return true; } void eemaldaKasutaja(String k){ kasutajad.remove(k); System.out.println("lahkus "+k); trykiKoigileTeade(".lahkus "+k); } void trykiKoigileTeade(String teade){ try{ Iterator kd=kasutajad.values().iterator(); while(kd.hasNext()){ Kasutaja k=kd.next(); k.valja.write(teade+"\n"); } }catch(Exception ex){ System.out.println("Probleem: "+ex.getMessage()); } } void trykiKasutajaleAsukohad(String kellele) { Kasutaja k0=kasutajad.get(kellele); try{ Iterator kd=kasutajad.values().iterator(); while(kd.hasNext()){ Kasutaja k=kd.next(); k0.valja.write(".asukoht "+k.kysiKasutajaNimi()+" "+ k.kysiX()+" "+k.kysiY()+" "+k.kysiZ()+ " "+k.kysiNurk()+"\n"); } k0.valja.flush(); }catch(SocketException se){ eemaldaKasutaja(k0.kysiKasutajaNimi()); }catch(Exception ex){ ex.printStackTrace(); } } /** * Trükib kõikidele kasutajatele kõikide kasutajate asukohad */ void trykiKoikAsukohad(){ Iterator knimed=kasutajad.keySet().iterator(); while(knimed.hasNext()){ String knimi=knimed.next(); trykiKasutajaleAsukohad(knimi); } } void liigutaKoikiKasutajaid(){ Iterator kd=kasutajad.values().iterator(); while(kd.hasNext()){ Kasutaja k=kd.next(); k.samm(); } } void reageeriKasutajateKaskudele(){ try{ Iterator kd=kasutajad.values().iterator(); while(kd.hasNext()){ Kasutaja k=kd.next(); if(k.sisse.ready()){ String kask=k.sisse.readLine(); boolean kaskTehtud=false; if(kask.equals(".vasakule")){ k.vasakule(); kaskTehtud=true; } if(kask.equals(".paremale")){ k.paremale(); kaskTehtud=true; } if(kask.equals(".yles")){ k.yles(); kaskTehtud=true; } if(kask.equals(".alla")){ k.alla(); kaskTehtud=true; } if(kask.equals(".ots")){ eemaldaKasutaja(k.kysiKasutajaNimi()); k.valja.close(); kaskTehtud=true; } if(!kaskTehtud){ k.valja.write("Tundmatu käsk: "+kask+"\n"); k.valja.flush(); } } } }catch(Exception ex){ ex.printStackTrace(); } } public void run(){ while(veel){ try{ Thread.sleep(1000); trykiKoikAsukohad(); liigutaKoikiKasutajaid(); reageeriKasutajateKaskudele(); }catch(Exception ex){} } } }