bool CWizXmlRpcServerBase::xmlRpcCall(const QString& strMethodName, CWizXmlRpcResult& result, CWizXmlRpcValue* pParam1, CWizXmlRpcValue* pParam2 /*= NULL*/, CWizXmlRpcValue* pParam3 /*= NULL*/, CWizXmlRpcValue* pParam4 /*= NULL*/) { CWizXmlRpcRequest data(strMethodName); data.addParam(pParam1); if (pParam2) { data.addParam(pParam2); } if (pParam3) { data.addParam(pParam3); } if (pParam4) { data.addParam(pParam4); } QNetworkRequest request; request.setUrl(QUrl(m_strUrl)); request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/xml")); // int nCounter = 0; while (true) { QNetworkReply* reply = m_network->post(request, data.toData()); CWizXmlRpcEventLoop loop(reply); // qDebug() << "[Sync]Start a xml rpc event loop"; loop.exec(); // qDebug() << "[Sync]Xml rpc event loop finished"; // if (loop.error() && nCounter == 0) { nCounter ++; continue; } // if (loop.error()) { m_nLastErrorCode = loop.error(); m_strLastErrorMessage = loop.errorString(); return false; } // QString strXml = loop.result(); // CWizXMLDocument doc; if (!doc.LoadXML(strXml)) { m_nLastErrorCode = -1; m_strLastErrorMessage = "Invalid xml"; return false; } CWizXmlRpcValue* pRet = NULL; if (!WizXmlRpcResultFromXml(doc, &pRet)) { m_nLastErrorCode = -1; m_strLastErrorMessage = "Can not parse xmlrpc"; return false; } Q_ASSERT(pRet); if (CWizXmlRpcFaultValue* pFault = dynamic_cast<CWizXmlRpcFaultValue *>(pRet)) { m_nLastErrorCode = pFault->GetFaultCode(); m_strLastErrorMessage = pFault->GetFaultString(); TOLOG2(_T("XmlRpcCall failed : %1, %2"), QString::number(m_nLastErrorCode), m_strLastErrorMessage); return false; } // result.SetResult(strMethodName, pRet); break; } // return true; }
bool CWizXmlRpcServerBase::xmlRpcCall(const QString& strMethodName, CWizXmlRpcResult& result, CWizXmlRpcValue* pParam1, CWizXmlRpcValue* pParam2 /*= NULL*/, CWizXmlRpcValue* pParam3 /*= NULL*/, CWizXmlRpcValue* pParam4 /*= NULL*/) { CWizXmlRpcRequest data(strMethodName); data.addParam(pParam1); if (pParam2) { data.addParam(pParam2); } if (pParam3) { data.addParam(pParam3); } if (pParam4) { data.addParam(pParam4); } QNetworkRequest request; request.setUrl(QUrl(m_strUrl)); request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/xml")); // QNetworkReply* reply = m_network->post(request, data.toData()); CWizXmlRpcEventLoop loop(reply); loop.exec(); // if (loop.error()) { m_nLastErrorCode = loop.error(); m_strLastErrorMessage = loop.errorString(); return false; } // QString strXml = loop.result(); // CWizXMLDocument doc; if (!doc.LoadXML(strXml)) { m_nLastErrorCode = -1; m_strLastErrorMessage = "Invalid xml"; return false; } CWizXmlRpcValue* pRet = NULL; if (!WizXmlRpcResultFromXml(doc, &pRet)) { m_nLastErrorCode = -1; m_strLastErrorMessage = "Can not parse xmlrpc"; return false; } Q_ASSERT(pRet); if (CWizXmlRpcFaultValue* pFault = dynamic_cast<CWizXmlRpcFaultValue *>(pRet)) { m_nLastErrorCode = pFault->GetFaultCode(); m_strLastErrorMessage = pFault->GetFaultString(); return false; } // result.SetResult(strMethodName, pRet); // return true; }