Add sender/receiver functionality

This commit is contained in:
2015-06-21 14:49:11 +01:00
parent d620a70eb8
commit f77194ad16
14 changed files with 151 additions and 25 deletions

View File

@@ -0,0 +1,7 @@
package base;
public interface Control {
public void start();
public void stop();
public void exit();
}

View File

@@ -0,0 +1,8 @@
package base.receiver;
import base.Control;
public interface Forwarder extends Control {
public void register(Receiver receiver);
public void remove(Receiver receiver);
}

View File

@@ -0,0 +1,7 @@
package base.receiver;
public interface Receiver {
public void receive(byte[] buffer);
}

View File

@@ -2,6 +2,8 @@ package base.sender;
import java.io.IOException;
public interface Sender {
import base.Control;
public interface Sender extends Control {
public void send(byte[] buffer) throws IOException;
}

View File

@@ -30,19 +30,7 @@ public class UdpSender implements Sender {
}
protected boolean setup() {
if (datagramSocket == null) {
try {
datagramSocket = new DatagramSocket();
} catch (SocketException e) {
logger.error("Failed to create socket", e);
return false;
}
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
datagramSocket.close();
}
});
}
return true;
}
@@ -55,4 +43,24 @@ public class UdpSender implements Sender {
logger.error("Failed to send buffer", e);
}
}
public void start() {
if (datagramSocket == null) {
try {
datagramSocket = new DatagramSocket();
} catch (SocketException e) {
logger.error("Failed to create socket", e);
}
}
}
public void stop() {
if (datagramSocket != null) {
datagramSocket.close();
}
}
public void exit() {
stop();
}
}

View File

@@ -17,7 +17,7 @@ import base.work.Listen;
import base.work.Work;
import base.worker.Worker;
public abstract class TcpClient extends Work implements Sender {
public class TcpClient extends Work implements Sender {
protected static final String HOST = "localhost";
protected static final int BUFFER_SIZE = 1024;
@@ -109,7 +109,7 @@ public abstract class TcpClient extends Work implements Sender {
}
}
protected abstract void input(byte[] buffer);
protected void input(byte[] buffer) {}
public void send(byte[] buffer) throws IOException {
if (selector == null) {

View File

@@ -8,7 +8,7 @@ import java.net.SocketException;
import base.exception.worker.ActivateException;
import base.work.Work;
public abstract class UdpServer extends Work {
public class UdpServer extends Work {
protected static final int BUFFER_SIZE = 1024;
protected static final int TIMEOUT = 1000;
@@ -60,5 +60,5 @@ public abstract class UdpServer extends Work {
input(buffer);
}
protected abstract void input(byte[] buffer);
protected void input(byte[] buffer) {}
}

View File

@@ -0,0 +1,31 @@
package base.server.forwarder;
import java.util.ArrayList;
import base.receiver.Forwarder;
import base.receiver.Receiver;
import base.server.channel.TcpServer;
import base.server.channel.TcpServerClient;
public class TcpServerChannelForwarder extends TcpServer implements Forwarder {
protected ArrayList<Receiver> receiverList;
public TcpServerChannelForwarder(int port) {
super(port);
receiverList = new ArrayList<Receiver>();
}
public void register(Receiver receiver) {
receiverList.add(receiver);
}
public void remove(Receiver receiver) {
receiverList.remove(receiver);
}
public void input(TcpServerClient client, byte[] buffer) {
for (Receiver receiver: receiverList) {
receiver.receive(buffer);
}
}
}

View File

@@ -0,0 +1,31 @@
package base.server.forwarder;
import java.util.ArrayList;
import base.receiver.Forwarder;
import base.receiver.Receiver;
import base.server.socket.TcpServer;
import base.server.socket.TcpServerClient;
public class TcpServerSocketForwarder extends TcpServer implements Forwarder {
protected ArrayList<Receiver> receiverList;
public TcpServerSocketForwarder(int port) {
super(port);
receiverList = new ArrayList<Receiver>();
}
public void register(Receiver receiver) {
receiverList.add(receiver);
}
public void remove(Receiver receiver) {
receiverList.remove(receiver);
}
public void input(TcpServerClient client, byte[] buffer) {
for (Receiver receiver: receiverList) {
receiver.receive(buffer);
}
}
}

View File

@@ -0,0 +1,30 @@
package base.server.forwarder;
import java.util.ArrayList;
import base.receiver.Forwarder;
import base.receiver.Receiver;
import base.server.datagram.UdpServer;
public class UdpServerForwarder extends UdpServer implements Forwarder {
protected ArrayList<Receiver> receiverList;
public UdpServerForwarder(int port) {
super(port);
receiverList = new ArrayList<Receiver>();
}
public void register(Receiver receiver) {
receiverList.add(receiver);
}
public void remove(Receiver receiver) {
receiverList.remove(receiver);
}
public void input(byte[] buffer) {
for (Receiver receiver: receiverList) {
receiver.receive(buffer);
}
}
}

View File

@@ -4,8 +4,6 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import base.exception.worker.DeactivateException;
import base.sender.Sender;
@@ -69,7 +67,6 @@ public abstract class AbstractTcpClient extends Work implements Sender {
}
} catch (InterruptedException e) {}
}
System.out.println("Client writing: " + Charset.defaultCharset().decode(ByteBuffer.wrap(buffer)).toString());
outputStream.write(buffer);
}
}

View File

@@ -5,8 +5,9 @@ import java.net.Socket;
import java.net.UnknownHostException;
import base.exception.worker.ActivateException;
import base.sender.Sender;
public abstract class TcpClient extends AbstractTcpClient {
public class TcpClient extends AbstractTcpClient implements Sender {
protected static final String HOST = "localhost";
protected String host;
@@ -43,4 +44,6 @@ public abstract class TcpClient extends AbstractTcpClient {
}
super.activate();
}
protected void input(byte[] buffer) {}
}

View File

@@ -52,7 +52,9 @@ public class TcpServer extends Work implements Sender {
super.exit();
try {
serverSocket.close();
// Should check if clients exit as well
for (TcpServerClient client : clientList) {
client.exit();
}
} catch (IOException e) {
logger.error("", e);
}
@@ -75,7 +77,7 @@ public class TcpServer extends Work implements Sender {
public void send(byte[] buffer) throws IOException {
logger.debug("Number of clients = " + clientList.size());
for (TcpServerClient client : clientList) {
// Should be dealt with in clients own thread
// Should be dealt with in clients own thread?
client.send(buffer);
}
}

View File

@@ -25,7 +25,7 @@ public abstract class Worker {
public Worker(Work work) {
this.work = work;
logger = LoggerFactory.getLogger(work.getClass());
logger = LoggerFactory.getLogger(work.getClass());
}
public boolean active() {