Пример #1
0
void AsyncMcServerWorker::addClientSocket(
    apache::thrift::async::TAsyncSocket::UniquePtr&& socket,
    void* userCtxt) {
  if (!onRequest_) {
    throw std::logic_error("can't add a socket without onRequest callback");
  }

  if (onAccepted_) {
    onAccepted_();
  }

  socket->setSendTimeout(opts_.sendTimeout.count());
  socket->setMaxReadsPerEvent(opts_.maxReadsPerEvent);
  socket->setNoDelay(true);

  sessions_.push_back(
    McServerSession::create(
      std::move(socket),
      onRequest_,
      onWriteQuiescence_,
      [this] (McServerSession& session) {
        if (onClosed_) {
          onClosed_(session);
        }
        sessions_.erase(sessions_.iterator_to(session));
      },
      onShutdown_,
      opts_,
      userCtxt
    ));
}
Пример #2
0
void McServerSession::checkClosed() {
  if (!inFlight_) {
    assert(unansweredRequests_.empty());
    assert(multigetRequests_.empty());
    assert(pendingWrites_.empty());

    if (state_ == CLOSING) {
      transport_->close();
      if (onClosed_) {
        /* Ok if nullptr */
        onClosed_(weakThis_.lock());
      }
    }
  }
}