Untitled
unknown
c_cpp
a year ago
2.2 kB
5
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