| 1778 | } |
| 1779 | |
| 1780 | void ProcessResponsesData() { |
| 1781 | // process responses data queue, send response (if already have next PrimaryResponse_) |
| 1782 | TResponseDataRef rd; |
| 1783 | while (ResponsesDataQueue_.Dequeue(&rd)) { |
| 1784 | ResponsesData_[rd->RequestId_] = rd; |
| 1785 | } |
| 1786 | TAtomicBase requestId = AtomicGet(PrimaryResponse_); |
| 1787 | if (requestId) { |
| 1788 | THashMap<TAtomicBase, TResponseDataRef>::iterator it = ResponsesData_.find(requestId); |
| 1789 | if (it != ResponsesData_.end()) { |
| 1790 | // has next primary response |
| 1791 | rd = it->second; |
| 1792 | ResponsesData_.erase(it); |
| 1793 | AS_->AsyncWrite(rd->Data_, std::bind(&TConn::OnSend, SelfRef(), _1, _2, _3), THttp2Options::ServerOutputDeadline); |
| 1794 | } |
| 1795 | } |
| 1796 | } |
| 1797 | |
| 1798 | private: |
| 1799 | void SendData(TAtomicBase requestId, TTcpSocket::TSendedData sd) { |