Fixed:TcpModule.

This commit is contained in:
Fancy code 2024-04-11 20:25:49 +08:00
parent 7ebd2e3aa7
commit 7fd6c72864
3 changed files with 30 additions and 14 deletions

View File

@ -62,16 +62,14 @@ void TcpClientImpl::Init(void)
}
void TcpClientImpl::UnInit(void)
{
if (nullptr != mLoop) {
LogInfo("Stop loop.\n");
hloop_stop(mLoop);
if (nullptr != mIo) {
LogInfo("Close io.\n");
hio_close(mIo);
mIo = nullptr;
}
if (mTcpClientThread.joinable()) {
mTcpClientThread.join();
}
hloop_free(&mLoop);
mLoop = nullptr;
mIo = nullptr;
}
void TcpClientImpl::Readed(const void *data, size_t length)
{
@ -93,9 +91,11 @@ void TcpClientImpl::Closed(void)
{
if (nullptr != mParam.mClosedFunc) {
mParam.mClosedFunc(mObjectThis);
return;
}
LogWarning("mParam.mClosedFunc is null\n");
if (nullptr != mLoop) {
LogInfo("Stop loop.\n");
hloop_stop(mLoop);
}
}
void TcpClientImpl::Loop(void)
{
@ -104,6 +104,8 @@ void TcpClientImpl::Loop(void)
return;
}
hloop_run(mLoop);
hloop_free(&mLoop);
mLoop = nullptr;
}
std::shared_ptr<ITcpClient> *NewTcpClient(const TcpClientParam &param)
{

View File

@ -21,6 +21,12 @@ static void on_close(hio_t *io)
TcpServerImpl *server = (TcpServerImpl *)hevent_userdata(io);
server->RemoveClient(io);
}
static void server_on_close(hio_t *io)
{
LogInfo("server_on_close fd=%d error=%d\n", hio_fd(io), hio_error(io));
TcpServerImpl *server = (TcpServerImpl *)hevent_userdata(io);
server->Closed();
}
static void on_recv(hio_t *io, void *buf, int readbytes)
{
LogInfo("on_recv fd=%d readbytes=%d\n", hio_fd(io), readbytes);
@ -104,6 +110,7 @@ void TcpServerImpl::Init(void)
LogInfo("listenfd=%d\n", hio_fd(listenio));
hevent_set_userdata(listenio, this);
mIo = listenio;
hio_setcb_close(mIo, server_on_close);
std::shared_ptr<ITcpServer> server = shared_from_this();
std::shared_ptr<TcpServerImpl> impl = std::dynamic_pointer_cast<TcpServerImpl>(server);
auto recvThread = [](std::shared_ptr<TcpServerImpl> tcpServer) {
@ -115,16 +122,13 @@ void TcpServerImpl::UnInit(void)
{
LogInfo("UnInit TcpServerImpl\n");
FreeClients();
if (nullptr != mLoop) {
LogInfo("Stop loop.\n");
hloop_stop(mLoop);
if (nullptr != mIo) {
hio_close(mIo);
mIo = nullptr;
}
if (mTcpServerThread.joinable()) {
mTcpServerThread.join();
}
hloop_free(&mLoop);
mLoop = nullptr;
mIo = nullptr;
}
void TcpServerImpl::Loop(void)
{
@ -133,6 +137,8 @@ void TcpServerImpl::Loop(void)
return;
}
hloop_run(mLoop);
hloop_free(&mLoop);
mLoop = nullptr;
}
void TcpServerImpl::AddClient(hio_t *io)
{
@ -200,6 +206,13 @@ void TcpServerImpl::FreeClients(void)
}
mClients.clear();
}
void TcpServerImpl::Closed(void)
{
if (nullptr != mLoop) {
LogInfo("Stop loop.\n");
hloop_stop(mLoop);
}
}
std::shared_ptr<ITcpServer> *NewTcpServer(const TcpServerParam &param)
{
LogInfo("Create tcp server object.\n");

View File

@ -49,6 +49,7 @@ public:
std::shared_ptr<ITcpClientAccept> *GetClient(hio_t *io);
void RemoveClient(hio_t *io);
void FreeClients(void);
void Closed(void);
private:
std::mutex mMutex;