void clientConnectionCallback(const TcpConnectionPtr& conn) { cout << conn->peerAddress().ipPort() << " -> " << conn->localAddress().ipPort() << " is " << (conn->connected() ? "UP" : "DOWN") << "\n"; if (conn->connected()) { clientConnection = conn; conn->setNoDelay(true); } else { clientConnection.reset(); } }
TcpServer::~TcpServer() { _loop->assertInLoopThread(); for (ConnectionMap::iterator it(_connections.begin()); it != _connections.end(); ++it) { TcpConnectionPtr conn = it->second; it->second.reset(); conn->getLoop()->runInLoop( std::bind(&TcpConnection::connectDestroyed, conn)); conn.reset(); } }
TcpServer::~TcpServer() { m_loop->assertInLoopThread(); LOG_TRACE << "TcpServer::~TcpServer [" << m_name << "] destructing"; for (ConnectionMap::iterator it(connections_.begin()); it != connections_.end(); ++it) { TcpConnectionPtr conn = it->second; it->second.reset(); conn->getLoop()->runInLoop( boost::bind(&TcpConnection::connectDestroyed, conn)); conn.reset(); } }
TcpServer::~TcpServer() { loop_->assertInLoopThread(); LOG_PRINT(LogType_Info, "TcpServer::~TcpServer [%s] destructing", name_.c_str()); for(ConnectionMap::iterator it(connections_.begin()); it != connections_.end(); ++it) { TcpConnectionPtr conn = it->second; it->second.reset(); conn->getLoop()->runInLoop( std::bind(&TcpConnection::connectDestroyed, conn)); conn.reset(); } }
int main() { EventLoop baseLoop; InetAddress address("127.0.0.1", 8888); std::shared_ptr<Connector> connector(new Connector(&baseLoop, address)); TcpConnectionPtr tcpConnPtr; connector->setNewConnectionCallback([&](int sockfd) { InetAddress peerAddr(sockets::getPeerAddr(sockfd)); tcpConnPtr.reset(new TcpConnection(&baseLoop, "connection one", sockfd, peerAddr, address)); tcpConnPtr->setConnectionCallback(defaultConnectionCallback); tcpConnPtr->setMessageCallback(defaultMessageCallback); tcpConnPtr->send("what is your name?"); }); connector->start(); baseLoop.loop(); return 0; }