SNode.C
Loading...
Searching...
No Matches
Echo.cpp
Go to the documentation of this file.
1
/*
2
* SNode.C - a slim toolkit for network communication
3
* Copyright (C) Volker Christian <me@vchrist.at>
4
* 2020, 2021, 2022, 2023, 2024, 2025
5
*
6
* This program is free software: you can redistribute it and/or modify
7
* it under the terms of the GNU Lesser General Public License as published
8
* by the Free Software Foundation, either version 3 of the License, or
9
* (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public License
17
* along with this program. If not, see <http://www.gnu.org/licenses/>.
18
*/
19
20
#
include
"Echo.h"
21
22
#
ifndef
DOXYGEN_SHOULD_SKIP_THIS
23
24
#
include
"log/Logger.h"
25
#
include
"utils/system/signal.h"
26
27
#
include
<
cstring
>
28
29
#
endif
/* DOXYGEN_SHOULD_SKIP_THIS */
30
31
#
define
MAX_FLYING_PINGS
3
32
#
define
PING_INTERVAL
90
33
34
namespace
apps::websocket::subprotocol::echo::
server
{
35
36
Echo
::
Echo
(
web
::
websocket
::
SubProtocolContext
*
socketContextUpgradeBase
,
const
std
::
string
&
name
)
37
:
web
::
websocket
::
server
::
SubProtocol
(
socketContextUpgradeBase
,
name
,
PING_INTERVAL
,
MAX_FLYING_PINGS
) {
38
}
39
40
void
Echo
::
onConnected
() {
41
VLOG(1) <<
"Echo connected"
;
42
43
sendMessage
(
"Welcome to SimpleChat"
);
44
sendMessage
(
"====================="
);
45
}
46
47
void
Echo
::
onMessageStart
(
int
opCode
) {
48
VLOG(2) <<
"Message Start - OpCode: "
<<
opCode
;
49
}
50
51
void
Echo
::
onMessageData
(
const
char
*
chunk
,
std
::
size_t
chunkLen
) {
52
data
+=
std
::
string
(
chunk
,
chunkLen
);
53
54
VLOG(2) <<
"Message Fragment: "
<<
std
::
string
(
chunk
,
chunkLen
);
55
}
56
57
void
Echo
::
onMessageEnd
() {
58
VLOG(1) <<
"Message Data: "
<<
data
;
59
/*
60
forEachClient([&data = this->data](SubProtocol* client) {
61
client->sendMessage(data);
62
});
63
*/
64
sendBroadcast
(
data
);
65
66
data
.
clear
();
67
}
68
69
void
Echo
::
onMessageError
(
uint16_t
errnum
) {
70
VLOG(1) <<
"Message error: "
<<
errnum
;
71
}
72
73
void
Echo
::
onDisconnected
() {
74
VLOG(1) <<
"Echo disconnected:"
;
75
}
76
77
bool
Echo
::
onSignal
(
int
sig
) {
78
VLOG(1) <<
"SubProtocol 'echo' exit due to '"
<<
strsignal
(
sig
) <<
"' (SIG"
<<
utils
::
system
::
sigabbrev_np
(
sig
) <<
" = "
<<
sig
79
<<
")"
;
80
81
sendClose
();
82
83
return
false
;
84
}
85
86
}
// namespace apps::websocket::subprotocol::echo::server
MAX_FLYING_PINGS
#define MAX_FLYING_PINGS
Definition
Echo.cpp:31
PING_INTERVAL
#define PING_INTERVAL
Definition
Echo.cpp:32
apps::websocket::subprotocol::echo::server
Definition
Echo.cpp:34
apps
websocket
subprotocol
server
echo
Echo.cpp
Generated on Mon Feb 10 2025 20:20:42 for SNode.C by
1.11.0