I'm running a strategy on my live account with the standalone api. I use singlejartest.Main in the SDK project to start the strategy. Today, the transport client got disconnected and never manage to reconnect in the next few hours. There is only a few reconnect attempts in the logs.
Can you privide an example that shows how to handle disconnections properly?
Here are the logs.
Quote:
15:09:02.505 ERROR com.dukascopy.charts.data.datacache.time.TimeManager - Request to DFS timed out, timeout [10000], request [<ServerTimeRequestMessage(,requestId=2575)>]
com.dukascopy.charts.data.datacache.DataCacheException: Request to DFS timed out, timeout [10000], request [<ServerTimeRequestMessage(,requestId=2575)>]
at com.dukascopy.charts.data.datacache.CurvesJsonProtocolHandler.processMessage(CurvesJsonProtocolHandler.java:1344)
at com.dukascopy.charts.data.datacache.CurvesJsonProtocolHandler.processMessage(CurvesJsonProtocolHandler.java:1263)
at com.dukascopy.charts.data.datacache.CurvesJsonProtocolHandler.loadServerTime(CurvesJsonProtocolHandler.java:1364)
at com.dukascopy.charts.data.datacache.time.TimeManager$4.run(TimeManager.java:245)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
15:09:22.932 ERROR com.dukascopy.dds4.transport.client.ClientConnector - Exception caught
java.io.IOException: An existing connection was forcibly closed by the remote host
at sun.nio.ch.SocketDispatcher.read0(Native Method)
at sun.nio.ch.SocketDispatcher.read(Unknown Source)
at sun.nio.ch.IOUtil.readIntoNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.read(Unknown Source)
at sun.nio.ch.SocketChannelImpl.read(Unknown Source)
at org.apache.mina.transport.socket.nio.SocketIoProcessor.read(SocketIoProcessor.java:218)
at org.apache.mina.transport.socket.nio.SocketIoProcessor.process(SocketIoProcessor.java:198)
at org.apache.mina.transport.socket.nio.SocketIoProcessor.access$400(SocketIoProcessor.java:45)
at org.apache.mina.transport.socket.nio.SocketIoProcessor$Worker.run(SocketIoProcessor.java:486)
at org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:51)
at java.lang.Thread.run(Unknown Source)
15:09:24.088 WARN singlejartest.Main - Disconnected
15:09:28.867 ERROR com.dukascopy.dds4.transport.client.TransportClient - Client disconnected, child connection ping failed
java.util.concurrent.TimeoutException: No response from server. Request: <HeartbeatRequestMessage(,synchRequestId=30150)>
at com.dukascopy.dds4.transport.client.TransportClient.controlSynchRequest(TransportClient.java:854)
at com.dukascopy.dds4.transport.client.TransportClient.pingIoSession(TransportClient.java:615)
at com.dukascopy.dds4.transport.client.TransportClient.pingChildSession(TransportClient.java:680)
at com.dukascopy.dds4.transport.client.TransportClient.pingConnection(TransportClient.java:671)
at com.dukascopy.dds4.transport.client.TransportClient.access$200(TransportClient.java:59)
at com.dukascopy.dds4.transport.client.TransportClient$1.run(TransportClient.java:316)
at java.lang.Thread.run(Unknown Source)
15:09:46.155 WARN singlejartest.Main - Disconnected
15:10:08.394 WARN singlejartest.Main - Disconnected
15:10:30.524 WARN singlejartest.Main - Disconnected
15:11:01.587 ERROR singlejartest.Main - Connection timed out: connect
java.net.ConnectException: Connection timed out: connect
at java.net.TwoStacksPlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.security.ssl.SSLSocketImpl.connect(Unknown Source)
at sun.security.ssl.BaseSSLSocketImpl.connect(Unknown Source)
at sun.net.NetworkClient.doConnect(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.http.HttpClient.openServer(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.<init>(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.New(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
at com.dukascopy.api.impl.connect.DCClientImpl.getAuthServers(DCClientImpl.java:469)
at com.dukascopy.api.impl.connect.DCClientImpl.connect(DCClientImpl.java:388)
at com.dukascopy.api.impl.connect.DCClientImpl.connect(DCClientImpl.java:310)
at singlejartest.Main$1.onDisconnect(Main.java:153)
at com.dukascopy.api.impl.connect.DCClientImpl$7.onDisconnect(DCClientImpl.java:822)
at com.dukascopy.api.impl.connect.DCClientImpl.disconnected(DCClientImpl.java:1100)
at com.dukascopy.dds4.transport.common.mina.DisconnectedEvent.execute(DisconnectedEvent.java:43)
at com.dukascopy.dds4.transport.common.mina.EventTask.run(EventTask.java:35)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
And the ISystemListener Class:
client.setSystemListener(new ISystemListener() {
private int lightReconnects = 3;
@Override
public void onStart(long processId) {
LOGGER.info("Strategy started: " + processId);
}
@Override
public void onStop(long processId) {
LOGGER.info("Strategy stopped: " + processId);
if (client.getStartedStrategies().size() == 0) {
System.exit(0);
}
}
@Override
public void onConnect() {
LOGGER.info("Connected");
lightReconnects = 3;
}
@Override
public void onDisconnect() {
LOGGER.warn("Disconnected");
if (lightReconnects > 0) {
client.reconnect();
--lightReconnects;
} else {
try {
//sleep for 10 seconds before attempting to reconnect
Thread.sleep(10000);
} catch (InterruptedException e) {
//ignore
}
try {
client.connect(jnlpUrl, userName, password);
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
}
}
});