-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathHeartBeat.cpp
More file actions
79 lines (70 loc) · 1.39 KB
/
HeartBeat.cpp
File metadata and controls
79 lines (70 loc) · 1.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include "network/HeartBeat.h"
#include "utils/Util.h"
HeartBeat::HeartBeat(ISvrNetEvent *pAdapter)
{
m_pNetAdapter = pAdapter;
m_timeOutCount = 0;
m_sendHearBeatCount = ALIVE_TIME_OUT;
m_bIsVisible = true;
}
HeartBeat::~HeartBeat()
{
m_pNetAdapter = NULL;
}
void HeartBeat::onLoop()
{
if (m_timeOutCount <= ALIVE_TIME_SPACE && m_bIsVisible)
{
m_mutex.Lock();
m_timeOutCount++;
m_mutex.Unlock();
}
else if (m_timeOutCount >= ALIVE_TIME_SPACE && m_bIsVisible)
{
//心跳发送
if (m_pNetAdapter)
{
m_pNetAdapter->onHeartReq();
}
m_mutex.Lock();
m_timeOutCount = 0;
m_sendHearBeatCount--;
m_mutex.Unlock();
}
//心跳超时,认为断线了
if (m_sendHearBeatCount <= 0 && m_bIsVisible && m_pNetAdapter)
{
m_mutex.Lock();
m_bIsVisible = false;
m_mutex.Unlock();
m_pNetAdapter->onNetClose();
}
}
bool HeartBeat::onRecvAlive()
{
Lock guard(m_mutex);
//收到心跳协议
m_sendHearBeatCount = ALIVE_TIME_OUT;
return true;
}
void HeartBeat::registAdapter(ISvrNetEvent *adapter)
{
m_mutex.Lock();
m_pNetAdapter = adapter;
m_timeOutCount = ALIVE_TIME_SPACE;
m_sendHearBeatCount = ALIVE_TIME_OUT;
m_mutex.Unlock();
}
void HeartBeat::resetTimeOutCount()
{
m_mutex.Lock();
m_timeOutCount = ALIVE_TIME_SPACE;
m_sendHearBeatCount = ALIVE_TIME_OUT;
m_mutex.Unlock();
}
void HeartBeat::setVisible(bool var)
{
m_mutex.Lock();
m_bIsVisible = var;
m_mutex.Unlock();
}