Some refactoring

- I didn't like the way the context was initialized
- The DatabaseRepository got too complicated
This commit is contained in:
2015-04-24 11:11:08 +02:00
parent c99d3f0db8
commit f00c6018e7
14 changed files with 472 additions and 324 deletions

View File

@ -16,7 +16,7 @@
package ch.dissem.bitmessage.networking;
import ch.dissem.bitmessage.Context;
import ch.dissem.bitmessage.BitmessageContext;
import ch.dissem.bitmessage.entity.*;
import ch.dissem.bitmessage.entity.valueobject.InventoryVector;
import ch.dissem.bitmessage.entity.valueobject.NetworkAddress;
@ -43,7 +43,7 @@ import static ch.dissem.bitmessage.networking.Connection.State.*;
public class Connection implements Runnable {
private final static Logger LOG = LoggerFactory.getLogger(Connection.class);
private Context ctx;
private BitmessageContext ctx;
private State state;
private Socket socket;
@ -59,8 +59,8 @@ public class Connection implements Runnable {
private Queue<MessagePayload> sendingQueue = new ConcurrentLinkedDeque<>();
public Connection(State state, Socket socket, MessageListener listener) throws IOException {
this.ctx = Context.getInstance();
public Connection(BitmessageContext context, State state, Socket socket, MessageListener listener) throws IOException {
this.ctx = context;
this.state = state;
this.socket = socket;
this.in = socket.getInputStream();
@ -97,7 +97,7 @@ public class Connection implements Runnable {
switch (msg.getPayload().getCommand()) {
case VERSION:
Version payload = (Version) msg.getPayload();
if (payload.getVersion() >= Context.CURRENT_VERSION) {
if (payload.getVersion() >= BitmessageContext.CURRENT_VERSION) {
this.version = payload.getVersion();
this.streams = payload.getStreams();
send(new VerAck());

View File

@ -16,7 +16,8 @@
package ch.dissem.bitmessage.networking;
import ch.dissem.bitmessage.Context;
import ch.dissem.bitmessage.BitmessageContext;
import ch.dissem.bitmessage.BitmessageContext.ContextHolder;
import ch.dissem.bitmessage.entity.payload.ObjectPayload;
import ch.dissem.bitmessage.entity.valueobject.NetworkAddress;
import ch.dissem.bitmessage.ports.NetworkHandler;
@ -37,8 +38,9 @@ import static ch.dissem.bitmessage.networking.Connection.State.*;
/**
* Handles all the networky stuff.
*/
public class NetworkNode implements NetworkHandler {
public class NetworkNode implements NetworkHandler, ContextHolder {
private final static Logger LOG = LoggerFactory.getLogger(NetworkNode.class);
private BitmessageContext ctx;
private final ExecutorService pool;
private final List<Connection> connections = new LinkedList<>();
private ServerSocket serverSocket;
@ -48,21 +50,25 @@ public class NetworkNode implements NetworkHandler {
pool = Executors.newCachedThreadPool();
}
@Override
public void setContext(BitmessageContext context) {
this.ctx = context;
}
@Override
public void start(final MessageListener listener) {
final Context ctx = Context.getInstance();
if (listener == null) {
throw new IllegalStateException("Listener must be set at start");
}
try {
serverSocket = new ServerSocket(Context.getInstance().getPort());
serverSocket = new ServerSocket(ctx.getPort());
pool.execute(new Runnable() {
@Override
public void run() {
try {
Socket socket = serverSocket.accept();
socket.setSoTimeout(10000);
startConnection(new Connection(SERVER, socket, listener));
startConnection(new Connection(ctx, SERVER, socket, listener));
} catch (IOException e) {
LOG.debug(e.getMessage(), e);
}
@ -85,7 +91,7 @@ public class NetworkNode implements NetworkHandler {
List<NetworkAddress> addresses = ctx.getAddressRepository().getKnownAddresses(8, ctx.getStreams());
for (NetworkAddress address : addresses) {
try {
startConnection(new Connection(CLIENT, new Socket(address.toInetAddress(), address.getPort()), listener));
startConnection(new Connection(ctx, CLIENT, new Socket(address.toInetAddress(), address.getPort()), listener));
} catch (IOException e) {
LOG.debug(e.getMessage(), e);
}

View File

@ -18,9 +18,7 @@ package ch.dissem.bitmessage.networking;
import ch.dissem.bitmessage.entity.NetworkMessage;
import ch.dissem.bitmessage.entity.Version;
import ch.dissem.bitmessage.entity.payload.ObjectPayload;
import ch.dissem.bitmessage.entity.valueobject.NetworkAddress;
import ch.dissem.bitmessage.ports.NetworkHandler;
import ch.dissem.bitmessage.utils.UnixTime;
import org.junit.Test;