Untitled

 avatar
unknown
c_cpp
5 months ago
1.4 kB
1
Indexable
int32_t ConnectionsManager::sendRequestInternal(TLObject *object, onCompleteFunc onComplete, onQuickAckFunc onQuickAck, onRequestClearFunc onClear, uint32_t flags, uint32_t datacenterId, ConnectionType connectionType, bool immediate) {
    auto request = new Request(instanceNum, lastRequestToken++, connectionType, flags, datacenterId, onComplete, onQuickAck, nullptr, onClear);
    request->rawRequest = object;
    request->rpcRequest = wrapInLayer(object, getDatacenterWithId(datacenterId), request);
    auto cancelledIterator = tokensToBeCancelled.find(request->requestToken);
    if (cancelledIterator != tokensToBeCancelled.end()) {
        if (LOGS_ENABLED) DEBUG_D("(3) request is cancelled before sending, token %d", request->requestToken);
        tokensToBeCancelled.erase(cancelledIterator);
        delete request;
        return request->requestToken;
    }
    if (!currentUserId && !(flags & RequestFlagWithoutLogin)) {
        if (LOGS_ENABLED) DEBUG_D("can't do request without login %s, reschedule token %d", typeid(*object).name(), request->requestToken);
        waitingLoginRequests.push_back(std::unique_ptr<Request>(request));
    } else {
        requestsQueue.push_back(std::unique_ptr<Request>(request));
        if (immediate) {
            processRequestQueue(0, 0);
        }
    }
    return request->requestToken;
}
Editor is loading...
Leave a Comment