/*ta emot signal/pekare från KlientHandler */ import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.net.*; import java.io.*; public class Klient { private BufferedReader in; private DataOutputStream out; private Socket ksocket; private Klient denKlient; private boolean online=true; private KlientHandler handlare; private String cHost; public Klient(Socket socket, KlientHandler handlare){ //ta emot från KlientHandler och skapa Klienten denKlient=this; ksocket=socket; cHost=ksocket.getInetAddress().getHostAddress(); this.handlare=handlare; try{ //öppna inströmmen till Socket(klienten) och lägg det i en buffer in = new BufferedReader(new InputStreamReader(ksocket.getInputStream())); out = new DataOutputStream(ksocket.getOutputStream()); //starta lyssnaren för varje Klient KlientLyssnare lyssna = new KlientLyssnare(); lyssna.start(); }catch(IOException e){} } //som 3A, skickar meddelandet. protected void sendMessage(String message){ try{ if(message.length()>0){ out.writeBytes(message+"\n"); } }catch(IOException ioe){ System.out.println("Server did not listen to message!"); } }//sendMessage //viktigt att stänga av i rätt ordning alltid in & utströmmarna före Socket public void setOffline(){ try{ in.close(); out.close(); ksocket.close(); }catch(IOException e){} online=false; handlare.taBortKlient(denKlient); } //lyssnaren som skickar signalen till KlientHandle.java som "broadcastar" till varje klient public class KlientLyssnare extends Thread { private String line=""; //run metoden startas inte av denna klass. public void run(){ while(online){ try{ sleep(1000); //om inget är inläst! if((line=in.readLine())!=null){ handlare.broadcast(cHost+" : "+line ); } else setOffline(); }catch(InterruptedException e){System.err.println(e);} catch(IOException ioe){ setOffline(); } }//while }//run }//KlientLyssnare }//Klient