From 4deeafbd502dc3c57dab8ad6ca601a38a9e7f074 Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期二, 06 四月 2021 19:10:49 +0800
Subject: [PATCH] add uni center.

---
 utest/utest.cpp |   30 ++++++++++++++++++++++++++----
 1 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/utest/utest.cpp b/utest/utest.cpp
index 637ae26..8f2a7f5 100644
--- a/utest/utest.cpp
+++ b/utest/utest.cpp
@@ -1,9 +1,10 @@
 #include "defs.h"
 #include "pubsub.h"
 #include "pubsub_center.h"
-#include "reqrep.h"
 #include "reqrep_center.h"
 #include "socket.h"
+#include "topic_reply.h"
+#include "topic_request.h"
 #include "util.h"
 #include <atomic>
 #include <boost/uuid/uuid_generators.hpp>
@@ -181,15 +182,34 @@
 
 	auto Client = [&](const std::string &topic, const int nreq) {
 		SocketRequest client(shm);
+		std::atomic<int> count(0);
 		std::string reply;
+		auto onRecv = [&](const std::string &rep) {
+			reply = rep;
+			if (++count >= nreq) {
+				printf("count: %d\n", count.load());
+			}
+		};
+		client.StartWorker(onRecv, 2);
 		boost::timer::auto_cpu_timer timer;
 		for (int i = 0; i < nreq; ++i) {
-			if (!client.SyncRequest(topic, "data " + std::to_string(i), reply, 1000)) {
+			if (!client.AsyncRequest(topic, "data " + std::to_string(i), 1000)) {
 				printf("client request failed\n");
 			}
+
+			// if (!client.SyncRequest(topic, "data " + std::to_string(i), reply, 1000)) {
+			// 	printf("client request failed\n");
+			// } else {
+			// 	++count;
+			// }
 		}
-		printf("request %s %d done ", topic.c_str(), nreq);
+		do {
+			std::this_thread::yield();
+		} while (count.load() < nreq);
+		client.Stop();
+		printf("request %s %d done ", topic.c_str(), count.load());
 	};
+	std::atomic_uint64_t server_msg_count(0);
 	auto Server = [&](const std::string &name, const std::vector<std::string> &topics) {
 		SocketReply server(shm);
 		ProcInfo info;
@@ -198,7 +218,8 @@
 		if (!server.Register(info, topics, 100)) {
 			printf("register failed\n");
 		}
-		auto onData = [](const std::string &topic, const std::string &data, std::string &reply) {
+		auto onData = [&](const std::string &topic, const std::string &data, std::string &reply) {
+			++server_msg_count;
 			reply = topic + ':' + data;
 			return true;
 		};
@@ -215,6 +236,7 @@
 		clients.Launch(Client, t, 1000 * 100);
 	}
 	clients.WaitAll();
+	printf("clients done, server replyed: %d\n", server_msg_count.load());
 	run = false;
 	servers.WaitAll();
 }

--
Gitblit v1.8.0