diff --git a/java/base/src/main/java/base/loader/AbstractLoader.java b/java/base/src/main/java/base/loader/AbstractLoader.java index fe01b3e..24a5cd4 100644 --- a/java/base/src/main/java/base/loader/AbstractLoader.java +++ b/java/base/src/main/java/base/loader/AbstractLoader.java @@ -46,11 +46,11 @@ public class AbstractLoader { return properties; } - protected void addSender(Properties properties) throws LoaderException { + protected void addSender(String protocol, String implementation, String host, int port) throws LoaderException { Class senderClass = null; - switch (properties.getProperty("protocol")) { + switch (protocol) { case "tcp": - switch (properties.getOrDefault("tcp.implementation", "socket").toString()) { + switch (implementation) { case "channel": senderClass = base.server.channel.TcpClient.class; break; @@ -67,15 +67,15 @@ public class AbstractLoader { throw new LoaderException("Failed to determine "); } pico.addComponent(senderClass, senderClass, new Parameter[]{ - new ConstantParameter(properties.getProperty("remote.host")), - new ConstantParameter(Integer.valueOf(properties.getProperty("remote.port")))}); + new ConstantParameter(host), + new ConstantParameter(port)}); } - protected void addForwarder(Properties properties) throws LoaderException { + protected void addForwarder(String protocol, String implementation, int port) throws LoaderException { Class forwarderClass = null; - switch (properties.getProperty("server.protocol", "tcp")) { + switch (protocol) { case "tcp": - switch (properties.getOrDefault("tcp.implementation", "socket").toString()) { + switch (implementation) { case "channel": forwarderClass = TcpServerChannelForwarder.class; break; @@ -91,6 +91,6 @@ public class AbstractLoader { throw new LoaderException("Failed to determine "); } pico.addComponent(forwarderClass, forwarderClass, new Parameter[]{ - new ConstantParameter(Integer.valueOf(properties.getProperty("server.port")))}); + new ConstantParameter(port)}); } } diff --git a/java/base/src/main/java/base/server/forwarder/AbstractReceiver.java b/java/base/src/main/java/base/server/forwarder/AbstractReceiver.java new file mode 100644 index 0000000..83dc965 --- /dev/null +++ b/java/base/src/main/java/base/server/forwarder/AbstractReceiver.java @@ -0,0 +1,33 @@ +package base.server.forwarder; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import base.Control; +import base.receiver.Forwarder; +import base.receiver.Receiver; + +public abstract class AbstractReceiver implements Receiver, Control { + protected Logger logger = LoggerFactory.getLogger(getClass()); + + protected Forwarder forwarder; + + public AbstractReceiver(Forwarder forwarder) { + this.forwarder = forwarder; + forwarder.register(this); + } + + public void start() { + forwarder.start(); + } + + public void stop() { + forwarder.stop(); + } + + public void exit() { + forwarder.exit(); + } + + abstract public void receive(byte[] buffer); +} diff --git a/java/base/src/main/java/base/server/forwarder/TcpClientChannelForwarder.java b/java/base/src/main/java/base/server/forwarder/TcpClientChannelForwarder.java new file mode 100644 index 0000000..d57f8a4 --- /dev/null +++ b/java/base/src/main/java/base/server/forwarder/TcpClientChannelForwarder.java @@ -0,0 +1,31 @@ +package base.server.forwarder; + +import java.util.ArrayList; + +import base.receiver.Forwarder; +import base.receiver.Receiver; +import base.server.socket.TcpClient; +import base.server.socket.TcpServerClient; + +public class TcpClientChannelForwarder extends TcpClient implements Forwarder { + protected ArrayList receiverList; + + public TcpClientChannelForwarder(int port) { + super(port); + receiverList = new ArrayList(); + } + + 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); + } + } +} diff --git a/java/base/src/main/java/base/server/forwarder/TcpClientSocketForwarder.java b/java/base/src/main/java/base/server/forwarder/TcpClientSocketForwarder.java new file mode 100644 index 0000000..a34bdd2 --- /dev/null +++ b/java/base/src/main/java/base/server/forwarder/TcpClientSocketForwarder.java @@ -0,0 +1,31 @@ +package base.server.forwarder; + +import java.util.ArrayList; + +import base.receiver.Forwarder; +import base.receiver.Receiver; +import base.server.channel.TcpClient; +import base.server.channel.TcpServerClient; + +public class TcpClientSocketForwarder extends TcpClient implements Forwarder { + protected ArrayList receiverList; + + public TcpClientSocketForwarder(int port) { + super(port); + receiverList = new ArrayList(); + } + + 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); + } + } +}