Some refactoring
- I didn't like the way the context was initialized - The DatabaseRepository got too complicated
This commit is contained in:
@ -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());
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user