Open Lighting Architecture
0.9.6
Main Page
Modules
Related Pages
Namespaces
Classes
Files
File List
File Members
•
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
include
ola
network
HealthCheckedConnection.h
1
/*
2
* This library is free software; you can redistribute it and/or
3
* modify it under the terms of the GNU Lesser General Public
4
* License as published by the Free Software Foundation; either
5
* version 2.1 of the License, or (at your option) any later version.
6
*
7
* This library is distributed in the hope that it will be useful,
8
* but WITHOUT ANY WARRANTY; without even the implied warranty of
9
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
10
* Lesser General Public License for more details.
11
*
12
* You should have received a copy of the GNU Lesser General Public
13
* License along with this library; if not, write to the Free Software
14
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
15
*
16
* HealthCheckedConnection.h
17
* Copyright (C) 2012 Simon Newton
18
*
19
* This class adds health checking to a connection, which ensures that the
20
* connection is able to transfer data in a timely manner. The implementation
21
* is pretty simple: we define a heart beat interval I, which *must* be the
22
* same at both ends of the connection. Every I seconds, both ends send a
23
* heart beat message and if either end doesn't receive a heart beat in
24
* 2.5 * I, the connection is deemed dead, and the connection is closed.
25
*
26
* This class provides the basic health check mechanism, the sub class is left
27
* to define the format of the heartbeat message.
28
*
29
* To use this health checked channel, subclass HealthCheckedConnection, and
30
* provide the SendHeartbeat() and HeartbeatTimeout methods.
31
*
32
* There are some additional features:
33
* - Some receivers may want to stop reading from a connection under some
34
* circumstances (e.g. flow control). Before this happens, call PauseTimer()
35
* to pause the rx timer, otherwise the channel will be marked unhealthy. Once
36
* reading is resumed called ResumeTimer();
37
* - Some protocols may want to piggyback heartbeats on other messages, or
38
* even count any message as a heartbeat. When such a message is received, be
39
* sure to call HeartbeatReceived() which will update the timer.
40
*/
41
42
#ifndef INCLUDE_OLA_NETWORK_HEALTHCHECKEDCONNECTION_H_
43
#define INCLUDE_OLA_NETWORK_HEALTHCHECKEDCONNECTION_H_
44
45
#include <
ola/Callback.h
>
46
#include <ola/Clock.h>
47
#include <
ola/base/Macro.h
>
48
#include <ola/thread/SchedulerInterface.h>
49
50
namespace
ola {
51
namespace
network {
52
57
class
HealthCheckedConnection
{
58
public
:
59
HealthCheckedConnection
(
ola::thread::SchedulerInterface
*scheduler,
60
const
ola::TimeInterval
timeout_interval);
61
virtual
~
HealthCheckedConnection
();
62
66
bool
Setup
();
67
68
// Sending methods
69
//-----------------------------
70
71
/*
72
* Subclasses implement this to send a health check
73
*/
74
virtual
void
SendHeartbeat() = 0;
75
80
void
HeartbeatSent
();
81
82
83
// Receiving methods
84
//-----------------------------
85
86
// Call this method every time a valid health check is received.
87
void
HeartbeatReceived
();
88
89
/*
90
* This pauses the timer which checks for heartbeats. Call this if you stop
91
* reading from the socket for any reason.
92
*/
93
void
PauseTimer
();
94
98
void
ResumeTimer
();
99
100
protected
:
104
virtual
void
HeartbeatTimeout
() = 0;
105
106
private
:
107
ola::thread::SchedulerInterface
*m_scheduler;
108
ola::TimeInterval
m_heartbeat_interval;
109
ola::thread::timeout_id
m_send_timeout_id;
110
ola::thread::timeout_id
m_receive_timeout_id;
111
112
bool
SendNextHeartbeat();
113
void
UpdateReceiveTimer();
114
void
InternalHeartbeatTimeout();
115
116
DISALLOW_COPY_AND_ASSIGN(
HealthCheckedConnection
);
117
};
118
}
// namespace network
119
}
// namespace ola
120
#endif // INCLUDE_OLA_NETWORK_HEALTHCHECKEDCONNECTION_H__
Generated on Fri Jul 3 2015 15:58:45 for Open Lighting Architecture by
1.8.1.2