Skip to content

Commit 8e8e694

Browse files
committed
Allow clients to be able to provide an alternate reconnect scheduler (a class implementing IOReconnectScheduler). The detault policy remains as was (reconnecting after a second).
1 parent 45cb7ef commit 8e8e694

File tree

3 files changed

+42
-2
lines changed

3 files changed

+42
-2
lines changed

src/io/socket/IOConnection.java

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,23 @@ public void run() {
177177
}
178178
}
179179
}
180+
181+
private IOReconnectScheduler reconnectScheduler = new IOReconnectScheduler() {
182+
183+
@Override
184+
public void scheduleReconnect(Timer timer, TimerTask task) {
185+
timer.schedule(task, 1000);
186+
}
187+
188+
@Override
189+
public void onReconnect() {
190+
}
191+
192+
};
193+
194+
public void setReconnectScheduler(IOReconnectScheduler scheduler) {
195+
reconnectScheduler = scheduler;
196+
}
180197

181198
/**
182199
* The Class ConnectThread. Handles connecting to the server with an
@@ -507,7 +524,9 @@ private IOCallback findCallback(IOMessage message) throws SocketIOException {
507524
*/
508525
public void transportConnected() {
509526
setState(STATE_READY);
510-
if (reconnectTask != null) {
527+
528+
boolean isReconnecting = (reconnectTask != null);
529+
if (isReconnecting) {
511530
reconnectTask.cancel();
512531
reconnectTask = null;
513532
}
@@ -535,7 +554,11 @@ public void transportConnected() {
535554
while ((text = outputBuffer.poll()) != null)
536555
sendPlain(text);
537556
}
557+
538558
this.keepAliveInQueue = false;
559+
if(isReconnecting) {
560+
reconnectScheduler.onReconnect();
561+
}
539562
}
540563
}
541564

@@ -753,7 +776,7 @@ public void reconnect() {
753776
reconnectTask.cancel();
754777
}
755778
reconnectTask = new ReconnectTask();
756-
backgroundTimer.schedule(reconnectTask, 1000);
779+
reconnectScheduler.scheduleReconnect(backgroundTimer, reconnectTask);
757780
}
758781
}
759782
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package io.socket;
2+
3+
import java.util.Timer;
4+
import java.util.TimerTask;
5+
6+
public interface IOReconnectScheduler {
7+
public void scheduleReconnect(Timer timer, TimerTask task);
8+
public void onReconnect();
9+
}

src/io/socket/SocketIO.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,14 @@ public void reconnect() {
330330
this.connection.reconnect();
331331
}
332332

333+
/**
334+
* Set the reconnect scheduler. By default reconnects are attempted every
335+
* second.
336+
*/
337+
public void setReconnectScheduler(IOReconnectScheduler scheduler) {
338+
this.connection.setReconnectScheduler(scheduler);
339+
}
340+
333341
/**
334342
* Returns, if a connection is established at the moment
335343
*

0 commit comments

Comments
 (0)