diff --git a/core/src/main/groovy/com/muwire/core/connection/I2PConnector.groovy b/core/src/main/groovy/com/muwire/core/connection/I2PConnector.groovy index 5c0ad1aa..1eb96ed3 100644 --- a/core/src/main/groovy/com/muwire/core/connection/I2PConnector.groovy +++ b/core/src/main/groovy/com/muwire/core/connection/I2PConnector.groovy @@ -36,21 +36,29 @@ class I2PConnector { synchronized void connect() { if (socketManager != null) return - keyDat.withInputStream { - socketManager = new I2PSocketManagerFactory().createDisconnectedManager(it, i2cpHost, i2cpPort, i2pProperties) - } - socketManager.getDefaultOptions().with { - setReadTimeout(60000) - setConnectTimeout(15000) - } - socketManager.addDisconnectListener { - socketManager = null - eventBus.publish(new RouterDisconnectedEvent()) - } + while(true) { + I2PSocketManager socketManager + keyDat.withInputStream { + socketManager = new I2PSocketManagerFactory().createDisconnectedManager(it, i2cpHost, i2cpPort, i2pProperties) + } + socketManager.getDefaultOptions().with { + setReadTimeout(60000) + setConnectTimeout(15000) + } + socketManager.addDisconnectListener({ + this.socketManager = null + eventBus.publish(new RouterDisconnectedEvent()) + } as I2PSocketManager.DisconnectListener) - def session = socketManager.getSession() - session.connect() - eventBus.publish(new RouterConnectedEvent(session: session)) + def session = socketManager.getSession() + try { + session.connect() + this.socketManager = socketManager + eventBus.publish(new RouterConnectedEvent(session: session)) + } catch (Exception e) { + Thread.sleep(1000) + } + } } synchronized void shutdown() {