//uuendatud variant koos automaatse privamisega import java.util.*; import java.awt.*; import java.io.*; import java.net.*; import java.awt.event.*; public class JSClient extends Panel implements ActionListener, Runnable { //GLOBAALSED MUUTUJAD boolean veel=true; Socket pistik; PrintWriter output; BufferedReader input; Button connect=new Button("Logi sisse"); Button disconnect=new Button("Logi välja"); Button send=new Button("Saada"); TextField message=new TextField("",30); TextField server=new TextField("localhost",15); TextField proxy=new TextField("",15); TextField sport=new TextField("22222",5); TextField pport=new TextField("",5); TextField name=new TextField("",8); TextArea jutt=new TextArea(20,20); TextArea kasutajad=new TextArea(10,20); Checkbox proxyTrue=new Checkbox(); Checkbox priva=new Checkbox(); Choice valik=new Choice(); Label l1=new Label("Server:"); Label l2=new Label("port:"); Label l2i=new Label("port:"); Label l3=new Label("Proxy:"); Label l4=new Label("KASUTAJAD : "); Label l5=new Label("Nimi:"); Label l6=new Label("Priva: "); public JSClient(){ //KONSTRUKTOR //KUJUNDUS ALGAB setLayout(new BorderLayout()); Panel ylemine=new Panel(new BorderLayout()); Panel ylemineLF=new Panel(); Panel ylemineRG=new Panel(); Panel kesk=new Panel(new BorderLayout()); Panel keskRG=new Panel(new BorderLayout()); Panel keskRGAL=new Panel(new BorderLayout()); Panel alumine=new Panel(new BorderLayout()); Panel alumineYL=new Panel(new BorderLayout()); Panel alumineAL=new Panel(new FlowLayout()); //ülemine osa ylemineLF.add(l1); ylemineLF.add(server); ylemineLF.add(l2); ylemineLF.add(sport); ylemineRG.add(proxyTrue); ylemineRG.add(l3); ylemineRG.add(proxy); ylemineRG.add(l2i); ylemineRG.add(pport); ylemine.add(ylemineLF, BorderLayout.WEST); ylemine.add(ylemineRG, BorderLayout.EAST); //keskmine osa keskRG.add(l4, BorderLayout.NORTH); keskRG.add(kasutajad, BorderLayout.CENTER); keskRGAL.add(l6, BorderLayout.WEST); keskRGAL.add(priva, BorderLayout.CENTER); keskRGAL.add(valik, BorderLayout.EAST); valik.add("################"); keskRG.add(keskRGAL, BorderLayout.SOUTH); kesk.add(jutt, BorderLayout.CENTER); kesk.add(keskRG, BorderLayout.EAST); //alumine osa alumineYL.add(message); alumineYL.add(send, BorderLayout.EAST); alumineAL.add(l5); alumineAL.add(name); alumineAL.add(connect); alumineAL.add(disconnect); alumine.add(alumineYL, BorderLayout.NORTH); alumine.add(alumineAL, BorderLayout.SOUTH); //kõik kokku add(ylemine, BorderLayout.NORTH); add(kesk, BorderLayout.CENTER); add(alumine, BorderLayout.SOUTH); //KUJUNDUS LÕPEB //ELEMENTIDE OMADUSTE SEADMINE ALGAB connect.addActionListener(this); disconnect.addActionListener(this); send.addActionListener(this); message.addActionListener(this); disconnect.setEnabled(false); message.setEnabled(false); send.setEnabled(false); jutt.setEditable(false); kasutajad.setEditable(false); valik.setEnabled(false); priva.setEnabled(false); //ELEMENTIDE OMADUSTE SEADMINE LÕPEB } //REAGEERIMINE NUPUVAJUTUSELE public void actionPerformed(ActionEvent e){ String action=e.getActionCommand(); if(action.compareTo("Logi välja")==0) { logout(); } else if(action.compareTo("Logi sisse")==0) { login(); } else if(action.compareTo("Saada")==0) { saada(); }else{saada();} } //ÜHENDAMINE public void login() { veel=true; jutt.append("Proovin ühenduda ...\n"); //hetkel mõtetu, hiljem üle http lahendatud kasutajate kontode jaoks vajalik if(proxyTrue.getState()) { jutt.append("Kasutan proxyt\n"); System.getProperties().put("proxySet", "true"); System.getProperties().put("proxyHost", proxy.getText()); System.getProperties().put("proxyPort", pport.getText()); } ///////////////////////////////////////////////// int sp=Integer.parseInt(sport.getText()); try{pistik=new Socket(server.getText(),sp);} catch(UnknownHostException u){jutt.append("Viga serveri nimes: "+u+"\n");} catch(IOException i){jutt.append("Viga ühenduse loomisel:"+i+"\n");} if(pistik.isConnected()) { message.setEnabled(true); send.setEnabled(true); disconnect.setEnabled(true); connect.setEnabled(false); valik.setEnabled(true); priva.setEnabled(true); jutt.append("Ühendus olemas!\n"); try { output=new PrintWriter(pistik.getOutputStream(),true); } catch(IOException e){} output.println("#klient"); output.println(name.getText()); new l6im(); } } //ÜHENDUSE KATKESTAMINE public void logout() { jutt.append("Üritan ühendust sulgeda...\n"); output.println("#v2lju"); try{ veel=false; pistik.close(); } catch(IOException e){} if(pistik.isClosed()) { jutt.append("Ühendus suletud!\n"); kasutajad.setText(""); connect.setEnabled(true); disconnect.setEnabled(false); send.setEnabled(false); message.setEnabled(false); valik.removeAll(); valik.setEnabled(false); priva.setEnabled(false); } } //TEKSTI SAATMINE public void saada() { if(priva.getState()) { output.println(".ytle "+valik.getSelectedItem()+" "+message.getText()); }else{ output.println(message.getText()); } message.setText(""); } public void run(){} //MAIN ON SIIN//////////////////////////// public static void main(String arg[]){ Frame f=new Frame("JSClient"); f.add(new JSClient()); f.setSize(750,480); f.setVisible(true); f.addWindowListener(new Raamikuular()); } ////////////////////////////////////////// class l6im extends Thread { public l6im() //lõime konstruktor { new Thread(this).start(); } public void run() { String rida=""; try{input=new BufferedReader(new InputStreamReader(pistik.getInputStream()));} catch(IOException e){jutt.append("Viga sissetulevas andmevoos: "+e+"\n");} while(veel) { try { if(!pistik.isClosed()){rida=(input.readLine()+"\n");} //siia kontrollid spets funktsioonide jaoks //kas on spets funkts vastus if(rida.startsWith("#")) { //Spets funkts vastused if(rida.startsWith("#K")) { valik.removeAll(); kasutajad.setText(""); StringTokenizer st=new StringTokenizer(rida.substring(2,rida.length()-1),";"); while(st.hasMoreTokens()) { String kasnimi=st.nextToken()+"\n"; kasutajad.append(kasnimi); valik.add(kasnimi.substring(0,kasnimi.length()-1)); } } if(rida.startsWith("#tapa")) { jutt.append("Kicked by server !!!\n"); logout(); } //tavaline teade }else { if(rida!=null)jutt.append(rida); } } catch(IOException e){} } } } }