Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Jochen Bauer
spn-relayserver
Commits
55375cdf
Commit
55375cdf
authored
Apr 09, 2018
by
Hubert Denkmair
Browse files
receive tcp frames
parent
29b47103
Changes
5
Hide whitespace changes
Inline
Side-by-side
relayserver/CMakeLists.txt
View file @
55375cdf
...
...
@@ -14,6 +14,7 @@ add_executable(
${
PROJECT_NAME
}
main.cpp
RelayServer.h RelayServer.cpp
TcpProtocol.h TcpProtocol.cpp
)
target_link_libraries
(
...
...
relayserver/RelayServer.cpp
View file @
55375cdf
#include
"RelayServer.h"
#include
<iostream>
#include
<unistd.h>
#include
<TcpServer/TcpSocket.h>
#include
<TcpServer/EPoll.h>
#include
<sys/socket.h>
#include
<sys/types.h>
#include
<arpa/inet.h>
#include
<TcpServer/TcpSocket.h>
#include
<TcpServer/EPoll.h>
RelayServer
::
RelayServer
()
{
...
...
@@ -30,6 +30,13 @@ RelayServer::RelayServer()
}
);
_tcpProtocol
.
SetMessageReceivedCallback
(
[](
std
::
vector
<
uint8_t
>
data
)
{
std
::
cout
<<
"received "
<<
data
.
size
()
<<
" bytes."
<<
std
::
endl
;
}
);
_websocketServer
.
clear_access_channels
(
websocketpp
::
log
::
alevel
::
all
);
_websocketServer
.
set_access_channels
(
websocketpp
::
log
::
alevel
::
connect
);
_websocketServer
.
set_access_channels
(
websocketpp
::
log
::
alevel
::
disconnect
);
...
...
@@ -65,7 +72,7 @@ int RelayServer::Run()
{
if
(
ev
.
data
.
fd
==
_clientSocket
)
{
OnServerDataReceived
(
ev
);
return
_tcpProtocol
.
Read
(
_clientSocket
);
}
else
{
...
...
relayserver/RelayServer.h
View file @
55375cdf
...
...
@@ -4,6 +4,7 @@
#include
<TcpServer/TcpServer.h>
#include
<websocketpp/config/core.hpp>
#include
<websocketpp/server.hpp>
#include
"TcpProtocol.h"
class
RelayServer
{
...
...
@@ -14,6 +15,8 @@ class RelayServer
private:
int
_clientSocket
;
TcpServer
_tcpServer
;
TcpProtocol
_tcpProtocol
;
typedef
websocketpp
::
server
<
websocketpp
::
config
::
core
>
WebsocketServer
;
WebsocketServer
_websocketServer
;
...
...
relayserver/TcpProtocol.cpp
0 → 100644
View file @
55375cdf
#include
"TcpProtocol.h"
#include
<stdint.h>
#include
<arpa/inet.h>
#include
<unistd.h>
#include
<array>
void
TcpProtocol
::
SetMessageReceivedCallback
(
TcpProtocol
::
MessageReceivedCallback
callback
)
{
_messageReceivedCallback
=
callback
;
}
bool
TcpProtocol
::
Read
(
int
socket
)
{
std
::
array
<
uint8_t
,
1024
>
readbuf
;
ssize_t
bytesRead
=
read
(
socket
,
readbuf
.
data
(),
readbuf
.
size
());
if
(
bytesRead
<=
0
)
{
return
false
;
}
_buf
.
insert
(
_buf
.
end
(),
&
readbuf
[
0
],
&
readbuf
[
static_cast
<
size_t
>
(
bytesRead
)]);
if
(
_awaitedSize
==
0
)
{
if
(
_buf
.
size
()
<
4
)
{
return
true
;
}
_awaitedSize
=
(
_buf
[
0
]
<<
24
|
_buf
[
1
]
<<
16
|
_buf
[
2
]
<<
8
|
_buf
[
3
]);
_buf
.
erase
(
_buf
.
begin
(),
_buf
.
begin
()
+
4
);
}
if
(
_buf
.
size
()
>=
_awaitedSize
)
{
_messageReceivedCallback
(
std
::
vector
<
uint8_t
>
(
_buf
.
begin
(),
_buf
.
begin
()
+
_awaitedSize
));
_buf
.
erase
(
_buf
.
begin
(),
_buf
.
begin
()
+
_awaitedSize
);
_awaitedSize
=
0
;
}
return
true
;
}
relayserver/TcpProtocol.h
0 → 100644
View file @
55375cdf
#pragma once
#include
<stddef.h>
#include
<stdint.h>
#include
<functional>
#include
<deque>
#include
<vector>
class
TcpProtocol
{
public:
typedef
std
::
function
<
void
(
std
::
vector
<
uint8_t
>
data
)
>
MessageReceivedCallback
;
void
SetMessageReceivedCallback
(
MessageReceivedCallback
callback
);
bool
Read
(
int
socket
);
private:
size_t
_awaitedSize
=
0
;
std
::
deque
<
uint8_t
>
_buf
;
MessageReceivedCallback
_messageReceivedCallback
;
};
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment