diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocol.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocol.java index 089526ef206a9cca642300febc02a42cdb579d41..3542593c34c5ab1fd3e3f0c3485007a6d35529db 100644 --- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocol.java +++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocol.java @@ -44,8 +44,7 @@ public class MailboxProtocol implements Runnable { new LinkedHashMap<>(); private volatile AtomicBoolean stopped = new AtomicBoolean(false); - private volatile Thread writingThread; - private volatile Thread readingThread; + private volatile Thread writingThread = null; public MailboxProtocol(Executor ioExecutor, BdfWriter mailboxBdfWriter, @@ -105,18 +104,22 @@ public class MailboxProtocol implements Runnable { */ @Override public void run() { + ioExecutor.execute(() -> readIncomingMessages()); writeOutgoingMessages(); } /** * Register a Handler for a specific request type. * <p> - * NOTE: {@link this#enableRequestHandling()} MUST be called after all handlers + * NOTE: {@link this#run()} MUST be called AFTER all handlers * have been registered! * * @param handler */ public void registerRequestHandler(MailboxRequestHandler handler) { + if (writingThread != null) + throw new RuntimeException( + "Trying to register request handler after run call!"); if (requestHandlers.containsKey(handler.getType())) throw new RuntimeException( "Handler for " + handler.getType().toString() + @@ -124,13 +127,6 @@ public class MailboxProtocol implements Runnable { requestHandlers.put(handler.getType(), handler); } - /** - * Request handling once all request handlers are registered - */ - public void enableRequestHandling() { - ioExecutor.execute(() -> readIncomingMessages()); - } - private void readIncomingMessages() { BdfList bdfMsg; diff --git a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocolIntegrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocolIntegrationTest.java index f9de586ba03f86fc103f881fd00bab34a70b7c0e..c7072d8f022e0cb4832e57ffa33a3210c9118655 100644 --- a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocolIntegrationTest.java +++ b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocolIntegrationTest.java @@ -108,7 +108,6 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase { }); ioExecutor.execute(mailboxProtocol); - mailboxProtocol.enableRequestHandling(); MailboxRequest req = new MailboxRequestStore(new ContactId(123), "test".getBytes()); @@ -149,8 +148,6 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase { ioExecutor.execute(mailboxProtocol); - mailboxProtocol.enableRequestHandling(); - // Test Error Response MailboxRequestTake req = new MailboxRequestTake("Test".getBytes()); @@ -186,7 +183,6 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase { }); ioExecutor.execute(mailboxProtocol); - mailboxProtocol.enableRequestHandling(); mailboxProtocol.writeRequest(req); @@ -217,7 +213,6 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase { ioExecutor.execute(mailboxProtocol); - mailboxProtocol.enableRequestHandling(); mailboxProtocol.writeRequest(req); pipedOS.close(); @@ -251,7 +246,6 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase { }); ioExecutor.execute(mailboxProtocol); - mailboxProtocol.enableRequestHandling(); mailboxProtocol.writeRequest(req); assertEquals(true, req.awaitAndGetResponse()); @@ -286,7 +280,6 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase { }); ioExecutor.execute(mailboxProtocol); - mailboxProtocol.enableRequestHandling(); mailboxProtocol.writeRequest(req); assertEquals(true, req.awaitAndGetResponse()); @@ -321,7 +314,6 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase { }); ioExecutor.execute(mailboxProtocol); - mailboxProtocol.enableRequestHandling(); mailboxProtocol.writeRequest(req);