bool LoadStreamsRequest::getStreams()

in src/dxapi/native/tickdb/http/xml/load_streams_request.cpp [70:126]


bool LoadStreamsRequest::getStreams(Response &streams)
{
    
    if (!executeAndParseResponse()) {
        return false;
    }

    XMLElement * rootElement = response_.root();

    if (!nameEquals(rootElement, "loadStreamsResponse")) {
        return false;
    }

    XMLElement * streamsElement = rootElement->FirstChildElement("streams");
    XMLElement * optionsElement = rootElement->FirstChildElement("options");

    if (NULL == streamsElement) {
        DBGLOG("streams element not found");
        return false;
    }

    if (NULL == optionsElement) {
        DBGLOG("options element not found");
        return false;
    }

    streams.clear();

    FOR_XML_ELEMENTS(optionsElement, e, "item")  {
        StreamInfo itemContent;
        //if (!parseStreamOptions(itemContent.options, e)) {
        if (!impl(itemContent.options).fromXML(e)) {
            return false;
        }
        streams.push_back(itemContent);
    }

    intptr i = 0, n = streams.size();

    FOR_XML_ELEMENTS(streamsElement, e, "item") {

        // Here we can catch a case where this array is longer than previous
        if (++i > n) 
            break;

        if (!parse(streams[i - 1].key, e->GetText())) {
            return false;
        }
    }

    if (i != n) {
        DBGLOG("length of 'streams' and 'options' arrays is different in LoadStreamsResponse");
        return false;
    }

    return true;
}