add:添加基本client。

This commit is contained in:
taynpg 2024-12-11 23:23:48 +08:00
parent fc96f48ee0
commit 40c71fc22e
9 changed files with 83 additions and 33 deletions

View File

@ -11,7 +11,7 @@ ReflowComments: true
SpacesBeforeTrailingComments: 3 SpacesBeforeTrailingComments: 3
TabWidth: 4 TabWidth: 4
ConstructorInitializerAllOnOneLineOrOnePerLine: true ConstructorInitializerAllOnOneLineOrOnePerLine: true
ColumnLimit: 130 ColumnLimit: 1100
AllowShortBlocksOnASingleLine: Never AllowShortBlocksOnASingleLine: Never
AllowShortFunctionsOnASingleLine: None AllowShortFunctionsOnASingleLine: None
AllowShortEnumsOnASingleLine: false AllowShortEnumsOnASingleLine: false

View File

@ -7,4 +7,5 @@ if (MSVC)
add_compile_options(/source-charset:utf-8) add_compile_options(/source-charset:utf-8)
endif() endif()
add_executable(transmc main.cpp) add_executable(transmc main.cpp client.h client.cpp)
target_link_libraries(transmc PRIVATE trans_net trans_util)

25
client/client.cpp Normal file
View File

@ -0,0 +1,25 @@
#include "client.h"
#include <iostream>
CClient::CClient(const std::shared_ptr<spdlog::logger>& logger) : logger_(logger)
{
client_ = std::make_shared<CTcpClient>(io_context_, logger_);
}
CClient::~CClient()
{
}
void CClient::run()
{
std::thread thread([this]() { io_context_.run(); });
char line[512]{};
while (std::cin.getline(line, 512)) {
if (std::strstr(line, "end")) {
break;
}
}
client_->disconnect();
thread.join();
logger_->info("{} exit.", __FUNCTION__);
}

18
client/client.h Normal file
View File

@ -0,0 +1,18 @@
#pragma once
#include <net_base.h>
#include <util.h>
class CClient
{
public:
CClient(const std::shared_ptr<spdlog::logger>& logger);
~CClient();
public:
void run();
private:
std::shared_ptr<spdlog::logger> logger_;
asio::io_context io_context_;
std::shared_ptr<CTcpClient> client_;
};

View File

@ -1,8 +1,12 @@
#include <iostream> #include <iostream>
#include "client.h"
std::shared_ptr<spdlog::logger> g_Logger = nullptr;
int main() int main()
{ {
g_Logger = get_logger("client", "client.log");
CClient client(g_Logger);
client.run();
return 0; return 0;
} }

View File

@ -1,23 +1,23 @@
#include "net_base.h" #include "net_base.h"
CServer::CServer() CTcpServer::CTcpServer()
{ {
} }
CServer::~CServer() CTcpServer::~CTcpServer()
{ {
} }
CClient::CClient(asio::io_context& io_context, const std::shared_ptr<spdlog::logger>& logger) CTcpClient::CTcpClient(asio::io_context& io_context, const std::shared_ptr<spdlog::logger>& logger)
: logger_(logger), io_context_(io_context), socket_(io_context_) : logger_(logger), io_context_(io_context), socket_(io_context_)
{ {
} }
CClient::~CClient() CTcpClient::~CTcpClient()
{ {
} }
bool CClient::Connect(const std::string& host, const std::string& port) bool CTcpClient::connect(const std::string& host, const std::string& port)
{ {
try { try {
asio::ip::tcp::resolver resolver(io_context_); asio::ip::tcp::resolver resolver(io_context_);
@ -31,7 +31,7 @@ bool CClient::Connect(const std::string& host, const std::string& port)
} }
} }
void CClient::Disconnect() void CTcpClient::disconnect()
{ {
if (socket_.is_open()) { if (socket_.is_open()) {
try { try {
@ -43,7 +43,7 @@ void CClient::Disconnect()
} }
} }
bool CClient::Send(const char* data, int len) bool CTcpClient::send(const char* data, int len)
{ {
try { try {
auto send_size = asio::write(socket_, asio::buffer(data, len)); auto send_size = asio::write(socket_, asio::buffer(data, len));
@ -55,12 +55,12 @@ bool CClient::Send(const char* data, int len)
} }
} }
void CClient::register_func(ExFun_t& f) void CTcpClient::register_func(ExFun_t& f)
{ {
fun_ = f; fun_ = f;
} }
void CClient::Receive() void CTcpClient::async_recv()
{ {
auto self(shared_from_this()); auto self(shared_from_this());
socket_.async_read_some(asio::buffer(tmp_buf_), [this, self](std::error_code ec, std::size_t length) { socket_.async_read_some(asio::buffer(tmp_buf_), [this, self](std::error_code ec, std::size_t length) {
@ -74,7 +74,7 @@ void CClient::Receive()
} }
delete frame; delete frame;
} }
Receive(); async_recv();
} }
}); });
} }

View File

@ -2,30 +2,31 @@
#include "util.h" #include "util.h"
#include <asio.hpp> #include <asio.hpp>
#include <of_util.h>
#include <functional> #include <functional>
#include <mutex> #include <mutex>
#include <of_util.h>
using namespace ofen; using namespace ofen;
using ExFun_t = std::function<void(CFrameBuffer* buf)>; using ExFun_t = std::function<void(CFrameBuffer* buf)>;
class CServer class CTcpServer
{ {
public: public:
CServer(); CTcpServer();
~CServer(); ~CTcpServer();
}; };
class CClient : public std::enable_shared_from_this<CClient> class CTcpClient : public std::enable_shared_from_this<CTcpClient>
{ {
public: public:
CClient(asio::io_context& io_context, const std::shared_ptr<spdlog::logger>& logger); CTcpClient(asio::io_context& io_context, const std::shared_ptr<spdlog::logger>& logger);
~CClient(); ~CTcpClient();
public: public:
bool Connect(const std::string& host, const std::string& port); bool connect(const std::string& host, const std::string& port);
void Disconnect(); void disconnect();
bool Send(const char* data, int len); bool send(const char* data, int len);
void register_func(ExFun_t& f); void register_func(ExFun_t& f);
void Receive(); void async_recv();
private: private:
std::shared_ptr<spdlog::logger> logger_; std::shared_ptr<spdlog::logger> logger_;

View File

@ -17,12 +17,12 @@ int main()
} }
auto logger = get_logger("test1", "test1.log"); auto logger = get_logger("test1", "test1.log");
asio::io_context io_context; asio::io_context io_context;
CClient client(io_context, logger); CTcpClient client(io_context, logger);
if (!client.Connect("127.0.0.1", "8080")) { if (!client.connect("127.0.0.1", "8080")) {
return -1; return -1;
} }
logger->info("send len:{}", len); logger->info("send len:{}", len);
std::cout << client.Send(data, len) << std::endl; std::cout << client.send(data, len) << std::endl;
std::thread t([&io_context]() { io_context.run(); }); std::thread t([&io_context]() { io_context.run(); });
char line[512]{}; char line[512]{};
while (std::cin.getline(line, 512)) { while (std::cin.getline(line, 512)) {
@ -30,7 +30,7 @@ int main()
break; break;
} }
} }
client.Disconnect(); client.disconnect();
t.join(); t.join();
delete buf; delete buf;

View File

@ -7,6 +7,7 @@ void TestHandle(CFrameBuffer* buf)
{ {
g_Logger->info("type: {}", buf->type_); g_Logger->info("type: {}", buf->type_);
g_Logger->info("len: {}", buf->len_); g_Logger->info("len: {}", buf->len_);
g_Logger->info("{} exec. 中文测试", __FUNCTION__);
} }
int main() int main()
@ -14,14 +15,14 @@ int main()
char buffer[] = "Java"; char buffer[] = "Java";
g_Logger = get_logger("test1", "test1.log"); g_Logger = get_logger("test1", "test1.log");
asio::io_context io_context; asio::io_context io_context;
std::shared_ptr<CClient> client = std::make_shared<CClient>(io_context, g_Logger); std::shared_ptr<CTcpClient> client = std::make_shared<CTcpClient>(io_context, g_Logger);
if (!client->Connect("127.0.0.1", "8080")) { if (!client->connect("127.0.0.1", "8080")) {
return -1; return -1;
} }
client->Send(buffer, sizeof(buffer)); client->send(buffer, sizeof(buffer));
std::function<void(CFrameBuffer*)> func = TestHandle; std::function<void(CFrameBuffer*)> func = TestHandle;
client->register_func(func); client->register_func(func);
client->Receive(); client->async_recv();
std::thread t([&io_context]() { io_context.run(); }); std::thread t([&io_context]() { io_context.run(); });
char line[512]{}; char line[512]{};
while (std::cin.getline(line, 512)) { while (std::cin.getline(line, 512)) {
@ -29,7 +30,7 @@ int main()
break; break;
} }
} }
client->Disconnect(); client->disconnect();
t.join(); t.join();
return 0; return 0;
} }