0

First off, I would like to say I'm totally new to BB and I'm coming from an Android background.

I've been looking at samples such as:

https://developer.blackberry.com/cascades/documentation/device_comm/networking/

I have an application which is making a lot of different (and similar) web requests. How do I identify these incoming replies so I can demux them to their appropriate components? Can I tag them somehow?

Thanks and please let me know if I can be more clear.

Sunseeker
  • 1,503
  • 9
  • 21
Chad
  • 2,335
  • 8
  • 29
  • 45

2 Answers2

2

As @Kernald wrote above, all the information you're likely requesting could be found in QNetworkReply object. You get pointer to this object after placing a request by calling QNetworkAccessManager::get() or QNetworkAccessManager::put()

When you get the reply it's delivered via QNetworkAccessManager::finished(QNetworkReply *reply) signal

Here you can get access to the counterparts Via pointer to respective QNetworkRequestand it's contents depending on what you're after

QNetworkAccessManager* networkAccessManager;

// skipped

bool result = connect(networkAccessManager, SIGNAL(finished(QNetworkReply*)), this, SLOT(requestFinished(QNetworkReply*)));
Q_ASSERT(result);

// skipped 

void requestFinished(QNetworkReply* reply) {
    QNetworkRequest* request = reply->request();
    QUrl url = request->url(); // get the URL
    QVariant header = request->header(); // get the header
    // etc...
}

Also, you're able to get raw headers of network reply like that:

QByteArray hdr;
QList<QByteArray> list = reply->rawHeaderList();
Q_FOREACH(hdr, list){
        qDebug() << hdr;
}

If it's not enough for some reason, you might manually tag network request by assigning an QNetworkRequest::Attribute to QNetworkRequest object:

QNetworkRequest request; // Create and send the network request
QNetworkRequest::Attribute attr = QNetworkRequest::User+1; // any unique value greater than QNetworkRequest::User
QString myStuff;
request.setAttribute(attr, myStuff);

These attribute values must be greater that QNetworkRequest::User up to QNetworkRequest::UserMax. Afterwards you get the attribute previously assigned to the request in the following way:

void requestFinished(QNetworkReply* reply) {
    QNetworkRequest* request = reply->request();
    QNetworkRequest::Attribute myAttr = QNetworkRequest::User+1;
    QVariant myStuff = reply->request().attribute(myAttr);
    // do something further
}

Here is official BB10 and Qt (for the version 4.8 which is currently used at the latest Blackberry 10 SDK) documentation on this:

Sunseeker
  • 1,503
  • 9
  • 21
0

You have at least two ways to do this:

  1. From the QNetworkReply, you can access to your original request (https://developer.blackberry.com/cascades/reference/qnetworkreply.html#request), on which you can set an originatingObject: https://developer.blackberry.com/cascades/reference/qnetworkrequest.html#setOriginatingObject, and any other attribute on your request
  2. You can check against the content URL: https://developer.blackberry.com/cascades/reference/qnetworkreply.html#url
Marc Plano-Lesay
  • 6,808
  • 10
  • 44
  • 75