From 15cb2c14c018eae56b2c301dba9b599bf5ced9e3 Mon Sep 17 00:00:00 2001
From: yhy <yhy1uj@163.com>
Date: Fri, 7 Feb 2025 15:35:03 +0800
Subject: [PATCH] fix buffer size , logger modify

---
 CMakeLists.txt                      |  1 +
 includes/log/logger.hpp             | 32 ++++++++++++---
 includes/net/reactor.hpp            |  2 +
 includes/net/tcp/tcp_buffer.hpp     |  3 +-
 includes/net/tcp/tcp_client.hpp     |  4 +-
 src/net/reactor.cc                  |  9 ++++
 src/net/tcp/abstract_tcp_connect.cc |  2 +-
 src/net/tcp/tcp_buffer.cc           |  9 ++--
 src/net/tcp/tcp_client.cc           | 24 ++++++-----
 test/clienttest/clienttest.cc       | 64 +++++++++++++++++++++++++----
 test/servertest/servertest.cc       |  2 +-
 11 files changed, 117 insertions(+), 35 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 40a0df3..15cdeb3 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -106,4 +106,5 @@ add_executable(test_tinyrpc
         ${TEST_SRC_LIST}
 )
 
+
 target_link_libraries(test_tinyrpc PRIVATE tinyrpc)
diff --git a/includes/log/logger.hpp b/includes/log/logger.hpp
index f3aaef4..49182dc 100644
--- a/includes/log/logger.hpp
+++ b/includes/log/logger.hpp
@@ -4,17 +4,37 @@
 
 // #define LOGGER (std::cout << __FILE__ << ":" << __LINE__)
 
-struct logger {
-    logger() = default;
+struct Logger {
+    Logger() = default;
 
-    template<typename T>
-    std::ostream& operator << (T&& msg) {
+    template <typename T>
+    std::ostream& operator<<(T&& msg)
+    {
         return std::cout << msg;
     }
 
-    ~logger() {
+    ~Logger()
+    {
         std::cout << std::endl;
     }
+
 };
 
-#define logger() (logger() << __FILE__ << ":" << __LINE__ << " ")
\ No newline at end of file
+struct IgnoreLogger {
+    IgnoreLogger() = default;
+
+    template <typename T>
+    IgnoreLogger& operator<<(T&& msg)
+    {
+        return *this;
+    }
+
+    ~IgnoreLogger() = default;
+    
+};
+
+
+
+#define logger() (Logger() << __FILE__ << ":" << __LINE__ << " ")
+
+// #define logger1() (Logger() << __FILE__ << ":" << __LINE__ << " ")
diff --git a/includes/net/reactor.hpp b/includes/net/reactor.hpp
index fc4a581..9ecc0d2 100644
--- a/includes/net/reactor.hpp
+++ b/includes/net/reactor.hpp
@@ -11,6 +11,7 @@
 
 namespace tinyrpc {
     class FdEvent;
+    class Coroutine;
     class Reactor {
         
     public:
@@ -26,6 +27,7 @@ namespace tinyrpc {
         void addFdEvent(FdEvent* fdEvent);
         void delFdEvent(FdEvent* fdEvent);
         void modFdEvent(FdEvent* fdEvent);
+        void addCoroutine(Coroutine& cor);
         void stop();
         void rouse();
         void addTask(Task task, bool needRouse = false);
diff --git a/includes/net/tcp/tcp_buffer.hpp b/includes/net/tcp/tcp_buffer.hpp
index 721b762..3a75dc3 100644
--- a/includes/net/tcp/tcp_buffer.hpp
+++ b/includes/net/tcp/tcp_buffer.hpp
@@ -17,8 +17,7 @@ namespace tinyrpc {
         }
         void reserved(std::size_t spaceSize) { // 预留空间
             if(getWriteable() <= spaceSize) {
-                
-                resize((getReadable() + spaceSize) * 2);
+                resize((getReadable() + spaceSize) * 1.5);
             }
             
         }
diff --git a/includes/net/tcp/tcp_client.hpp b/includes/net/tcp/tcp_client.hpp
index ac016b6..1541e8b 100644
--- a/includes/net/tcp/tcp_client.hpp
+++ b/includes/net/tcp/tcp_client.hpp
@@ -17,9 +17,9 @@ namespace tinyrpc {
         const NetAddress& getPeerAddr() const {return m_peer_addr;}
         bool writeToSendBuffer(const AbstractData& data);
         int sendAndRecvData(const std::string& msg_req, std::shared_ptr<AbstractData>& res);
-        void addCoroutine(Coroutine& cor);
+        // void addCoroutine(Coroutine& cor);
         bool connectToServer();
-        void start();
+        // void start();
         ~TcpClient();
     private:
         int m_fd{-1};
diff --git a/src/net/reactor.cc b/src/net/reactor.cc
index 3dca607..57ea0fd 100644
--- a/src/net/reactor.cc
+++ b/src/net/reactor.cc
@@ -1,4 +1,5 @@
 #include "reactor.hpp"
+#include "coroutine.hpp"
 #include "fd_event.hpp"
 #include "logger.hpp"
 // #include "coroutine_hook.hpp"
@@ -266,6 +267,14 @@ namespace tinyrpc {
             rouse();
     }
 
+    void Reactor::addCoroutine(Coroutine& cor) {
+
+        Reactor::Task task = [&cor] {
+            cor.resume();
+        };
+        addTask(task);
+    }
+
     Reactor::~Reactor()
     {
         m_is_stop = true;
diff --git a/src/net/tcp/abstract_tcp_connect.cc b/src/net/tcp/abstract_tcp_connect.cc
index ea994bc..770a89c 100644
--- a/src/net/tcp/abstract_tcp_connect.cc
+++ b/src/net/tcp/abstract_tcp_connect.cc
@@ -35,7 +35,7 @@ namespace tinyrpc {
     }
 
     void AbstractTcpConnection::clearClient() {
-        logger() << "clearClient";
+        logger() << "clearClient:" << m_fdEvent->getFd();
         m_state = State::Disconnected;
         m_reactor.delFdEvent(m_fdEvent);
         m_fdEvent->reset();
diff --git a/src/net/tcp/tcp_buffer.cc b/src/net/tcp/tcp_buffer.cc
index 4a1218b..2475ed8 100644
--- a/src/net/tcp/tcp_buffer.cc
+++ b/src/net/tcp/tcp_buffer.cc
@@ -15,7 +15,8 @@ namespace tinyrpc {
         m_buffer.swap(newBuffer);
         m_write_index -= m_read_index;
         m_read_index = 0;
-        
+        logger() << " adjustBuffer end size=" << m_buffer.size();
+
     }
 
 
@@ -29,7 +30,7 @@ namespace tinyrpc {
         if(getWriteable() < m_read_index) {
             adjustBuffer();
         }
-
+        logger() << " readOffset end size=" << m_buffer.size();
     }
 
     void TcpBuffer::writeOffset(std::size_t offset)  {
@@ -43,6 +44,7 @@ namespace tinyrpc {
         if(getWriteable() < m_read_index) {
             adjustBuffer();
         }
+        logger() << " writeOffset end size=" << m_buffer.size();
 
     }
 
@@ -91,9 +93,10 @@ namespace tinyrpc {
         std::vector<char> newBuffer(size);
         int cnt = std::min(size, getReadable());
         memcpy(newBuffer.data(), getReadAddress(), cnt);
+        m_buffer.swap(newBuffer);
         m_write_index = cnt;
         m_read_index = 0;
-        logger() << " resize end";
+        // logger() << " resize end size=" << m_buffer.size();
     }
 
 }
\ No newline at end of file
diff --git a/src/net/tcp/tcp_client.cc b/src/net/tcp/tcp_client.cc
index fe6fbca..7425dd8 100644
--- a/src/net/tcp/tcp_client.cc
+++ b/src/net/tcp/tcp_client.cc
@@ -30,8 +30,9 @@ namespace tinyrpc {
     }
 
     TcpClient::~TcpClient() {
+        logger() << "~TcpClient";
         m_reactor.delFdEvent(FdEventPool::getInstance()->getFdEvent(m_fd));
-        if(m_fd != -1) close(m_fd);
+        // if(m_fd != -1) close(m_fd);
         delete m_coder;
     }
     bool TcpClient::connectToServer() {
@@ -74,15 +75,16 @@ namespace tinyrpc {
     }
 
 
-    void TcpClient::addCoroutine(Coroutine& cor) {
-        Reactor::Task task = [&cor] {
-            cor.resume();
-        };
+    // void TcpClient::addCoroutine(Coroutine& cor) {
 
-        m_reactor.addTask(task);
-    }
-    void TcpClient::start() {
-        Coroutine::getMainCoroutine();
-        m_reactor.loop();
-    }
+    //     Reactor::Task task = [&cor] {
+    //         cor.resume();
+    //     };
+    //     m_reactor.addTask(task);
+    // }
+
+    // void TcpClient::start() {
+    //     Coroutine::getMainCoroutine();
+    //     m_reactor.loop();
+    // }
 }
\ No newline at end of file
diff --git a/test/clienttest/clienttest.cc b/test/clienttest/clienttest.cc
index fc71eea..889491b 100644
--- a/test/clienttest/clienttest.cc
+++ b/test/clienttest/clienttest.cc
@@ -12,12 +12,14 @@
 using namespace std;
 using namespace tinyrpc;
 
-int n = 10;
+int n = 100000;
 
-void test()
-{
-    NetAddress addr("127.0.0.1", 9001);
-    TinypbChannel channel(addr);
+// TcpClient client(NetAddress("127.0.0.1", 9001));
+
+
+void test1() {
+    TinypbChannel channel(NetAddress("127.0.0.1", 9001));
+    int n = 10;
     while (n--) {
         logger() << "============== test no:" << n << "===============";
 
@@ -55,12 +57,56 @@ void test()
     }
 }
 
+void test()
+{
+    
+    TinypbChannel channel(NetAddress("127.0.0.1", 9001));
+    while (n--) {
+        logger() << "============== test no:" << n << "===============";
+
+        queryNameReq req_name;
+        req_name.set_req_no(20220315);
+        req_name.set_id(1100110001);
+        req_name.set_type(1);
+        queryNameRes res_name;
+
+        queryAgeReq req_age;
+        req_age.set_req_no(00001111);
+        req_age.set_id(6781);
+        queryAgeRes res_age;
+
+        TinypbClosure cb([]() {
+            logger() << "==========================";
+            logger() << "succ call rpc";
+            logger() << "==========================";
+        });
+
+        QueryService_Stub stub(&channel);
+        TinypbController rpc_controller;
+        
+        stub.query_name(&rpc_controller, &req_name, &res_name, &cb);
+        
+        if (rpc_controller.ErrorCode() != 0) {
+            logger() << "call rpc method query_name failed, errcode=" << rpc_controller.ErrorCode() << ",error=" << rpc_controller.ErrorText();
+        }
+        if (res_name.ret_code() != 0) {
+            logger() << "query name error, errcode=" << res_name.ret_code() << ", res_info=" << res_name.res_info();
+        } else {
+            logger() << "get res_name.age = " << res_name.name();
+        }
+        
+    }
+    // test1();
+}
+
 int main()
 {
-    // TcpServer server;
-    TcpClient client(NetAddress("127.0.0.1", 9001));
+
     Coroutine cor(test);
-    client.addCoroutine(cor);
-    client.start();
+
+    Reactor* reactor = Reactor::getReactor();
+    reactor->addCoroutine(cor);
+    reactor->loop();
+
     return 0;
 }
\ No newline at end of file
diff --git a/test/servertest/servertest.cc b/test/servertest/servertest.cc
index 4007d77..9aef48a 100644
--- a/test/servertest/servertest.cc
+++ b/test/servertest/servertest.cc
@@ -25,7 +25,7 @@ public:
         
         response->set_req_no(request->req_no());
         response->set_id(request->id());
-        response->set_name("yyy");
+        response->set_name("11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111y");
         
         done->Run();
     }