Expand forwarder model to client, make abstract loader accordingly flexible

This commit is contained in:
2015-06-21 17:37:28 +01:00
parent 0f3907448e
commit ec2d83601f
4 changed files with 104 additions and 9 deletions

View File

@@ -46,11 +46,11 @@ public class AbstractLoader<E> {
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<E> {
throw new LoaderException("Failed to determine <Sender>");
}
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<E> {
throw new LoaderException("Failed to determine <Forwarder>");
}
pico.addComponent(forwarderClass, forwarderClass, new Parameter[]{
new ConstantParameter(Integer.valueOf(properties.getProperty("server.port")))});
new ConstantParameter(port)});
}
}

View File

@@ -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);
}

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.TcpClient;
import base.server.socket.TcpServerClient;
public class TcpClientChannelForwarder extends TcpClient implements Forwarder {
protected ArrayList<Receiver> receiverList;
public TcpClientChannelForwarder(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.channel.TcpClient;
import base.server.channel.TcpServerClient;
public class TcpClientSocketForwarder extends TcpClient implements Forwarder {
protected ArrayList<Receiver> receiverList;
public TcpClientSocketForwarder(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);
}
}
}