diff --git a/ch.psi.fda.fdaq/src/main/java/ch/psi/fda/fdaq/Fdaq.java b/ch.psi.fda.fdaq/src/main/java/ch/psi/fda/fdaq/Fdaq.java index 2e239ae..5b83c65 100644 --- a/ch.psi.fda.fdaq/src/main/java/ch/psi/fda/fdaq/Fdaq.java +++ b/ch.psi.fda.fdaq/src/main/java/ch/psi/fda/fdaq/Fdaq.java @@ -156,6 +156,7 @@ public class Fdaq { } catch (IOException e) { // Ignore because not relevant at this stage } + running = false; } } diff --git a/ch.psi.fda.fdaq/src/test/java/ch/psi/fda/fdaq/FdaqServer.java b/ch.psi.fda.fdaq/src/test/java/ch/psi/fda/fdaq/FdaqServer.java index 5274f6b..62632af 100644 --- a/ch.psi.fda.fdaq/src/test/java/ch/psi/fda/fdaq/FdaqServer.java +++ b/ch.psi.fda.fdaq/src/test/java/ch/psi/fda/fdaq/FdaqServer.java @@ -39,25 +39,31 @@ public class FdaqServer { public void startKillSocket(int port) { try { ServerSocket serverSocket = new ServerSocket(port); - Socket socket = serverSocket.accept(); - DataOutputStream out = new DataOutputStream(socket.getOutputStream()); - DataInputStream in = new DataInputStream(socket.getInputStream()); - - byte[] requestBuffer = new byte[1 * 4]; // 2 times integers - ByteBuffer bytebuffer = ByteBuffer.wrap(requestBuffer); - bytebuffer.order(ByteOrder.LITTLE_ENDIAN); - - in.read(requestBuffer); - - bytebuffer.getInt(); - - logger.info("Terminate sender"); - stop=true; - - out.close(); - in.close(); - socket.close(); + try{ + while(true){ + Socket socket = serverSocket.accept(); + DataOutputStream out = new DataOutputStream(socket.getOutputStream()); + DataInputStream in = new DataInputStream(socket.getInputStream()); + + byte[] requestBuffer = new byte[1 * 4]; // 2 times integers + ByteBuffer bytebuffer = ByteBuffer.wrap(requestBuffer); + bytebuffer.order(ByteOrder.LITTLE_ENDIAN); + + in.read(requestBuffer); + + bytebuffer.getInt(); + + logger.info("Terminate sender"); + stop=true; + + out.close(); + in.close(); + socket.close(); + } + } + finally{ serverSocket.close(); + } } catch (IOException e) { throw new RuntimeException(e); } @@ -67,53 +73,61 @@ public class FdaqServer { stop = false; try { ServerSocket serverSocket = new ServerSocket(port); - Socket socket = serverSocket.accept(); - - logger.info("Start sending ..."); - DataOutputStream out = new DataOutputStream(socket.getOutputStream()); - DataInputStream in = new DataInputStream(socket.getInputStream()); - - byte[] requestBuffer = new byte[2 * 4]; // 2 times integers - ByteBuffer bytebuffer = ByteBuffer.wrap(requestBuffer); - bytebuffer.order(ByteOrder.LITTLE_ENDIAN); - - in.read(requestBuffer); - - bytebuffer.getInt(); // This will always be 26 - int nMessages = bytebuffer.getInt(); // Contains number of images to - // receive - - // System.out.println("Messages to send: "+nMessages); - - for (int t = 0; t < nMessages; t++) { - - if(stop){ // Terminate loop if kill socket got a request - break; - } - // System.out.println(t+" "+0+" "+0+" "+ (-t)); - - byte[] dataBuffer = new byte[4 * 4]; // 4 times Integers - ByteBuffer buffer = ByteBuffer.wrap(dataBuffer); // 4 times - // Integers - buffer.order(ByteOrder.LITTLE_ENDIAN); - - buffer.putInt(t); - buffer.putInt(0); - buffer.putInt(0); - buffer.putInt(-t); - - out.write(dataBuffer); - out.flush(); - - if(t>1028){ // The first 1028 images are skipped anyways - Thread.sleep(10); + try{ + while(true){ + stop = false; + + Socket socket = serverSocket.accept(); + + logger.info("Start sending ..."); + DataOutputStream out = new DataOutputStream(socket.getOutputStream()); + DataInputStream in = new DataInputStream(socket.getInputStream()); + + byte[] requestBuffer = new byte[2 * 4]; // 2 times integers + ByteBuffer bytebuffer = ByteBuffer.wrap(requestBuffer); + bytebuffer.order(ByteOrder.LITTLE_ENDIAN); + + in.read(requestBuffer); + + bytebuffer.getInt(); // This will always be 26 + int nMessages = bytebuffer.getInt(); // Contains number of images to + // receive + + // System.out.println("Messages to send: "+nMessages); + + for (int t = 0; t < nMessages; t++) { + + if(stop){ // Terminate loop if kill socket got a request + break; + } + // System.out.println(t+" "+0+" "+0+" "+ (-t)); + + byte[] dataBuffer = new byte[4 * 4]; // 4 times Integers + ByteBuffer buffer = ByteBuffer.wrap(dataBuffer); // 4 times + // Integers + buffer.order(ByteOrder.LITTLE_ENDIAN); + + buffer.putInt(t); + buffer.putInt(0); + buffer.putInt(0); + buffer.putInt(-t); + + out.write(dataBuffer); + out.flush(); + + if(t>1028){ // The first 1028 images are skipped anyways + Thread.sleep(10); + } + } + + out.close(); + in.close(); + socket.close(); } } - - out.close(); - in.close(); - socket.close(); - serverSocket.close(); + finally{ + serverSocket.close(); + } } catch (IOException | InterruptedException e) { throw new RuntimeException(e); }