Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
A
ademco_hb
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
captainwong
ademco_hb
Commits
1bbf1a2d
Commit
1bbf1a2d
authored
Jul 28, 2020
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix
parent
df7f0a82
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
35 additions
and
17 deletions
+35
-17
bench_client.cpp
examples/bench_client/bench_client.cpp
+35
-17
No files found.
examples/bench_client/bench_client.cpp
View file @
1bbf1a2d
...
...
@@ -6,6 +6,7 @@ Ping Pong Client
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/syscall.h>
#else
# ifndef _CRT_SECURE_NO_WARNINGS
# define _CRT_SECURE_NO_WARNINGS
...
...
@@ -27,6 +28,7 @@ Ping Pong Client
#include <chrono>
#include <thread>
#include <mutex>
#include <unordered_set>
#include <event2/listener.h>
#include <event2/buffer.h>
...
...
@@ -42,6 +44,14 @@ Ping Pong Client
using
namespace
ademco
;
uint64_t
gettid
()
{
#ifdef _WIN32
return
static_cast
<
uint64_t
>
(
GetCurrentThreadId
());
#else
return
static_cast
<
uint64_t
>
(
::
syscall
(
SYS_gettid
));
#endif
}
int
thread_count
=
0
;
int
session_count
=
0
;
int
session_connected
=
0
;
...
...
@@ -57,6 +67,7 @@ int64_t totalDecodeTime = 0;
struct
Session
{
int
id
=
0
;
int
fd
=
0
;
std
::
string
acct
=
{};
size_t
ademco_id
=
0
;
uint16_t
seq
=
0
;
...
...
@@ -72,7 +83,6 @@ struct Session {
int64_t
decodeTime
=
0
;
};
void
handle_ademco_msg
(
Session
*
session
,
bufferevent
*
bev
)
{
auto
output
=
bufferevent_get_output
(
bev
);
...
...
@@ -146,29 +156,32 @@ void writecb(struct bufferevent* bev, void* user_data)
void
timer_cb
(
evutil_socket_t
fd
,
short
what
,
void
*
arg
)
{
auto
bev
=
(
bufferevent
*
)
arg
;
Session
*
session
=
nullptr
;
bufferevent_getcb
(
bev
,
nullptr
,
nullptr
,
nullptr
,
(
void
**
)
&
session
);
printf
(
"
client
#%d timeout
\n
"
,
session
->
id
);
auto
session
=
(
Session
*
)
arg
;
//
Session* session = nullptr;
//
bufferevent_getcb(bev, nullptr, nullptr, nullptr, (void**)&session);
printf
(
"
session
#%d timeout
\n
"
,
session
->
id
);
//auto bev = (bufferevent*)arg;
//bufferevent_free(bev);
//evutil_closesocket(fd);
bufferevent_disable
(
bev
,
EV_WRITE
);
//
bufferevent_disable(bev, EV_WRITE);
// SHUT_WR
shutdown
(
fd
,
1
);
shutdown
(
session
->
fd
,
1
);
}
void
eventcb
(
struct
bufferevent
*
bev
,
short
events
,
void
*
user_data
)
{
auto
session
=
(
Session
*
)
user_data
;
printf
(
"eventcb #%d events=%04X
\n
"
,
session
->
id
,
events
);
printf
(
"eventcb
on session
#%d events=%04X
\n
"
,
session
->
id
,
events
);
if
(
events
&
BEV_EVENT_CONNECTED
)
{
printf
(
"client #%d connected
\n
"
,
session
->
id
);
int
fd
=
bufferevent_getfd
(
bev
);
session
->
fd
=
fd
;
printf
(
"session #%d connected fd=%d
\n
"
,
session
->
id
,
fd
);
{
std
::
lock_guard
<
std
::
mutex
>
lg
(
mutex
);
if
(
++
session_connected
==
session_count
)
{
printf
(
"live connections %d
\n
"
,
++
session_connected
);
if
(
session_connected
==
session_count
*
thread_count
)
{
printf
(
"All connected
\n
"
);
}
}
...
...
@@ -176,7 +189,7 @@ void eventcb(struct bufferevent* bev, short events, void* user_data)
session
->
lastTimePacketSize
=
session
->
packet
.
make_null
(
buf
,
sizeof
(
buf
),
session
->
seq
,
session
->
acct
,
session
->
ademco_id
);
evbuffer_add
(
bufferevent_get_output
(
bev
),
buf
,
session
->
lastTimePacketSize
);
auto
base
=
bufferevent_get_base
(
bev
);
auto
timer
=
event_new
(
base
,
bufferevent_getfd
(
bev
),
EV_TIMEOUT
,
timer_cb
,
bev
);
auto
timer
=
event_new
(
base
,
-
1
,
EV_TIMEOUT
,
timer_cb
,
session
);
if
(
!
timer
)
{
fprintf
(
stderr
,
"create timer failed
\n
"
);
event_base_loopbreak
(
base
);
...
...
@@ -186,9 +199,9 @@ void eventcb(struct bufferevent* bev, short events, void* user_data)
event_add
(
timer
,
&
tv
);
return
;
}
else
if
(
events
&
(
BEV_EVENT_EOF
))
{
printf
(
"
Connect
ion #%d closed.
\n
"
,
session
->
id
);
printf
(
"
sess
ion #%d closed.
\n
"
,
session
->
id
);
}
else
if
(
events
&
BEV_EVENT_ERROR
)
{
printf
(
"Got an error on
the connect
ion #%d: %s
\n
"
,
printf
(
"Got an error on
sess
ion #%d: %s
\n
"
,
session
->
id
,
strerror
(
errno
));
}
...
...
@@ -201,7 +214,9 @@ void eventcb(struct bufferevent* bev, short events, void* user_data)
totalEncodeTime
+=
session
->
encodeTime
;
totalDecodeTime
+=
session
->
decodeTime
;
if
(
--
session_connected
==
0
)
{
--
session_connected
;
printf
(
"live connections %d
\n
"
,
session_connected
);
if
(
session_connected
==
0
)
{
printf
(
"All disconnected
\n
"
);
double
encodeSpeed
=
totalEncodeTime
*
1.0
/
totalMsgWritten
;
double
decodeSpeed
=
totalDecodeTime
*
1.0
/
totalMsgRead
;
...
...
@@ -220,7 +235,7 @@ void eventcb(struct bufferevent* bev, short events, void* user_data)
delete
session
;
bufferevent_free
(
bev
);
event_base_loopbreak
(
bufferevent_get_base
(
bev
));
//event_base_loopbreak(bufferevent_get_base(bev));
}
event_base
*
init_thread
(
const
sockaddr_in
&
sin
,
int
session_start
,
int
session_per_thread
)
...
...
@@ -319,8 +334,11 @@ int main(int argc, char** argv)
std
::
vector
<
std
::
thread
>
threads
;
for
(
int
i
=
1
;
i
<
thread_count
;
i
++
)
{
auto
base
=
init_thread
(
sin
,
i
*
thread_count
,
session_per_thread
);
threads
.
emplace_back
(
std
::
thread
([
&
base
]()
{
event_base_dispatch
(
base
);
}));
auto
base
=
init_thread
(
sin
,
i
*
session_per_thread
,
session_per_thread
);
threads
.
push_back
(
std
::
thread
([](
event_base
*
base
)
{
//printf("thread %lld created\n", gettid());
event_base_dispatch
(
base
);
},
base
));
}
auto
main_thread_base
=
init_thread
(
sin
,
0
,
session_per_thread
);
...
...
Write
Preview
Markdown
is supported
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