Small improvements.

This commit is contained in:
Relintai 2022-02-10 14:01:39 +01:00
parent 38a28ee9ce
commit 059cae3625
2 changed files with 19 additions and 20 deletions

View File

@ -138,8 +138,7 @@ public:
} }
// set callbacks // set callbacks
virtual void setHighWaterMarkCallback(const HighWaterMarkCallback &cb, virtual void setHighWaterMarkCallback(const HighWaterMarkCallback &cb, size_t markLen) override {
size_t markLen) override {
highWaterMarkCallback_ = cb; highWaterMarkCallback_ = cb;
highWaterMarkLen_ = markLen; highWaterMarkLen_ = markLen;
} }
@ -186,8 +185,7 @@ private:
size_t idleTimeout_{ 0 }; size_t idleTimeout_{ 0 };
Date lastTimingWheelUpdateTime_; Date lastTimingWheelUpdateTime_;
void enableKickingOff(size_t timeout, void enableKickingOff(size_t timeout, const std::shared_ptr<TimingWheel> &timingWheel) {
const std::shared_ptr<TimingWheel> &timingWheel) {
assert(timingWheel); assert(timingWheel);
assert(timingWheel->getLoop() == loop_); assert(timingWheel->getLoop() == loop_);
assert(timeout > 0); assert(timeout > 0);
@ -207,15 +205,19 @@ private:
void setRecvMsgCallback(const RecvMessageCallback &cb) { void setRecvMsgCallback(const RecvMessageCallback &cb) {
recvMsgCallback_ = cb; recvMsgCallback_ = cb;
} }
void setConnectionCallback(const ConnectionCallback &cb) { void setConnectionCallback(const ConnectionCallback &cb) {
connectionCallback_ = cb; connectionCallback_ = cb;
} }
void setWriteCompleteCallback(const WriteCompleteCallback &cb) { void setWriteCompleteCallback(const WriteCompleteCallback &cb) {
writeCompleteCallback_ = cb; writeCompleteCallback_ = cb;
} }
void setCloseCallback(const CloseCallback &cb) { void setCloseCallback(const CloseCallback &cb) {
closeCallback_ = cb; closeCallback_ = cb;
} }
void setSSLErrorCallback(const SSLErrorCallback &cb) { void setSSLErrorCallback(const SSLErrorCallback &cb) {
sslErrorCallback_ = cb; sslErrorCallback_ = cb;
} }

View File

@ -81,12 +81,7 @@ void TcpServer::newConnection(int sockfd, const InetAddress &peer) {
if (sslCtxPtr_) { if (sslCtxPtr_) {
#ifdef USE_OPENSSL #ifdef USE_OPENSSL
newPtr = std::make_shared<TcpConnectionImpl>( newPtr = std::make_shared<TcpConnectionImpl>(ioLoop, sockfd, InetAddress(Socket::getLocalAddr(sockfd)), peer, sslCtxPtr_);
ioLoop,
sockfd,
InetAddress(Socket::getLocalAddr(sockfd)),
peer,
sslCtxPtr_);
#else #else
LOG_FATAL << "OpenSSL is not found in your system!"; LOG_FATAL << "OpenSSL is not found in your system!";
abort(); abort();
@ -123,26 +118,21 @@ void TcpServer::start() {
loop_->runInLoop([this]() { loop_->runInLoop([this]() {
assert(!started_); assert(!started_);
started_ = true; started_ = true;
if (idleTimeout_ > 0) { if (idleTimeout_ > 0) {
timingWheelMap_[loop_] = timingWheelMap_[loop_] = std::make_shared<TimingWheel>(loop_, idleTimeout_, 1.0F, idleTimeout_ < 500 ? idleTimeout_ + 1 : 100);
std::make_shared<TimingWheel>(loop_,
idleTimeout_,
1.0F,
idleTimeout_ < 500 ? idleTimeout_ + 1 : 100);
if (loopPoolPtr_) { if (loopPoolPtr_) {
auto loopNum = loopPoolPtr_->size(); auto loopNum = loopPoolPtr_->size();
while (loopNum > 0) { while (loopNum > 0) {
// LOG_TRACE << "new Wheel loopNum=" << loopNum; // LOG_TRACE << "new Wheel loopNum=" << loopNum;
auto poolLoop = loopPoolPtr_->getNextLoop(); auto poolLoop = loopPoolPtr_->getNextLoop();
timingWheelMap_[poolLoop] = timingWheelMap_[poolLoop] = std::make_shared<TimingWheel>(poolLoop, idleTimeout_, 1.0F, idleTimeout_ < 500 ? idleTimeout_ + 1 : 100);
std::make_shared<TimingWheel>(poolLoop,
idleTimeout_,
1.0F,
idleTimeout_ < 500 ? idleTimeout_ + 1 : 100);
--loopNum; --loopNum;
} }
} }
} }
LOG_TRACE << "map size=" << timingWheelMap_.size(); LOG_TRACE << "map size=" << timingWheelMap_.size();
acceptorPtr_->listen(); acceptorPtr_->listen();
}); });
@ -150,17 +140,22 @@ void TcpServer::start() {
void TcpServer::stop() { void TcpServer::stop() {
loop_->runInLoop([this]() { acceptorPtr_.reset(); }); loop_->runInLoop([this]() { acceptorPtr_.reset(); });
for (auto connection : connSet_) { for (auto connection : connSet_) {
connection->forceClose(); connection->forceClose();
} }
loopPoolPtr_.reset(); loopPoolPtr_.reset();
for (auto &iter : timingWheelMap_) { for (auto &iter : timingWheelMap_) {
std::promise<int> pro; std::promise<int> pro;
auto f = pro.get_future(); auto f = pro.get_future();
iter.second->getLoop()->runInLoop([&iter, &pro]() mutable { iter.second->getLoop()->runInLoop([&iter, &pro]() mutable {
iter.second.reset(); iter.second.reset();
pro.set_value(1); pro.set_value(1);
}); });
f.get(); f.get();
} }
} }
@ -169,9 +164,11 @@ void TcpServer::connectionClosed(const TcpConnectionPtr &connectionPtr) {
LOG_TRACE << "connectionClosed"; LOG_TRACE << "connectionClosed";
// loop_->assertInLoopThread(); // loop_->assertInLoopThread();
loop_->runInLoop([this, connectionPtr]() { loop_->runInLoop([this, connectionPtr]() {
size_t n = connSet_.erase(connectionPtr); size_t n = connSet_.erase(connectionPtr);
(void)n; (void)n;
assert(n == 1); assert(n == 1);
}); });
static_cast<TcpConnectionImpl *>(connectionPtr.get())->connectDestroyed(); static_cast<TcpConnectionImpl *>(connectionPtr.get())->connectDestroyed();