Coverage Summary for Class: HeartBeatSender (it.polimi.ingsw.Network)
Class |
Class, %
|
Method, %
|
Line, %
|
HeartBeatSender |
0%
(0/1)
|
0%
(0/3)
|
0%
(0/12)
|
1 package it.polimi.ingsw.Network;
2
3 import it.polimi.ingsw.Server.Messages.HeartBeatMessage;
4
5 import java.io.IOException;
6 import java.util.Timer;
7 import java.util.TimerTask;
8
9 /**
10 * an auto sender of {@link HeartBeatMessage} at regular intervals
11 */
12 public class HeartBeatSender extends TimerTask {
13 private final SocketWrapper sw;
14 private final Timer timer;
15
16 /**
17 * Creates the sender but does not activate it
18 *
19 * @param sw the socket to send heartbeats on
20 */
21 public HeartBeatSender(SocketWrapper sw) {
22 this.sw = sw;
23 this.timer = new Timer();
24 }
25
26 /**
27 * Activates the sender. The sender will stop running only if externally stopped or if the socketwrapper handling it
28 * has issues during delivery of a heartbeat.
29 *
30 * @param keepAlivePeriod the time, in milliseconds, between each {@link HeartBeatMessage} sent
31 */
32 public void start(long keepAlivePeriod) {
33 this.timer.scheduleAtFixedRate(this, 0, keepAlivePeriod);
34 }
35
36 /**
37 * sends a {@link HeartBeatMessage} over the wrapper. In case of errors during the sending of a message, closes the
38 * wrapper and cancels the repeating task from the timer.
39 */
40 public void run() {
41 try {
42 sw.sendMessage(new HeartBeatMessage());
43 } catch (IOException e) {
44 try {
45 sw.close();
46 } catch (IOException ex) {
47 throw new RuntimeException(ex);
48 }
49 timer.cancel();
50 }
51 }
52 }