All pastes #261277 Raw Edit

Anonymous

public java v1 · immutable
#261277 ·published 2006-11-29 02:04 UTC
rendered paste body
/*import java.net.DatagramPacket;import java.net.DatagramSocket;*/import java.net.*;import java.util.List;import java.util.StringTokenizer;import java.util.Iterator;import java.lang.Integer;import java.io.*;//TODO implementar concorrencia//TODO averiguar heart-beat ou keepAlivepublic class Server {	int port;	InetAddress group;	String room;	List<InetAddress> clients;		Server(int port, InetAddress group, String room){		this.port = port;		this.group = group;		this.room = room;	}		int Port(){		return this.port;	}	InetAddress Group(){		return this.group;	}	String Room(){		return this.room;	}	List<InetAddress> Clients(){		return this.clients;	}		void addClient(InetAddress address){		this.clients.add(address);	}		public static void main(String[] args) throws Exception {				if( args.length != 3 ) {			System.err.println("usage: java Server port multicast_group room") ;			System.exit(0) ;		}				int port = Integer.parseInt( args[0]) ;		InetAddress group = InetAddress.getByName( args[1] ) ;		String room = args[2];				if( !group.isMulticastAddress() ) {			System.err.println("Multicast address required...") ;			System.exit(0) ;					}				Server myServer = new Server(port, group, room);		MulticastSocket ms = new MulticastSocket(port);		ms.joinGroup(group);				for(;;) { //ciclo infinito de atendimento...			//recebemos os pedidos			DatagramPacket p = new DatagramPacket(new byte[65536], 65336);			ms.receive(p);			//obter o conteudo da mensagem recebida...			byte[] echoRequestData = p.getData();			int echoRequestLength = p.getLength();						String request = new String(p.getData(),0, p.getLength());			StringTokenizer st = new StringTokenizer(request, " ");						Integer answerPort;			Socket s;			OutputStream os;			byte[] data;			switch((st.nextToken()).toCharArray()[0]){			case 'L': //envio a minha lista ao cliente 						data = myServer.Room().getBytes();						myDatagramPacket answerPacket = myDatagramPacket(data, data.length);						myDatagramSocket() answerSocket = new myDatagramSocket();						answerPacket.setAddress(p.getAddress());						answerPort = Integer.parseInt(st.nextToken());						answerPacket.setPort(answerPort);						answerSocket.send(answerPacket);												//s = new Socket(p.getAddress(), answerPort.intValue());						//os = s.getOutputStream();						//os.write(data);						break;									case 'J': //adicionar este cliente a minha sala							Iterator<InetAddress> it = myServer.Clients().iterator();							InetAddress address = p.getAddress();							while(it.hasNext()){								if(it.next().equals(address)){									//mandar msg ao cliente a dizer que ja existe									answerPort = Integer.parseInt(st.nextToken());									s = new Socket(p.getAddress(), answerPort.intValue());									os = s.getOutputStream();									data = "-1".getBytes();									os.write(data);									break;								}							}							myServer.addClient(p.getAddress());							//mandar msg ao cliente a dizer que foi adicionado							answerPort = Integer.parseInt(st.nextToken());							s = new Socket(p.getAddress(), answerPort.intValue());							os = s.getOutputStream();							data = "1".getBytes();							os.write(data);							//criar thread para atender o nosso cliente							break;					  			default: //mandar msg ao cliente com pedido invalido						answerPort = Integer.parseInt(st.nextToken());						s = new Socket(p.getAddress(), answerPort.intValue());						os = s.getOutputStream();						data = "-2".getBytes();						os.write(data);						break;			}			}	}}