Beispiel #1
0
void QxTransaction::executeServer()
{
   if (m_sServiceName.isEmpty()) { m_bMessageReturn = qx_bool(QX_ERROR_SERVICE_NOT_SPECIFIED, "[QxOrm] empty service name => cannot instantiate service and execute process"); return; }
   if (m_sServiceMethod.isEmpty()) { m_bMessageReturn = qx_bool(QX_ERROR_SERVICE_NOT_SPECIFIED, "[QxOrm] empty service method => cannot execute process"); return; }

   qx::service::IxService * ptr = qx::create_nude_ptr<qx::service::IxService>(m_sServiceName);
   if (ptr == NULL) { m_bMessageReturn = qx_bool(QX_ERROR_SERVICE_INVALID, "[QxOrm] invalid service name => cannot instantiate service and execute process"); return; }
   m_pServiceInstance = IxService_ptr(ptr);
   m_pServiceInstance->registerClass();
   m_pServiceInstance->setInputParameter(m_pInputParameter);
   m_pServiceInstance->setServiceMethodName(m_sServiceMethod);

   try
   {
      m_pServiceInstance->onBeforeProcess();
      qx_bool bInvokeOk = qx::QxClassX::invoke(m_sServiceName, m_sServiceMethod, (* m_pServiceInstance));
      if (! bInvokeOk) { m_bMessageReturn = qx_bool(QX_ERROR_SERVICE_INVALID, "[QxOrm] invalid service method => cannot execute process"); return; }
      m_pOutputParameter = m_pServiceInstance->getOutputParameter_BaseClass();
      m_bMessageReturn = m_pServiceInstance->getMessageReturn();
      m_pServiceInstance->onAfterProcess();
   }
   catch (const qx::exception & x) { m_bMessageReturn = x.toQxBool(); }
   catch (const std::exception & e) { QString msg(e.what()); if (msg.isEmpty()) { msg = "[QxOrm] unexpected error occured executing service method"; }; m_bMessageReturn = qx_bool(QX_ERROR_UNKNOWN, msg); }
   catch (...) { m_bMessageReturn = qx_bool(QX_ERROR_UNKNOWN, "[QxOrm] unknown error occured executing service method"); }
   m_pServiceInstance.reset();
}
Beispiel #2
0
void QxThread::doProcess(QTcpSocket & socket)
{
    if (! socket.setSocketDescriptor(m_iSocketDescriptor))
    {
        Q_EMIT error("[QxOrm] invalid socket descriptor : cannot start transaction", QxTransaction_ptr());
        return;
    }

    qx_bool bReadOk = readSocket(socket);
    if (! bReadOk) {
        Q_EMIT error(QString("[QxOrm] unable to read request from socket : '") + bReadOk.getDesc() + QString("'"), QxTransaction_ptr());
        return;
    }
    if (! m_bIsRunning) {
        return;
    }

    Q_EMIT transactionStarted(m_pTransaction);
    try {
        m_pTransaction->executeServer();
    }
    catch (const qx::exception & x) {
        qx_bool xb = x.toQxBool();
        m_pTransaction->setMessageReturn(xb);
    }
    catch (const std::exception & e) {
        m_pTransaction->setMessageReturn(qx_bool(QX_ERROR_UNKNOWN, e.what()));
    }
    catch (...) {
        m_pTransaction->setMessageReturn(qx_bool(QX_ERROR_UNKNOWN, "unknown error"));
    }
    if (! m_bIsRunning) {
        return;
    }

    qx_bool bWriteOk = writeSocket(socket);
    if (! bWriteOk) {
        Q_EMIT error(QString("[QxOrm] unable to write reply to socket : '") + bWriteOk.getDesc() + QString("'"), m_pTransaction);
    }
    Q_EMIT transactionFinished(m_pTransaction);
}
Beispiel #3
0
void QxTransaction::executeClient(IxService * pService, const QString & sMethod)
{
   if ((pService == NULL) || sMethod.isEmpty()) { qAssert(false); return; }
   if (pService->getServiceName().isEmpty()) { pService->setMessageReturn(qx_bool(QX_ERROR_SERVICE_NOT_SPECIFIED, "[QxOrm] empty service name")); return; }
   pService->registerClass();

   QTcpSocket socket;
   QString serverName = QxConnect::getSingleton()->getIp();
   long serverPort = QxConnect::getSingleton()->getPort();
   socket.connectToHost(serverName, serverPort);
   if (! socket.waitForConnected(QxConnect::getSingleton()->getMaxWait()))
   { pService->setMessageReturn(qx_bool(QX_ERROR_SERVER_NOT_FOUND, "[QxOrm] unable to connect to server")); return; }

   if (m_sTransactionId.isEmpty())
   { setTransactionId(QUuid::createUuid().toString()); }

   setIpSource(socket.localAddress().toString());
   setPortSource(socket.localPort());
   setIpTarget(serverName);
   setPortTarget(serverPort);
   setServiceName(pService->getServiceName());
   setServiceMethod(sMethod);
   setTransactionBegin(QDateTime::currentDateTime());
   setInputParameter(pService->getInputParameter_BaseClass());

   qx_bool bWriteOk = writeSocket(socket);
   if (! bWriteOk) { pService->setMessageReturn(qx_bool(QX_ERROR_SERVICE_WRITE_ERROR, QString("[QxOrm] unable to write request to socket : '") + bWriteOk.getDesc() + QString("'"))); return; }
   qx_bool bReadOk = readSocket(socket);
   if (! bReadOk) { pService->setMessageReturn(qx_bool(QX_ERROR_SERVICE_READ_ERROR, QString("[QxOrm] unable to read reply from socket : '") + bReadOk.getDesc() + QString("'"))); return; }

   pService->setOutputParameter(getOutputParameter());
   pService->setMessageReturn(getMessageReturn());
   setTransactionEnd(QDateTime::currentDateTime());
   socket.disconnectFromHost();
   if (socket.state() != QAbstractSocket::UnconnectedState)
   { socket.waitForDisconnected(QxConnect::getSingleton()->getMaxWait()); }
}
Beispiel #4
0
qx_bool QxThread::writeSocket(QTcpSocket & socket)
{
    if (! m_pTransaction) {
        return qx_bool(QX_ERROR_SERVICE_NOT_SPECIFIED, "empty service transaction");
    }

    quint32 uiTransactionSize = 0;
    IxParameter_ptr pInputBackup = m_pTransaction->getInputParameter();
    m_pTransaction->setInputParameter(IxParameter_ptr());
    m_pTransaction->setTransactionReplySent(QDateTime::currentDateTime());
    qx_bool bWriteOk = QxTools::writeSocket(socket, (* m_pTransaction), uiTransactionSize);
    m_pTransaction->setInputParameter(pInputBackup);
    m_pTransaction->setOutputTransactionSize(uiTransactionSize);
    return bWriteOk;
}
Beispiel #5
0
void CTestAll::init()
{
    m_lId = 56;
    m_oQxBool = qx_bool(true, "qx_bool description");
    m_oStdString = "std::string text";

    m_oQString = "QString text\nwith a new line";
    m_oQDate = QDate::currentDate();
    m_oQDateTime = QDateTime::currentDateTime();
    m_oQTime = QTime::currentTime();
    m_oQColor = QColor(255, 200, 200);
    m_oQFont.setBold(true);
    m_oQFont.setFamily("font family from qx test");
    m_oQPoint = QPoint(8, 11);
    m_oQRect = QRect(QPoint(52, 3), QPoint(574, 1112));
    m_oQSize = QSize(1024, 768);
    m_oQRegExp = QRegExp("qt reg exp");
    m_oQUrl = QUrl("www.qxorm.com");
    m_oQStringList << "str1" << "str2" << "str3" << "str4";
    m_oQByteArray = QByteArray("QByteArray t\0ext\nwith a new line\0and null multi\0ple null char\0", 55);
    m_oQVariant = QVariant(0.437);
    m_oQObject.setProperty("prop_1", 1);
    m_oQObject.setProperty("prop_2", 2);

    QSharedPointer<CUser> u1(new CUser());
    QSharedPointer<CUser> u2(new CUser());

    m_oStdPair = std::make_pair(QPoint(2, 6), QRect(99, 55, 44, 22));
    m_oStdList.push_back(QDateTime());
    m_oStdList.push_back(QDateTime::currentDateTime());
    m_oStdList.push_back(QDateTime());
    m_oStdMap.insert(std::make_pair("1", u1));
    m_oStdMap.insert(std::make_pair("2", u2));

    m_oStdVector.push_back(QSharedPointer<qx::test::CPerson>(new qx::test::CPerson()));
    m_oStdVector.push_back(QSharedPointer<qx::test::CPerson>(new CUser()));
}