From 026bbfaf2b5d73a26b8e2fa49158883ef64c211b Mon Sep 17 00:00:00 2001
From: lichao <lichao@aiotlink.com>
Date: 星期四, 27 五月 2021 13:51:26 +0800
Subject: [PATCH] tcp server call center to send proxy requests.

---
 box/tcp_connection.h |   37 ++++++++++++++++++++++++++-----------
 1 files changed, 26 insertions(+), 11 deletions(-)

diff --git a/box/tcp_connection.h b/box/tcp_connection.h
index b3b8344..5aa93a4 100644
--- a/box/tcp_connection.h
+++ b/box/tcp_connection.h
@@ -18,46 +18,61 @@
 #ifndef TCP_CONNECTION_H373GIL5
 #define TCP_CONNECTION_H373GIL5
 
+#include "bh_util.h"
+#include "node_center.h"
 #include "tcp_common.h"
 #include <functional>
 #include <memory>
 
+class ShmSocket;
 class TcpRequest1 : public std::enable_shared_from_this<TcpRequest1>
 {
 public:
-	static void Create(boost::asio::io_context &io, tcp::endpoint const &addr, std::string request)
+	static void Create(boost::asio::io_context &io, tcp::endpoint const &addr, std::string request, ShmSocket &shm_socket)
 	{
-		std::make_shared<TcpRequest1>(io, addr, std::move(request))->Connect();
+		std::make_shared<TcpRequest1>(io, addr, std::move(request), shm_socket)->Start();
 	}
 
-	TcpRequest1(boost::asio::io_context &io, tcp::endpoint const &addr, std::string request);
+	TcpRequest1(boost::asio::io_context &io, tcp::endpoint const &addr, std::string request, ShmSocket &shm_socket) :
+	    socket_(io), shm_socket_(shm_socket), remote_(addr), request_(std::move(request)) {}
+	void OnError(bserror_t ec);
 
 private:
-	void Connect();
+	void Start();
 	void Close();
-	void SendRequest();
-	void ReadReply();
+	void OnRead(size_t size);
 
 	tcp::socket socket_;
+	ShmSocket &shm_socket_; // send reply
 	tcp::endpoint remote_;
 	std::string request_;
-	std::vector<char> buffer_;
+	std::vector<char> recv_buffer_;
+	size_t recv_len_ = 0;
 };
 
+class NodeCenter;
 class TcpReply1 : public std::enable_shared_from_this<TcpReply1>
 {
 public:
-	static void Create(tcp::socket sock)
+	typedef std::shared_ptr<Synced<NodeCenter>> CenterPtr;
+	static void Create(tcp::socket sock, CenterPtr pscenter)
 	{
-		std::make_shared<TcpReply1>(std::move(sock))->Start();
+		std::make_shared<TcpReply1>(std::move(sock), pscenter)->Start();
 	}
 
-	TcpReply1(tcp::socket sock);
-	void Start();
+	TcpReply1(tcp::socket sock, CenterPtr pscenter) :
+	    socket_(std::move(sock)), pscenter_(pscenter) {}
+	void OnError(bserror_t ec);
 
 private:
+	void Start();
+	void Close();
+	void OnRead(size_t size);
+
 	tcp::socket socket_;
+	CenterPtr pscenter_;
 	std::vector<char> recv_buffer_;
+	uint32_t recv_len_ = 0;
 	std::string send_buffer_;
 };
 

--
Gitblit v1.8.0