Expand forwarder model to client, make abstract loader accordingly flexible
This commit is contained in:
@@ -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)});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user