Add sender/receiver functionality
This commit is contained in:
7
java/base/src/main/java/base/Control.java
Normal file
7
java/base/src/main/java/base/Control.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package base;
|
||||
|
||||
public interface Control {
|
||||
public void start();
|
||||
public void stop();
|
||||
public void exit();
|
||||
}
|
||||
8
java/base/src/main/java/base/receiver/Forwarder.java
Normal file
8
java/base/src/main/java/base/receiver/Forwarder.java
Normal 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);
|
||||
}
|
||||
7
java/base/src/main/java/base/receiver/Receiver.java
Normal file
7
java/base/src/main/java/base/receiver/Receiver.java
Normal file
@@ -0,0 +1,7 @@
|
||||
package base.receiver;
|
||||
|
||||
public interface Receiver {
|
||||
|
||||
public void receive(byte[] buffer);
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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) {}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user