From 7243969fb8747d294125229ad03e3330028afb94 Mon Sep 17 00:00:00 2001
From: i7-8700 <1281261856@qq.com>
Date: Fri, 18 Sep 2020 06:42:13 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E7=B2=BE=E7=A1=AE=E7=9A=84=E6=80=A7?=
 =?UTF-8?q?=E8=83=BD=E6=B5=8B=E8=AF=95?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 examples/bench_client/bench_client.cpp        | 50 ++++++++++---------
 .../bench_client/bench_client.vcxproj.user    |  2 +-
 examples/bench_client_ex/bench_client_ex.cpp  |  5 +-
 .../server_demo_libevent.cpp                  |  5 +-
 .../server_demo_libevent_linux.vcxproj.user   |  2 +-
 5 files changed, 35 insertions(+), 29 deletions(-)

diff --git a/examples/bench_client/bench_client.cpp b/examples/bench_client/bench_client.cpp
index 56fc119..d46aacb 100644
--- a/examples/bench_client/bench_client.cpp
+++ b/examples/bench_client/bench_client.cpp
@@ -71,8 +71,8 @@ struct Session {
 	int id = 0;
 	std::string acct = {};
 	AdemcoId ademco_id = 0;
-	ADEMCO_EVENT type = EVENT_I_AM_GPRS;
-	ADEMCO_EVENT status = EVENT_ARM;
+	//ADEMCO_EVENT type = EVENT_I_AM_GPRS;
+	//ADEMCO_EVENT status = EVENT_ARM;
 	uint16_t seq = 0;
 
 	uint16_t nextSeq() { if (++seq == 10000) { seq = 1; } return seq; }
@@ -106,21 +106,6 @@ void handle_ademco_msg(Session* session, bufferevent* bev)
 	if (print_data) {
 		printf("session #%d recv:%s\n", session->id, session->packet.toString().data());
 	}
-	auto output = bufferevent_get_output(bev);
-	switch (session->packet.id_.eid_) {
-	case AdemcoMsgId::id_ack:
-		{
-			auto now = std::chrono::steady_clock::now();
-			char buf[1024];
-			session->lastTimePacketSize = session->packet.make_null(buf, sizeof(buf), session->nextSeq(), session->acct, session->ademco_id);
-			evbuffer_add(output, buf, session->lastTimePacketSize);
-			auto us = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now() - now).count();
-			session->encodeTime += us;
-		}
-		break;
-	default:
-		break;
-	}
 }
 
 void readcb(struct bufferevent* bev, void* user_data)
@@ -131,11 +116,12 @@ void readcb(struct bufferevent* bev, void* user_data)
 	while (1) {
 		size_t len = evbuffer_get_length(input);
 		if (len < 9) { return; }
-		char buff[1024] = { 0 };
-		evbuffer_copyout(input, buff, std::min(len, sizeof(buff)));
+		char buff[4096] = { 0 };
+		len = std::min(len, sizeof(buff));
+		evbuffer_copyout(input, buff, len);
 		size_t cb_commited = 0;
 		auto now = std::chrono::steady_clock::now();
-		auto res = session->packet.parse(buff, 1024, cb_commited);
+		auto res = session->packet.parse(buff, len, cb_commited);
 		auto us = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now() - now).count();
 		session->decodeTime += us;
 		bool done = false;
@@ -163,9 +149,20 @@ void readcb(struct bufferevent* bev, void* user_data)
 void writecb(struct bufferevent* bev, void* user_data)
 {
 	auto session = (Session*)user_data;
-	if (0 == evbuffer_get_length(bufferevent_get_output(bev))) {
+	auto output = bufferevent_get_output(bev);
+	if (0 == evbuffer_get_length(output)) {
 		session->bytesWritten += session->lastTimePacketSize;
 		session->msgWritten++;
+
+		auto now = std::chrono::steady_clock::now();
+		char buf[1024];
+		session->lastTimePacketSize = session->packet.make_null(buf, sizeof(buf), session->nextSeq(), session->acct, session->ademco_id);
+		evbuffer_add(output, buf, session->lastTimePacketSize);
+		auto us = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now() - now).count();
+		session->encodeTime += us;
+		if (print_data) {
+			printf("session #%d send:%s\n", session->id, session->packet.toString().data());
+		}
 	}
 }
 
@@ -194,7 +191,7 @@ void eventcb(struct bufferevent* bev, short events, void* user_data)
 				printf("All connected\n");
 			}
 		}
-		char buf[1024];
+		/*char buf[1024];
 		session->lastTimePacketSize = session->packet.make_hb(buf, sizeof(buf), 
 															  session->nextSeq(), session->acct, session->ademco_id, 0, session->status, 0);
 		if (print_data) {
@@ -205,7 +202,14 @@ void eventcb(struct bufferevent* bev, short events, void* user_data)
 		if (print_data) {
 			printf("session #%d send:%s\n", session->id, session->packet.toString().data());
 		}
+		evbuffer_add(bufferevent_get_output(bev), buf, session->lastTimePacketSize);*/
+		char buf[1024];
+		session->lastTimePacketSize = session->packet.make_null(buf, sizeof(buf),
+																session->nextSeq(), session->acct, session->ademco_id);
 		evbuffer_add(bufferevent_get_output(bev), buf, session->lastTimePacketSize);
+		if (print_data) {
+			printf("session #%d send:%s\n", session->id, session->packet.toString().data());
+		}
 
 		auto base = bufferevent_get_base(bev);
 		session->timer = event_new(base, -1, EV_TIMEOUT, timer_cb, session);
@@ -251,7 +255,7 @@ void eventcb(struct bufferevent* bev, short events, void* user_data)
 				   "Decode average time %.2f us, %.2f packets/s\n",
 				   totalBytesRead / 1024.0 / 1024, totalMsgRead, totalBytesWrite / 1024.0 / 1024, totalMsgWritten,
 				   (totalBytesRead + totalBytesWrite) * 1.0 / (totalMsgRead + totalMsgWritten),
-				   totalBytesRead * 1.0 / (timeout * 1024.0 * 1024), totalMsgRead * 1.0 / timeout,
+				   (totalBytesRead + totalBytesWrite) * 1.0 / (timeout * 1024.0 * 1024), (totalBytesRead + totalBytesWrite) * 1.0 / timeout,
 				   encodeSpeed, 1000000.0 / encodeSpeed,
 				   decodeSpeed, 1000000.0 / decodeSpeed);
 		}
diff --git a/examples/bench_client/bench_client.vcxproj.user b/examples/bench_client/bench_client.vcxproj.user
index 6c2ab10..df3812f 100644
--- a/examples/bench_client/bench_client.vcxproj.user
+++ b/examples/bench_client/bench_client.vcxproj.user
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <LocalDebuggerCommandArguments>192.168.1.90 12345 1 1 0 30 1</LocalDebuggerCommandArguments>
+    <LocalDebuggerCommandArguments>192.168.1.166 12345 6 1200 30 0</LocalDebuggerCommandArguments>
     <DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
diff --git a/examples/bench_client_ex/bench_client_ex.cpp b/examples/bench_client_ex/bench_client_ex.cpp
index 0aeba38..6a170b9 100644
--- a/examples/bench_client_ex/bench_client_ex.cpp
+++ b/examples/bench_client_ex/bench_client_ex.cpp
@@ -139,10 +139,11 @@ void readcb(struct bufferevent* bev, void* user_data)
 		size_t len = evbuffer_get_length(input);
 		if (len < 9) { return; }
 		char buff[1024] = { 0 };
-		evbuffer_copyout(input, buff, std::min(len, sizeof(buff)));
+		len = std::min(len, sizeof(buff));
+		evbuffer_copyout(input, buff, len);
 		size_t cb_commited = 0;
 		auto now = std::chrono::steady_clock::now();
-		auto res = session->packet.parse(buff, 1024, cb_commited);
+		auto res = session->packet.parse(buff, len, cb_commited);
 		auto us = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::steady_clock::now() - now).count();
 		session->decodeTime += us;
 		bool done = false;
diff --git a/examples/server_demo_libevent/server_demo_libevent.cpp b/examples/server_demo_libevent/server_demo_libevent.cpp
index 80042fd..a46c820 100644
--- a/examples/server_demo_libevent/server_demo_libevent.cpp
+++ b/examples/server_demo_libevent/server_demo_libevent.cpp
@@ -572,9 +572,10 @@ void readcb(struct bufferevent* bev, void* user_data)
 		size_t len = evbuffer_get_length(input);
 		if (len < 9) { return; }
 		char buff[1024] = { 0 };
-		evbuffer_copyout(input, buff, std::min(len, sizeof(buff)));
+		len = std::min(len, sizeof(buff));
+		evbuffer_copyout(input, buff, len);
 		size_t cb_commited = 0;
-		auto res = context->packet.parse(buff, 1024, cb_commited);
+		auto res = context->packet.parse(buff, len, cb_commited);
 		bool done = false;
 		switch (res) {
 		case ademco::ParseResult::RESULT_OK:
diff --git a/examples/server_demo_libevent_linux/server_demo_libevent_linux.vcxproj.user b/examples/server_demo_libevent_linux/server_demo_libevent_linux.vcxproj.user
index 54fb827..bfca9a1 100644
--- a/examples/server_demo_libevent_linux/server_demo_libevent_linux.vcxproj.user
+++ b/examples/server_demo_libevent_linux/server_demo_libevent_linux.vcxproj.user
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
-    <RemoteTarget>1735438401;www.hbwechatserver.com (username=, port=22, authentication=Password)</RemoteTarget>
+    <RemoteTarget>-2055866198;192.168.1.166 (username=, port=22, authentication=Password)</RemoteTarget>
     <RemoteDebuggerCommand>server_demo_libevent_linux</RemoteDebuggerCommand>
     <RemoteDebuggerWorkingDirectory>/root/vsprojects/server_demo_libevent_linux/examples/server_demo_libevent_linux/bin/x64/Debug</RemoteDebuggerWorkingDirectory>
     <DebuggerFlavor>LinuxDebugger</DebuggerFlavor>
-- 
2.18.1