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 - std::ostream& operator << (T&& msg) { + template + 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 + 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& 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 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(); }