apache::thrift::RocketClientChannel::Ptr ThriftTransportBase::createChannel() { auto socket = getConnectingSocket(); if (!socket) { return nullptr; } auto channel = apache::thrift::RocketClientChannel::newChannel(std::move(socket)); channel->setCloseCallback(this); return channel; }
void PcapDistributor::subscribe(unique_ptr<string> hostname, int port) { auto creation = [&, hostname = move(hostname), port ]() { auto locked_map = subs_.wlock(); auto locked_callbacks = callbacks_.wlock(); SocketAddress addr(*hostname, port, true); auto socket = TAsyncSocket::newSocket(evb_.get(), addr); auto chan = HeaderClientChannel::newChannel(socket); auto key = pair<string, int>(*hostname, port); ChannelCloserCB closer(this, key); locked_map->erase(key); locked_callbacks->erase(key); locked_callbacks->emplace(key, move(closer)); chan->setCloseCallback(&locked_callbacks->at(key)); locked_map->emplace( key, make_unique<PcapSubscriberAsyncClient>(move(chan))); LOG(INFO) << "CREATED SUBSCRIBER: " << *hostname << " " << port; }; evb_->runInEventBaseThread(move(creation)); }