//Autorid: Rain Koor, Karel Lember, Jaanus Oks, Ants Rehe //Järgnev osa impordib programmi tööks vajalikud Java paketid. import java.applet.Applet; import java.awt.*; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.*; import java.net.*; public class ruum extends Applet implements ActionListener{ //Siin me defineerime pärast layoutis kasutatavad tekstiväljad jms. TextField tekst=new TextField("kirjuta siia");//tekstiväli, kuhu trükitakse TextField nimi=new TextField("nimi");// nimeväli TextArea jutt=new TextArea("",34,100, TextArea.SCROLLBARS_VERTICAL_ONLY);//eemaldab horisontaalse kerimisriba TextArea inf=new TextArea("",3,1, TextArea.SCROLLBARS_VERTICAL_ONLY); Socket sc; PrintWriter valja; //Järgnev lõik tegeleb eelpoolkirjeldatud väljade paigutamisega ekraanile. Lisaks pannakse // textfieldi tekst actionlistener, mille ülesandeks on "kuulata" enteri vajutusi. public ruum(){ setLayout(new BorderLayout()); Panel p1=new Panel(new BorderLayout()); p1.add(tekst, BorderLayout.NORTH); p1.add(nimi, BorderLayout.WEST); p1.add(inf, BorderLayout.CENTER); add(p1, BorderLayout.SOUTH); tekst.addActionListener(this); add(jutt, BorderLayout.NORTH); inf.setText("Nagu sa oled kindlasti juba taibanud tibuke, on see jutukas. Käskude loetelu saamiseks trüki .h"); inf.setEnabled(false);//võtab kasutajalt võimaluse ise kirjutada TextAreasse inf. //Järgnevalt loome ühenduse serveriga. try{ sc=new Socket("ws11.hk.tpu.ee", 3001);// serveri aadress ja port new ruumiloim(sc, jutt); valja=new PrintWriter(sc.getOutputStream(), true); }catch(Exception probleem){// Juhuks, kui tekib probleem serverisse ühendamisel. System.out.println(probleem);// trükib dos-i aknas, milles siis ikkagi asi. } } //Kui toimub vajutus enter klahvile, siis hakatakse kontrollima, ega lause juhuslikult ei //lõpe ega alga mõne siinkirjeldatud tähekombinatsiooniga. Kui see on nii, on suure tõenäosusega //tegu mingisuguse käsuga, millele meie jutuka klientprogramm hakkab reageerima. public void actionPerformed(ActionEvent e){ nimi.setEnabled(false);// Teeb nimevälja mittemuudetavaks(Peale seda, kui sa oled oma esimese lause teele saatnud sa enam nime muuta ei saa). if(tekst.getText().endsWith(".q")) { valja.println(nimi.getText()+(" väljus")); System.exit(0);//Selle käsu puhul pannakse klientprogramm kinni } else if(tekst.getText().endsWith(".nr"))//üks väheseid käske, mis on loodud suhtlema { //mh. ka serveriga(saadab serverisse teksti, mille too ära tunneb). tekst.setText(""); valja.println(".nr"); } else if(tekst.getText().endsWith(".h")) { tekst.setText(""); inf.setText("Praegu olemasolevad käsud on .q(väljumine) .l(laulmine) .nr(näitab, palju on parajasti rahvast) .h(abi ehk siis see teade) .e(näitab emotikuid) ja .a(autorid)"); } else if(tekst.getText().endsWith(".e")) { tekst.setText(""); inf.setText("Praegused emotikud on :) - naeratus :( - mossitus :H - irvitus :O - haigutus ;) - silmapilgutus :P - keelenäitamine oO( - mõtisklemine 8) - imestamine :} - (muigamine)"); } else if(tekst.getText().endsWith(".a")) { tekst.setText(""); inf.setText("Selle jutuka autorid on: Rain Koor, Karel Lember, Jaanus Oks ja Ants Rehe."); } else if(tekst.getText().startsWith(".l")) { valja.println(nimi.getText()+(" laulab täiest kõrist: Surnukirstul viisteist meest, hoirassa ja pudel rummi!")); tekst.setText(""); inf.setText("Sa laulad valjusti ja valesti üht lugu, mida teab iga piraadihuviline"); } else if(tekst.getText().endsWith(":)")) { valja.println(nimi.getText()+(" naeratab: ")+(tekst.getText())); tekst.setText(""); inf.setText("Sa naeratad"); } else if(tekst.getText().endsWith(":(")) { valja.println(nimi.getText()+(" mossitab: ")+(tekst.getText())); tekst.setText(""); inf.setText("Sa mossitad"); } else if(tekst.getText().endsWith(":H")) { valja.println(nimi.getText()+(" irvitab: ")+(tekst.getText())); tekst.setText(""); inf.setText("Sa irvitad"); } else if(tekst.getText().endsWith(":}")) { valja.println(nimi.getText()+(" muigab totakalt: ")+(tekst.getText())); tekst.setText(""); inf.setText("Sa muigad nagu nõdrameelne emis"); } else if(tekst.getText().endsWith(":O")) { valja.println(nimi.getText()+(" haigutab: ")+(tekst.getText())); tekst.setText(""); inf.setText("Sa haigutad nagu krokodill"); } else if(tekst.getText().endsWith(";)")) { valja.println(nimi.getText()+(" pilgutab kavalalt silma: ")+(tekst.getText())); tekst.setText(""); inf.setText("Sa pilgutad kavalalt silma"); } else if(tekst.getText().endsWith(":P")) { valja.println(nimi.getText()+(" näitab keelt: ")+(tekst.getText())); tekst.setText(""); inf.setText("Sa võtad keele suust välja ja näitad seda rahvale"); } else if(tekst.getText().startsWith("oO(")) { valja.println(nimi.getText()+(" mõtiskleb endamisi: ")+(tekst.getText())+(")")); tekst.setText(""); inf.setText("Sa mõtiskled endamisi"); } else if(tekst.getText().endsWith("8)")) { valja.println(nimi.getText()+(" ajab silmad punni: ")+(tekst.getText())); tekst.setText(""); inf.setText("Sa ajad silmad punni ja vaatad imestunult teisi"); } else if(tekst.getText().endsWith(":E~~")) { valja.println(nimi.getText()+(" lükib näpud kurku ja rooberdab: ")+(tekst.getText())); tekst.setText(""); inf.setText("Sa ajad näpud kurku ja rooberdad vägevalt"); } else if(tekst.getText().endsWith(":>")) { valja.println(nimi.getText()+(" itsitab: ")+(tekst.getText())); tekst.setText(""); inf.setText("Sa itsitad hullumeelselt"); } else { valja.println(nimi.getText()+(": ")+tekst.getText());//Serverile saadetav tekst koostatakse tüüpiliselt niimoodi: nimeväljast saadav tekst + tekstiväljast saadav tekst. tekst.setText("");//Selles väljas sisaldunud tekst kustutatakse } } //Järgnev osa puudutab põhiliselt meie klientprogrammi kasutajaliidese väljanägemist //ja käitumist public static void main(String argumendid[]){ Frame f=new Frame("Tere tulemast Luupainaja jutukasse surelik!"); f.add(new ruum()); f.setSize(500,645); f.setVisible(true); f.setResizable(false); f.addWindowListener( new WindowAdapter(){ public void windowClosing(WindowEvent e){System.exit(0);}//See võimaldab klientprogrammi ka ristikesest kinni panna. } ); } } //Järgnev osa tegeleb põhiliselt serveriga suhtlemisega, täpsemalt teksti vastuvõtuga //serverist ja selle näitamisega TextAreas "jutt". class ruumiloim extends Thread{ Socket sc; TextArea ta; public ruumiloim(Socket sc1, TextArea ta1){ sc=sc1; ta=ta1; start(); } public void run(){ try{ BufferedReader sisse=new BufferedReader( new InputStreamReader(sc.getInputStream()) ); String rida=sisse.readLine(); while(rida!=null){ //rida võrdub nulliga juhul, kui katkeb ühendus serveriga ta.setText(ta.getText()+"\n"+rida); ta.setCaretPosition(ta.getText().length());//Teeb elu selle võrra mugavamaks, et hoiab //kujuteldavat kursorit tekstiväljal "jutt" alati lõpus (ei pea ise kerima). rida=sisse.readLine(); } } catch(Exception viga){ //Juhuks, kui server nö. "ära kaob" System.out.println(viga); //Trükib dos-i aknas, milles asi. } } }