tinyrpc/src/net/tcp/io_thread.cc

59 lines
1.3 KiB
C++
Raw Normal View History

2024-12-25 19:37:28 +08:00
#include "io_thread.hpp"
#include "logger.hpp"
#include "reactor.hpp"
#include "coroutine.hpp"
#include "tcp_connection.hpp"
2025-01-14 15:27:15 +08:00
#include <cstddef>
#include <memory>
2024-12-25 19:37:28 +08:00
#include <thread>
namespace tinyrpc {
static thread_local Reactor* t_reactor = nullptr;
static thread_local IOThread* t_ioThread = nullptr;
// static IOThread* getThisIoThread() {
// return t_ioThread;
// }
IOThread::IOThread() : m_thread(&IOThread::mainFunc, this) {
logger() << "IO Thread is built";
2024-12-25 19:37:28 +08:00
}
2025-01-14 15:27:15 +08:00
void IOThread::addClient(int fd) {
2025-01-14 15:27:15 +08:00
m_clients[fd] = std::make_shared<TcpConnection>(fd, m_reactor);
2024-12-25 19:37:28 +08:00
}
void IOThread::mainFunc() {
if(t_ioThread) {
logger() << "this thread already built!";
exit(-1);
}
if(t_reactor) {
logger() << "this thread:" << std::this_thread::get_id() << " already has reactor!";
exit(-1);
}
t_ioThread = this;
m_reactor = t_reactor = new Reactor(Reactor::ReactorType::Sub);
2024-12-25 19:37:28 +08:00
Coroutine::getMainCoroutine(); // 创建协程
m_reactor->loop();
}
IOThread::~IOThread() {
m_reactor->stop();
if(m_thread.joinable()) {
m_thread.join();
}
delete m_reactor;
2025-01-14 15:27:15 +08:00
t_reactor = nullptr;
t_ioThread = nullptr;
2024-12-25 19:37:28 +08:00
}
}