Untitled
unknown
c_cpp
5 months ago
2.2 kB
3
Indexable
void ConnectionsManager::sendMessagesToConnection(std::vector<std::unique_ptr<NetworkMessage>> &messages, Connection *connection, bool reportAck) { if (messages.empty() || connection == nullptr) { return; } std::vector<std::unique_ptr<NetworkMessage>> currentMessages; Datacenter *datacenter = connection->getDatacenter(); uint32_t currentSize = 0; size_t count = messages.size(); for (uint32_t a = 0; a < count; a++) { NetworkMessage *networkMessage = messages[a].get(); currentMessages.push_back(std::move(messages[a])); currentSize += networkMessage->message->bytes; if (currentSize >= 3 * 1024 || a == count - 1) { int32_t quickAckId = 0; NativeByteBuffer *transportData = datacenter->createRequestsData(currentMessages, reportAck ? &quickAckId : nullptr, connection, false); if (transportData != nullptr) { if (reportAck && quickAckId != 0) { std::vector<int32_t> requestIds; size_t count2 = currentMessages.size(); for (uint32_t b = 0; b < count2; b++) { NetworkMessage *message = currentMessages[b].get(); if (message->requestId != 0) { requestIds.push_back(message->requestId); } } if (!requestIds.empty()) { auto iter = quickAckIdToRequestIds.find(quickAckId); if (iter == quickAckIdToRequestIds.end()) { quickAckIdToRequestIds[quickAckId] = requestIds; } else { iter->second.insert(iter->second.end(), requestIds.begin(), requestIds.end()); } } } connection->sendData(transportData, reportAck, true); } else { if (LOGS_ENABLED) DEBUG_E("connection(%p) connection data is empty", connection); } currentSize = 0; currentMessages.clear(); } } }
Editor is loading...
Leave a Comment