From 58d904a328c0d849769b483e901a0be9426b8209 Mon Sep 17 00:00:00 2001
From: liuxiaolong <liuxiaolong@aiotlink.com>
Date: 星期二, 20 七月 2021 20:20:44 +0800
Subject: [PATCH] 调整Request C.BHFree的位置

---
 box/tcp_proxy.cpp |   67 ++++++---------------------------
 1 files changed, 13 insertions(+), 54 deletions(-)

diff --git a/box/tcp_proxy.cpp b/box/tcp_proxy.cpp
index 2e95a3b..803874d 100644
--- a/box/tcp_proxy.cpp
+++ b/box/tcp_proxy.cpp
@@ -16,64 +16,23 @@
  * =====================================================================================
  */
 #include "tcp_proxy.h"
-#include "defs.h"
-#include "shm_socket.h"
 #include "tcp_connection.h"
 
-TcpProxy::TcpProxy() :
-    run_(false) {}
-
-TcpProxy::~TcpProxy() {}
-
-bool TcpProxy::Start(bhome_shm::SharedMemory &shm)
+bool TcpProxy::Request(const std::string &ip, int port, std::string &&content, ReplyCB const &cb)
 {
-	Stop();
-	bool cur = false;
-	if (!run_.compare_exchange_strong(cur, true)) { return false; }
-
-	auto &mq = GetCenterInfo(shm)->mq_tcp_proxy_;
-	local_.reset(new ShmSocket(mq.offset_, shm, mq.id_));
-	auto localProc = [this](ShmSocket &sock, MsgI &msg, BHMsgHead &head) {
-		auto &dest = head.dest();
-		if (dest.ip().empty() || dest.port() == 0) { return; }
-		bool r = Send(dest.ip(), dest.port(), msg.content());
-		// TODO check send fail.
-	};
-	local_->Start(1, localProc);
-
-	auto proxyProc = [this]() {
-		while (run_) {
-			io_context_.run_one_for(std::chrono::milliseconds(100));
-		}
-	};
-	return true;
-}
-
-void TcpProxy::Stop()
-{
-	local_.reset();
-
-	bool cur = true;
-	if (run_.compare_exchange_strong(cur, false)) {
-		if (worker_.joinable()) {
-			worker_.join();
-		}
+	if (content.empty()) { return false; }
+	try {
+		tcp::endpoint dest(ip::address::from_string(ip), port);
+		TcpRequest1::Create(io_, dest, std::move(content), cb);
+		LOG_TRACE() << "tcp request start " << ip << ':' << port;
+		return true;
+	} catch (std::exception &e) {
+		LOG_ERROR() << "proxy request exception: " << e.what();
+		return false;
 	}
 }
 
-bool TcpProxy::Send(const std::string &ip, int port, std::string &&content)
+bool TcpProxy::Publish(const std::string &ip, int port, std::string &&content)
 {
-	if (content.empty()) { return false; }
-
-	tcp::endpoint dest(ip::address::from_string(ip), port);
-	TcpRequest1::Create(io_context_, dest, std::move(content));
-
-	// char tag[sizeof(kBHTcpServerTag)] = {0};
-
-	// int n = read(sock, tag, sizeof(tag));
-	// if (n == sizeof(tag) && memcmp(tag, &kBHTcpServerTag, sizeof(tag)) == 0) {
-	// 	send(sock, content.data(), content.size(), 0);
-	// 	connections_[addr].io_info_.h_ = [this, sock](int events) { OnReply(sock); };
-	// 	// success
-	// }
-}
+	return Request(ip, port, std::move(content), ReplyCB());
+}
\ No newline at end of file

--
Gitblit v1.8.0