Esempio n. 1
0
JsonObjectPtr HueComm::getSuccessItem(JsonObjectPtr aResult, int aIndex)
{
  if (aResult && aIndex<aResult->arrayLength()) {
    JsonObjectPtr responseItem = aResult->arrayGet(aIndex);
    JsonObjectPtr successItem;
    if (responseItem && responseItem->get("success", successItem)) {
      return successItem;
    }
  }
  return JsonObjectPtr();
}
Esempio n. 2
0
void HueApiOperation::processAnswer(JsonObjectPtr aJsonResponse, ErrorPtr aError)
{
  error = aError;
  if (Error::isOK(error)) {
    // pre-process response in case of non-GET
    if (method!=httpMethodGET) {
      // Expected:
      //  [{"error":{"type":xxx,"address":"yyy","description":"zzz"}}]
      // or
      //  [{"success": { "xxx": "xxxxxxxx" }]
      int errCode = HueCommErrorInvalidResponse;
      string errMessage = "invalid response";
      for (int i=0; i<aJsonResponse->arrayLength(); i++) {
        JsonObjectPtr responseItem = aJsonResponse->arrayGet(i);
        responseItem->resetKeyIteration();
        JsonObjectPtr responseParams;
        string statusToken;
        if (responseItem->nextKeyValue(statusToken, responseParams)) {
          if (statusToken=="success" && responseParams) {
            // apparently successful, return entire response
            // Note: use getSuccessItem() to get success details
            data = aJsonResponse;
            errCode = HueCommErrorOK; // ok
            break;
          }
          else if (statusToken=="error" && responseParams) {
            // make Error object out of it
            JsonObjectPtr e = responseParams->get("type");
            if (e)
              errCode = e->int32Value();
            e = responseParams->get("description");
            if (e)
              errMessage = e->stringValue();
            break;
          }
        }
      } // for
      if (errCode!=HueCommErrorOK) {
        error = ErrorPtr(new HueCommError(errCode, errMessage));
      }
    }
    else {
      // GET, just return entire data
      data = aJsonResponse;
    }
  }
  // done
  completed = true;
  // have queue reprocessed
  hueComm.processOperations();
}