001package csheets.ext.share.core; 002 003import java.io.IOException; 004import java.net.*; 005import java.util.*; 006import java.util.logging.*; 007 008/** 009 * Class that implements a server side of the discover through network 010 * 011 * @author Andre 012 * 013 */ 014public class ServerDiscover extends Observable implements Runnable { 015 /** Instance of server discover */ 016 private static ServerDiscover instance = null; 017 /** Port of the connection */ 018 private int port; 019 /** the observer class */ 020 private Observer observer; 021 022 /** 023 * Creates a new client discover 024 */ 025 private ServerDiscover() { 026 } 027 028 /** 029 * The instance of running server discover 030 * 031 * @return the instance of the class 032 */ 033 public static ServerDiscover getInstance() { 034 if (instance == null) { 035 instance = new ServerDiscover(); 036 } 037 return instance; 038 } 039 040 /** 041 * Broadcasts a message throw network 042 * 043 * @param port 044 * the port of the connection 045 * @param observer 046 * the observer class 047 */ 048 public void findClients(int port, Observer observer) { 049 this.port = port; 050 this.observer = observer; 051 addObserver(observer); 052 Thread thr = new Thread(getInstance()); 053 thr.start(); 054 } 055 056 /** 057 * Broadcasts a message throw network 058 * 059 * @exception IOException 060 * throws if a I/O exception occurs 061 */ 062 @SuppressWarnings("resource") 063 private void broadcast() throws IOException { 064 MulticastSocket serverSocket; 065 serverSocket = new MulticastSocket(9876); 066 067 byte[] receiveData = new byte[1024]; 068 byte[] sendData = new byte[1024]; 069 int i = 1; 070 while (i > 0) { 071 DatagramPacket receivePacket = new DatagramPacket(receiveData, 072 receiveData.length); 073 074 serverSocket.receive(receivePacket); 075 String testReceive = new String(receivePacket.getData()); 076 testReceive = Validate.removeMessage(testReceive); 077 078 if (testReceive.equals("send me connection")) { 079 InetAddress IPAddress = receivePacket.getAddress(); 080 int portPacket = receivePacket.getPort(); 081 082 int portSend = port; 083 084 String portConnect = portSend + ""; 085 int portLenght = portConnect.length(); 086 portConnect = portLenght + "-" + portSend; 087 088 sendData = portConnect.getBytes(); 089 DatagramPacket sendPacket = new DatagramPacket(sendData, 090 sendData.length, IPAddress, portPacket); 091 serverSocket.send(sendPacket); 092 } 093 } 094 // serverSocket.close(); 095 096 } 097 098 @Override 099 public void run() { 100 try { 101 addObserver(observer); 102 broadcast(); 103 } catch (IOException e) { 104 Logger.getLogger(ServerDiscover.class.getName()).log(Level.SEVERE, 105 null, e); 106 setChanged(); 107 notifyObservers(); 108 clearChanged(); 109 } 110 } 111}