java chat z emonitokkami

0

Witam
mam na studiach jave nie moge sobie z nią poradzić. Mam Chat ale nie wiem jak dopisać aby chat był z emonitonkami i aby była możliwość komunikacji z innymmi użytkownikami na priv.

Serwer

import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
	
public class SerwerGUI extends JFrame{  

	//GUI
  	private JButton uruchom, zatrzymaj;
  	private JPanel panel;
  	private JTextField port;
  	private JTextArea komunikaty;
	
	//Serwer
	private int numerPortu = 2345;
	private boolean uruchomiony = false;
	private Vector<Polaczenie> klienci = new Vector<Polaczenie>();
	
	public SerwerGUI() {
      	super("Serwer");
      	setSize(350,300);
      	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      	setLayout(new BorderLayout());
      
		panel = new JPanel(new FlowLayout());
		komunikaty = new JTextArea();
		komunikaty.setLineWrap(true);
		komunikaty.setEditable(false);
		
		port = new JTextField((new Integer(numerPortu)).toString() ,8);
		uruchom = new JButton("Uruchom");
		zatrzymaj = new JButton("Zatrzymaj");
		zatrzymaj.setEnabled(false);
      	
      	ObslugaZdarzen obsluga = new ObslugaZdarzen();

		uruchom.addActionListener(obsluga);
		zatrzymaj.addActionListener(obsluga);
      	
      	panel.add(new JLabel("Port: "));
      	panel.add(port);
      	panel.add(uruchom);
      	panel.add(zatrzymaj);
      	
      	add(panel, BorderLayout.NORTH); 
      	add(new JScrollPane(komunikaty), BorderLayout.CENTER);
      	
   		setVisible(true); 
	}

	private class ObslugaZdarzen implements ActionListener {

		private Serwer srw;

		public void actionPerformed(ActionEvent e) {
			if (e.getActionCommand().equals("Uruchom")) {
				srw = new Serwer();
				srw.start();
				uruchomiony = true;
				uruchom.setEnabled(false);
				zatrzymaj.setEnabled(true);
				port.setEnabled(false);
				repaint();
			}			
			if (e.getActionCommand().equals("Zatrzymaj")){
				srw.kill();
				uruchomiony = false;
				zatrzymaj.setEnabled(false);
				uruchom.setEnabled(true);
				port.setEnabled(true);
				repaint();
			}
		}
    }

	private class Serwer extends Thread implements CzatProtokol{

		private ServerSocket server;

		public void kill(){
			try {
				server.close();
					for(Polaczenie klient: klienci){
						try {
							klient.wyjscie.println(LOGOUT_COMMAND + "Serwer przesta� dzia�a�!");
							klient.socket.close();
						}
						catch (IOException e) {
						}
					}
				wyswietlKomunikat("Wszystkie Po��czenia zosta�y zako�czone.\n");
			}
			catch (IOException e) {
			}
		}
		
		public void run(){
	
		  try {   
		      
		   server = new ServerSocket(new Integer(port.getText()));
		   wyswietlKomunikat("Serwer uruchomiony na porcie: " + port.getText() + "\n");
		
		   		while (uruchomiony) {  
		        	Socket socket = server.accept();
			    	wyswietlKomunikat("Nowe po��czenie.\n");
			    	new Polaczenie(socket).start();
		   		}   
		   }
		   catch (SocketException e){
		   }
		   catch (Exception e){
			  wyswietlKomunikat(e.toString());
		   } 
		   finally {
		   		try {
		   			if(server != null) server.close();
		   		}
		   		catch (IOException e){
			  		wyswietlKomunikat(e.toString());
		   		}
		   }
		   wyswietlKomunikat("Serwer zatrzymany.\n");	
		 }
	}
		
	private class Polaczenie extends Thread implements CzatProtokol{  
		
		   private BufferedReader wejscie;
		   private PrintWriter wyjscie;
		
		   private Socket socket;
		   private String nick;
		   
		   private boolean polaczony;
		   
		   public Polaczenie (Socket w) { 
				socket = w;
				polaczony = true;
				
				synchronized(klienci) {
			    	klienci.add(this);
 				}
 		   }
		
		   public void run() { 
	
		    try {  
				wejscie = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				wyjscie = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
		         
		          while (uruchomiony && polaczony){  
		         
		         	String lancuch = wejscie.readLine();
		         	
		         	if (lancuch.startsWith(POST_COMMAND)) {
		         		for(Polaczenie klient: klienci)
		            		klient.wyjscie.println(POST_COMMAND + "<" + nick + "> " + lancuch.substring(POST_COMMAND.length()));
		         	} 
		         	if (lancuch.startsWith(NICK_COMMAND)){
         				//sprawdzenie poprawno�ci nicka
         				
         				nick = lancuch.substring(NICK_COMMAND.length()).trim();
         				
         				if(nick.equals("null") || nick.trim().equals("")){
         					wyjscie.println(LOGIN_COMMAND + "Podaj poprawny nick!");
         					continue;
         				}
         				
         				boolean prawidlowy = true;
       					
       					for(Polaczenie klient: klienci){
        			    	if(klient.equals(this) && klient!=this) prawidlowy = false;
         				}  				
         					
         				if(!prawidlowy) {
         					wyjscie.println(LOGIN_COMMAND + "Taki nick ju� jest na czacie! Podaj inny.");
         					continue;
         				}
         				
         				StringBuilder lista = new StringBuilder();
         				
         				for(Polaczenie klient: klienci){
        			    	lista.append(klient.nick + ",");
        			    	klient.wyjscie.println(POST_COMMAND + "U�ytkownik " + nick + " do��czy� do czatu");
         				}
         				for(Polaczenie klient: klienci){
         					klient.wyjscie.println(NICKLIST_COMMAND + lista.toString());
         				}
         			}
     				if(lancuch.startsWith(LOGIN_COMMAND)){
						wyjscie.println(LOGIN_COMMAND + "Witaj na serwerze!\n");
     				}
					if(lancuch.startsWith(LOGOUT_COMMAND)){
						
						wyjscie.println(LOGOUT_COMMAND + "�egnaj.\n");
						
						synchronized(klienci) {
							klienci.remove(this);
						}
						StringBuilder lista = new StringBuilder();
						
	     				for(Polaczenie klient: klienci){
	     					lista.append(klient.nick + ",");
	        			    klient.wyjscie.println(POST_COMMAND + "U�ytkownik " + nick + " opu�ci� czat.");
	     				}
	     				for(Polaczenie klient: klienci){
							klient.wyjscie.println(NICKLIST_COMMAND + lista.toString());
						}			
	        			polaczony = false;
	
					}
		
		         }
				wyswietlKomunikat("Po��czenie zosta�o zako�czone.\n");
		      }
		      catch (Exception e) {
		      	System.out.println(e);
		      } 
			  finally {
			    try {
					wejscie.close();
					wyjscie.close();
					socket.close();
			    } 
			    catch(IOException e) {
			    } 
			  }
		   } 
		   	
		   public boolean equals(Polaczenie p){
		   	return (p.nick.equals(nick));
		   }

	}
	
	private void wyswietlKomunikat(String tekst){
		komunikaty.append(tekst);
		komunikaty.setCaretPosition(komunikaty.getDocument().getLength());
	}
	
	public static void main(String[] args ) {  
 
 		new SerwerGUI();
	}
	
}

Klient

import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;

public class KlientGUI extends JFrame{

	//GUI
  	private JButton polacz, rozlacz;
  	private JPanel panel;
  	private JTextField host, port, wiadomosc;
  	private JTextArea komunikaty;
  	private JList zalogowani;
	private DefaultListModel listaZalogowanych;
	
	//Klient
	private String nazwaSerwera = "localhost";
	private int numerPortu = 2345;
	private boolean polaczony = false;
	private Klient watekKlienta;


	public KlientGUI(){
		super("Klient");
		setSize(600,500);
      	//setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      	setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
      	setLayout(new BorderLayout());

		panel = new JPanel(new FlowLayout());
		komunikaty = new JTextArea();
		komunikaty.setLineWrap(true);
		komunikaty.setEditable(false);
		
		wiadomosc = new JTextField();
		
		host = new JTextField(nazwaSerwera ,12);
		port = new JTextField((new Integer(numerPortu)).toString() ,8);
		polacz = new JButton("Po��cz");
		rozlacz = new JButton("Roz��cz");
		rozlacz.setEnabled(false);
		
		listaZalogowanych = new DefaultListModel();
		zalogowani = new JList(listaZalogowanych);
		zalogowani.setFixedCellWidth(120);
		
      	ObslugaZdarzen obsluga = new ObslugaZdarzen();

		polacz.addActionListener(obsluga);
		rozlacz.addActionListener(obsluga);
		
		wiadomosc.addKeyListener(obsluga);
		
		addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){rozlacz.doClick();setVisible(false);System.exit(0);}});
		
      	panel.add(new JLabel("Serwer: "));
      	panel.add(host);
      	panel.add(new JLabel("Port: "));
      	panel.add(port);
      	panel.add(polacz);
      	panel.add(rozlacz);

      	add(panel, BorderLayout.NORTH); 
      	add(new JScrollPane(komunikaty), BorderLayout.CENTER);
      	add(new JScrollPane(zalogowani), BorderLayout.EAST);
      	add(wiadomosc, BorderLayout.SOUTH);
      	
   		setVisible(true); 

	}
	
	private class ObslugaZdarzen extends KeyAdapter implements ActionListener, CzatProtokol {

		public void actionPerformed(ActionEvent e) {
			if (e.getActionCommand().equals("Po��cz")) {
				wyswietlKomunikat("��cz� z: " + nazwaSerwera + " na porcie: " + numerPortu + "...");
				polaczony = true;
				polacz.setEnabled(false);
				rozlacz.setEnabled(true);
				host.setEnabled(false);
				port.setEnabled(false);
				watekKlienta = new Klient();
				watekKlienta.start();
				//repaint();
			}			
			if (e.getActionCommand().equals("Roz��cz")){
				watekKlienta.wyslij("",LOGOUT_COMMAND);
				polaczony = false;
				rozlacz.setEnabled(false);
				polacz.setEnabled(true);
				host.setEnabled(true);
				port.setEnabled(true);
				//repaint();
			}
		}
		
		public void keyReleased(KeyEvent e){
			if(e.getKeyCode() == 10) {
				watekKlienta.wyslij(wiadomosc.getText(), POST_COMMAND);
			}
		}
    }
	
	private class Klient extends Thread implements CzatProtokol{
		private Socket socket;
		private BufferedReader wejscie;
		private PrintWriter wyjscie;
		
		public void run(){
		  try {   
			socket = new Socket(host.getText(), new Integer(port.getText()));
		  	wyswietlKomunikat("Po��czono.");
	
			wejscie = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			wyjscie = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);

			wyslij("",LOGIN_COMMAND);
			
			String lancuch = null;
			
			while(polaczony){
				lancuch = wejscie.readLine();
				
				if(lancuch.startsWith(POST_COMMAND)){
					wyswietlKomunikat(lancuch.substring(POST_COMMAND.length()));
				}
				if(lancuch.startsWith(LOGIN_COMMAND)){
					wyswietlKomunikat(lancuch.substring(LOGIN_COMMAND.length()));
					
					String nick = JOptionPane.showInputDialog(null, "Podaj nick: ");
			
					wyslij(nick, NICK_COMMAND);
				}
				if(lancuch.startsWith(NICKLIST_COMMAND)){
					//Aktualizacja listy
					StringTokenizer uzytkownicy = new StringTokenizer(lancuch.substring(NICKLIST_COMMAND.length()),",");
					
					listaZalogowanych.clear();
					while(uzytkownicy.hasMoreTokens())
						listaZalogowanych.addElement(uzytkownicy.nextToken());
				}
				if(lancuch.startsWith(LOGOUT_COMMAND)){
					wyswietlKomunikat(lancuch.substring(LOGOUT_COMMAND.length()));
					listaZalogowanych.clear();
					polaczony = false;
					rozlacz.setEnabled(false);
					polacz.setEnabled(true);
					host.setEnabled(true);
					port.setEnabled(true);
				}
			}
		  }
		  catch (UnknownHostException e) {
		  	wyswietlKomunikat("B��d po��czenia!");
		  }
		  catch (IOException e) {
		  	wyswietlKomunikat(e.toString());
		  }
		  finally {
			 try {
				wejscie.close();
				wyjscie.close();
				socket.close();
			} 
			catch(IOException e) {
			} 
		 }
		}

	  public void wyslij(String tekst, String protokol) {
	  		wyjscie.println(protokol + tekst);
	  		wiadomosc.setText("");
	  }
	}
	
	private void wyswietlKomunikat(String tekst){
		komunikaty.append(tekst + "\n");
		komunikaty.setCaretPosition(komunikaty.getDocument().getLength());
	}

	public static void main (String[] args) {
		new KlientGUI();
	}
}
0

Sorry za OT, ale "emonitoki" [rotfl]

1 użytkowników online, w tym zalogowanych: 0, gości: 1