Skip to content

Commit b3de2b2

Browse files
committed
Add Heartbeat + reconnect tests
1 parent e19ea56 commit b3de2b2

File tree

3 files changed

+76
-8
lines changed

3 files changed

+76
-8
lines changed

src/AndroidClient/client/src/main/java/net/servicestack/client/sse/ServerEventsClient.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -307,10 +307,10 @@ private void onConnectReceived() {
307307
connectionInfo.getId(),
308308
Utils.join(channels, ",")));
309309

310-
startNewHeartbeat();
311-
312310
if (onConnect != null)
313311
onConnect.execute(connectionInfo);
312+
313+
startNewHeartbeat();
314314
}
315315

316316
Timer heratbeatTimer;
@@ -322,10 +322,10 @@ private void startNewHeartbeat() {
322322
if (stopped.get())
323323
return;
324324

325-
if (heratbeatTimer != null)
326-
heratbeatTimer.cancel();
325+
if (heratbeatTimer == null)
326+
heratbeatTimer = new Timer("ServerEventsClient Heartbeat");
327327

328-
heratbeatTimer = new Timer("ServerEventsClient Heartbeat");
328+
//reschedule timer on every heartbeat
329329
heratbeatTimer.schedule(new TimerTask() {
330330
@Override
331331
public void run() {

src/AndroidClient/client/src/test/java/chat/chatdtos.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* Options:
2-
Date: 2017-02-11 06:41:16
2+
Date: 2017-02-11 09:07:46
33
Version: 4.00
44
Tip: To override a DTO option, remove "//" prefix before updating
55
BaseUrl: http://chat.servicestack.net
@@ -96,6 +96,12 @@ public static class ClearChatHistory implements IReturnVoid
9696

9797
}
9898

99+
@Route("/reset-serverevents")
100+
public static class ResetServerEvents implements IReturnVoid
101+
{
102+
103+
}
104+
99105
@Route("/account")
100106
public static class GetUserDetails implements IReturn<GetUserDetailsResponse>
101107
{

src/AndroidClient/client/src/test/java/net/servicestack/client/tests/ServerEventClientTests.java

Lines changed: 64 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,7 @@
1818
import java.util.concurrent.CountDownLatch;
1919
import java.util.concurrent.TimeUnit;
2020

21-
import static chat.chatdtos.ChatMessage;
22-
import static chat.chatdtos.PostChatToChannel;
21+
import static chat.chatdtos.*;
2322

2423
/**
2524
* Created by mythz on 2/10/2017.
@@ -263,4 +262,67 @@ public void test_Does_receive_messages() throws Exception {
263262
assertEquals(2, msgs2.size());
264263
}
265264
}
265+
266+
public void test_Does_send_multiple_heartbeats() throws Exception {
267+
final CountDownLatch signal = new CountDownLatch(1);
268+
269+
List<ServerEventMessage> heartbeats = new ArrayList<>();
270+
try(ServerEventsClient client1 = new ServerEventsClient("http://chat.servicestack.net")
271+
.setOnConnect(e -> e.setHeartbeatIntervalMs(1000)) //change to 1s
272+
.setOnHeartbeat(e -> {
273+
heartbeats.add(e);
274+
if (heartbeats.size() >= 3)
275+
signal.countDown();
276+
})
277+
.start()) {
278+
279+
assertTrue(signal.await(5, TimeUnit.SECONDS));
280+
281+
assertTrue(heartbeats.size() >= 3);
282+
}
283+
}
284+
285+
public void test_Does_reconnect_on_lost_connection() throws Exception {
286+
287+
List<ServerEventConnect> connectMsgs = new ArrayList<>();
288+
List<ServerEventMessage> msgs1 = new ArrayList<>();
289+
try(ServerEventsClient client1 = new ServerEventsClient("http://chat.servicestack.net")
290+
.setOnConnect(connectMsgs::add)
291+
.setOnMessage(msgs1::add)
292+
.start()) {
293+
294+
while (connectMsgs.size() == 0){
295+
Thread.sleep(100);
296+
}
297+
298+
postChat(client1, "msg1 from client1");
299+
300+
while (msgs1.size() == 0){
301+
Thread.sleep(100);
302+
}
303+
304+
client1.getServiceClient().post(new ResetServerEvents());
305+
306+
try(ServerEventsClient client2 = new ServerEventsClient("http://chat.servicestack.net")
307+
.setOnConnect(connectMsgs::add)
308+
.start()) {
309+
310+
while (connectMsgs.size() < 3){ //client1 + client1 reconnect + client2
311+
Thread.sleep(100);
312+
}
313+
314+
postChat(client2, "msg2 from client2");
315+
316+
while (msgs1.size() < 2){ //msg1 + msg2
317+
Thread.sleep(100);
318+
}
319+
}
320+
321+
ServerEventMessage msg2 = msgs1.get(1);
322+
323+
ChatMessage chatMsg2 = JsonUtils.fromJson(msg2.getJson(), ChatMessage.class);
324+
325+
assertEquals("msg2 from client2", chatMsg2.getMessage());
326+
}
327+
}
266328
}

0 commit comments

Comments
 (0)