Open Lighting Architecture
0.9.5
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 Sun Mar 1 2015 13:02:40 for Open Lighting Architecture by
1.8.1.2