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;
|
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;
|
Class<?> senderClass = null;
|
||||||
switch (properties.getProperty("protocol")) {
|
switch (protocol) {
|
||||||
case "tcp":
|
case "tcp":
|
||||||
switch (properties.getOrDefault("tcp.implementation", "socket").toString()) {
|
switch (implementation) {
|
||||||
case "channel":
|
case "channel":
|
||||||
senderClass = base.server.channel.TcpClient.class;
|
senderClass = base.server.channel.TcpClient.class;
|
||||||
break;
|
break;
|
||||||
@@ -67,15 +67,15 @@ public class AbstractLoader<E> {
|
|||||||
throw new LoaderException("Failed to determine <Sender>");
|
throw new LoaderException("Failed to determine <Sender>");
|
||||||
}
|
}
|
||||||
pico.addComponent(senderClass, senderClass, new Parameter[]{
|
pico.addComponent(senderClass, senderClass, new Parameter[]{
|
||||||
new ConstantParameter(properties.getProperty("remote.host")),
|
new ConstantParameter(host),
|
||||||
new ConstantParameter(Integer.valueOf(properties.getProperty("remote.port")))});
|
new ConstantParameter(port)});
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void addForwarder(Properties properties) throws LoaderException {
|
protected void addForwarder(String protocol, String implementation, int port) throws LoaderException {
|
||||||
Class<?> forwarderClass = null;
|
Class<?> forwarderClass = null;
|
||||||
switch (properties.getProperty("server.protocol", "tcp")) {
|
switch (protocol) {
|
||||||
case "tcp":
|
case "tcp":
|
||||||
switch (properties.getOrDefault("tcp.implementation", "socket").toString()) {
|
switch (implementation) {
|
||||||
case "channel":
|
case "channel":
|
||||||
forwarderClass = TcpServerChannelForwarder.class;
|
forwarderClass = TcpServerChannelForwarder.class;
|
||||||
break;
|
break;
|
||||||
@@ -91,6 +91,6 @@ public class AbstractLoader<E> {
|
|||||||
throw new LoaderException("Failed to determine <Forwarder>");
|
throw new LoaderException("Failed to determine <Forwarder>");
|
||||||
}
|
}
|
||||||
pico.addComponent(forwarderClass, forwarderClass, new Parameter[]{
|
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