示例#1
0
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));
}