//tale classe(thread) ha il compito di accettare richieste da parte di Master e di inoltrarle se possibile import java.io.*; import java.net.*; import java.util.*; public class SlaveAcceptMaster extends Thread{ private int querySlavePort; public static void main(String[] args){ //SlaveAcceptMaster sam = new SlaveAcceptMaster(10000); //sam.start(); } public SlaveAcceptMaster(int bp){ querySlavePort=bp; } public void run(){ byte[] data; byte[] buffer = new byte[65507]; DatagramPacket output; DatagramSocket ds=null; try{ Constants.prn("Accept-provo a connettermi su porta: " + querySlavePort); ds = new DatagramSocket(querySlavePort); Constants.prn("Accept synchro-ricevo datagram x richieste"); } catch (Exception e){ System.out.println("errore crezione socket per richieste: "+e); return; } int i=0; while (true){ try{ DatagramPacket input = new DatagramPacket(buffer, buffer.length); ds.receive(input); synchronized(this){ Constants.prn("Accept-Ho ricevuto richiesta da master: " + new String(input.getData(), 0, input.getLength())); if (ConstantsS.numRichiesteMaster < Constants.maxRichiesteMaster){ ConstantsS.numRichiesteMaster++; data = "ack".getBytes(); output = new DatagramPacket(data, data.length, input.getAddress(), input.getPort()); ds.send(output); String rich = new String(input.getData(), 0, input.getLength()); if (!ConstantsS.ackArrivato.contains(rich)){ ConstantsS.ackArrivato.addElement(rich); Constants.prn("Accept-faccio partire lo slaveexemaster con: " + rich + "-" + querySlavePort); SlaveExeMaster sem = new SlaveExeMaster(querySlavePort, input); ConstantsS.slaveLoad++; sem.start(); } } else{ data = "sono pieno".getBytes(); output = new DatagramPacket(data, data.length, input.getAddress(), input.getPort()); ds.send(output); } } }//try catch (Exception e){ System.out.println("Accept-errore uso socket per richieste: " + e); return; }//catch }//while }//run }//class