From 510c42dffd569b4549cef75855fde89583258678 Mon Sep 17 00:00:00 2001 From: Rik Veenboer Date: Thu, 11 Jun 2015 22:31:39 +0100 Subject: [PATCH] Some refactoring --- .../main/java/base/server/AbstractClient.java | 17 ------ .../base/server/{ => datagram}/UdpServer.java | 17 +++++- .../base/server/{ => socket}/TcpClient.java | 27 +++++++-- .../base/server/{ => socket}/TcpServer.java | 23 +++++++- .../src/main/java/mimis/util/ArrayCycle.java | 55 ------------------- 5 files changed, 57 insertions(+), 82 deletions(-) delete mode 100644 java/base/src/main/java/base/server/AbstractClient.java rename java/base/src/main/java/base/server/{ => datagram}/UdpServer.java (76%) rename java/base/src/main/java/base/server/{ => socket}/TcpClient.java (72%) rename java/base/src/main/java/base/server/{ => socket}/TcpServer.java (71%) delete mode 100644 java/mimis/src/main/java/mimis/util/ArrayCycle.java diff --git a/java/base/src/main/java/base/server/AbstractClient.java b/java/base/src/main/java/base/server/AbstractClient.java deleted file mode 100644 index 610549a..0000000 --- a/java/base/src/main/java/base/server/AbstractClient.java +++ /dev/null @@ -1,17 +0,0 @@ -package base.server; - -import java.io.InputStream; -import java.io.OutputStream; -import java.net.Socket; - -import base.work.Work; - -public abstract class AbstractClient extends Work { - protected Socket socket; - protected InputStream inputStream; - protected OutputStream outputStream; - - public AbstractClient(Socket socket) { - this.socket = socket; - } -} diff --git a/java/base/src/main/java/base/server/UdpServer.java b/java/base/src/main/java/base/server/datagram/UdpServer.java similarity index 76% rename from java/base/src/main/java/base/server/UdpServer.java rename to java/base/src/main/java/base/server/datagram/UdpServer.java index ef5a6be..7d058dd 100644 --- a/java/base/src/main/java/base/server/UdpServer.java +++ b/java/base/src/main/java/base/server/datagram/UdpServer.java @@ -1,12 +1,14 @@ -package base.server; +package base.server.datagram; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; import java.net.SocketTimeoutException; +import java.util.ArrayList; import base.exception.worker.ActivateException; +import base.receiver.Receiver; import base.work.Work; public abstract class UdpServer extends Work { @@ -15,6 +17,7 @@ public abstract class UdpServer extends Work { protected int port; protected int bufferSize; protected DatagramSocket diagramSocket; + protected ArrayList receiverList = new ArrayList(); public UdpServer(int port) { this(port, BUFFER_SIZE); @@ -50,8 +53,16 @@ public abstract class UdpServer extends Work { stop(); return; } - receive(buffer); + for (Receiver receiver : receiverList) { + receiver.receive(buffer); + } + } + + public void addReceiver(Receiver receiver) { + receiverList.add(receiver); } - abstract protected void receive(byte[] buffer); + public void removeReceiver(Receiver receiver) { + receiverList.remove(receiver); + } } diff --git a/java/base/src/main/java/base/server/TcpClient.java b/java/base/src/main/java/base/server/socket/TcpClient.java similarity index 72% rename from java/base/src/main/java/base/server/TcpClient.java rename to java/base/src/main/java/base/server/socket/TcpClient.java index 8cedcfc..7631519 100644 --- a/java/base/src/main/java/base/server/TcpClient.java +++ b/java/base/src/main/java/base/server/socket/TcpClient.java @@ -1,23 +1,32 @@ -package base.server; +package base.server.socket; import java.io.IOException; import java.net.Socket; import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.nio.charset.Charset; +import java.util.ArrayList; import base.exception.worker.ActivateException; import base.exception.worker.DeactivateException; +import base.receiver.Receiver; public abstract class TcpClient extends AbstractClient { protected static final int BUFFER = 2048; protected String host; protected int port; + protected int bufferSize; + protected ArrayList receiverList = new ArrayList(); public TcpClient(String host, int port) { + this(host, port, BUFFER); + } + + public TcpClient(String host, int port, int bufferSize) { super(null); this.host = host; this.port = port; + this.bufferSize = bufferSize; } public void activate() throws ActivateException { @@ -25,7 +34,7 @@ public abstract class TcpClient extends AbstractClient { socket = new Socket(host, port); inputStream = socket.getInputStream(); outputStream = socket.getOutputStream(); - send("Incoming client!".getBytes()); + //send("Incoming client!".getBytes()); } catch (UnknownHostException e) { logger.error("", e); throw new ActivateException(); @@ -52,10 +61,12 @@ public abstract class TcpClient extends AbstractClient { } public final void work() { - byte[] buffer = new byte[BUFFER]; + byte[] buffer = new byte[bufferSize]; try { while (inputStream.read(buffer) > 0) { - receive(buffer); + for (Receiver receiver : receiverList) { + receiver.receive(buffer); + } } } catch (IOException e) { stop(); @@ -66,6 +77,12 @@ public abstract class TcpClient extends AbstractClient { System.out.println("Client writing: " + Charset.defaultCharset().decode(ByteBuffer.wrap(buffer)).toString()); outputStream.write(buffer); } + + public void register(Receiver receiver) { + receiverList.add(receiver); + } - public abstract void receive(byte[] buffer); + public void remove(Receiver receiver) { + receiverList.remove(receiver); + } } \ No newline at end of file diff --git a/java/base/src/main/java/base/server/TcpServer.java b/java/base/src/main/java/base/server/socket/TcpServer.java similarity index 71% rename from java/base/src/main/java/base/server/TcpServer.java rename to java/base/src/main/java/base/server/socket/TcpServer.java index 57cc741..d750ca4 100644 --- a/java/base/src/main/java/base/server/TcpServer.java +++ b/java/base/src/main/java/base/server/socket/TcpServer.java @@ -1,4 +1,4 @@ -package base.server; +package base.server.socket; import java.io.IOException; import java.lang.reflect.Constructor; @@ -7,14 +7,17 @@ import java.net.Socket; import java.util.ArrayList; import base.exception.worker.ActivateException; +import base.receiver.Receiver; +import base.sender.Sender; import base.work.Work; -public class TcpServer extends Work { +public class TcpServer extends Work implements Sender { protected int port; protected Socket socket; protected Constructor clientConstructor; protected ArrayList clientList; protected ServerSocket serverSocket; + protected ArrayList receiverList = new ArrayList(); public TcpServer(int port, Class clientClass) { this.port = port; @@ -63,6 +66,22 @@ public class TcpServer extends Work { public void work() { } + + //public send(byte[] ) } + public void addReceiver(Receiver receiver) { + receiverList.add(receiver); + } + + public void removeReceiver(Receiver receiver) { + receiverList.remove(receiver); + } + + public void send(byte[] buffer) throws IOException { + for (Client client : clientList) { + // Should be dealt with in clients own thread + client.send(buffer); + } + } } diff --git a/java/mimis/src/main/java/mimis/util/ArrayCycle.java b/java/mimis/src/main/java/mimis/util/ArrayCycle.java deleted file mode 100644 index 3a380d2..0000000 --- a/java/mimis/src/main/java/mimis/util/ArrayCycle.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * Copyright (C) 2015 Rik Veenboer - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package mimis.util; - -import java.util.ArrayList; - -public class ArrayCycle extends ArrayList { - protected static final long serialVersionUID = 1L; - - protected int index = 0; - - public ArrayCycle(E... elementArray) { - if (elementArray != null) { - for (E element : elementArray) { - add(element); - } - } - } - - public E current() { - return this.get(index); - } - - public E previous() { - if (--index < 0) { - index = Math.max(0, size() - 1); - } - return get(index); - } - - public E next() { - if (++index >= size()) { - index = 0; - } - return size() == 0 ? null : get(index); - } - - public E reset() { - return get(index = 0); - } -}