iwebrequest.cpp 14.5 KB
#include "iwebRequest.h"
#include "GlobalSetting.h"
#include <QNetworkAccessManager>
#include <QtScript>
#include "../Notification.h"
#include <QScriptEngine>
#include <QScriptValue>

/**
 * @brief JMainWindow::updatePassWord
 *{"id":123456,"cmd":10001,"sid":"AASSDDDD","op":"AABBCC","np":"AABBCC"}
 *{"id":123456,"cmd":10002,"sid":"AASSDDDD"}
 *{"id":123456,"cmd":10003,"nickname":"nick_123456","sex":0,"birthday":"2013-1-10","signature":"test_我的地盘,我做主!"}
 *{"id":123456,"cmd":10004,"sid":"AASSDDDD","type":1,"top":10}
 *{"id":123456,"cmd":10005,"sid":"AASSDDDD","account":"1","pwd":"10","code":"1000"}
验证码地址
http://58.221.57.42:8897/Interface/GetValidateCode

 */

IWebRequest *IWebRequest::m_WebRequest = NULL;
IWebRequest::IWebRequest(QObject *parent) :
    QObject(parent)
{
    qam = new QNetworkAccessManager(this);
    answer = "";
}

IWebRequest *IWebRequest::Instance()
{
    if (!m_WebRequest)
        m_WebRequest = new IWebRequest();

    return m_WebRequest;
}

void IWebRequest::sendRequestToServer(int nType,QStringList paramsList)
{

    QString params = "?source_device=pc";
    QString requestFunStr = "";
    switch(nType)
    {
        case REQ_LOGIN:
        {
            if(paramsList.size() != 2)
            {
                return;
            }
            requestFunStr = "/user/login";
            params += "&loginname="+paramsList.at(0);
            params += "&password="+paramsList.at(1);
        }
        break;
        case REQ_LOGOUT:
        {
            if(paramsList.size() != 1)
            {
                return;
            }
            requestFunStr = "/user/logout";
            params += "&token="+_GlobalSetting.token.token;
            break;
        }
        case REQ_GETJUSIG:
        {
            if(paramsList.size() != 2)
            {
                return;
            }
            requestFunStr = "/user/jusig/get";
            params += "&token="+_GlobalSetting.token.token;
            params += "&cloud_id="+paramsList.at(1);
            params += "&nonce="+paramsList.at(0);
            break;
        }
        case REQ_USER_ONLINE:
        {
            if(paramsList.size() != 1)
            {
                return;
            }
            requestFunStr = "/user/save";
            params += "&online="+paramsList.at(0);
            params += QString("&uid=%1").arg(_GlobalSetting.userInfo.uid);
            params += QString("&token=%1").arg(_GlobalSetting.token.token);

            break;
        }
        case REQ_USER_OFFLINE:
        {
            if(paramsList.size() != 1)
            {
                return;
            }
            requestFunStr = "/user/save";
            params += "&online="+paramsList.at(0);
            params += QString("&uid=%1").arg(_GlobalSetting.userInfo.uid);
            params += QString("&token=%1").arg(_GlobalSetting.token.token);

            break;
        }
        case REQ_USER_GET:
        {
            if(paramsList.size() != 0)
            {
                return;
            }
            requestFunStr = "/user/get";
            params += QString("&uid=%1").arg(_GlobalSetting.userInfo.uid);
            params += QString("&token=%1").arg(_GlobalSetting.token.token);
            params += "&fields=avatar,userInfo,teacher,credits";

            break;
        }

        case REQ_USER_REMARK_GET:
        {
            if(paramsList.size() != 1)
            {
                return;
            }
            requestFunStr = "/user/get";
            params += QString("&uid=%1").arg(paramsList.at(0));
            params += QString("&token=%1").arg(_GlobalSetting.token.token);
            params += "&fields=userInfo,remark";

            break;
        }

        case REQ_USER_COURSE_LIST_GET:
        {
            if(paramsList.size() != 2)
            {
                return;
            }
            requestFunStr = "/course/menu";
            params += QString("&has_course=%1").arg(paramsList.at(0));
            params += QString("&has_level=%1").arg(paramsList.at(1));
            params += QString("&type=%1").arg("2");
            params += QString("&token=%1").arg(_GlobalSetting.token.token);

            break;
        }
        case REQ_USER_COURSE_CALL_GET:
        {
            if(paramsList.size() != 1)
            {
                return;
            }
            requestFunStr = "/course/get";
            params += QString("&course_id=%1").arg(paramsList.at(0));
            params += QString("&type=%1").arg("2");
            params += QString("&token=%1").arg(_GlobalSetting.token.token);

            break;
        }
        case REQ_USER_ORDER_GET:
        {
            if(paramsList.size() != 1)
            {
                return;
            }
            requestFunStr = "/order/get";
            params += QString("&call_id=%1").arg(paramsList.at(0));
            params += QString("&token=%1").arg(_GlobalSetting.token.token);

            break;
        }
        case REQ_USER_ORDER_EARNING_RANK:
        {

            requestFunStr = "/order/earning/rank";
//            params += QString("&call_id=%1").arg(paramsList.at(0));
            params += QString("&token=%1").arg(_GlobalSetting.token.token);

            break;
        }
        case REQ_USER_COURSE_PPT_GET:
        {
            if(paramsList.size() != 1)
            {
                return;
            }
            requestFunStr = "/course/get";
            params += QString("&course_id=%1").arg(paramsList.at(0));
            params += QString("&type=%1").arg("2");
            params += QString("&token=%1").arg(_GlobalSetting.token.token);

            break;
        }
    default:
        break;
    }

    qDebug() << "params:" << params;
    QNetworkRequest *request = new QNetworkRequest(QUrl(QString("%1%2%3").arg(_GlobalSetting.networkurl).arg(requestFunStr).arg(params)));
    request->setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");

    reply = qam->get(*request);
    reply->setProperty("cmd", nType);
    connect(reply, SIGNAL(readyRead()), this, SLOT(getResponseFromServer()));
    connect(reply, SIGNAL(finished()), this, SLOT(httpFinish()));
    connect(reply, SIGNAL(downloadProgress(qint64,qint64)), this, SLOT(slot_downloadProgress(qint64, qint64)));

}


void IWebRequest::readData(QByteArray &data)
{
    answer.append(QString::fromUtf8(data));
}
//#include <math.h>
//QString getNonce()
//{
//    QString s = "";
//    srand((unsigned)time(0));
//    for(int i=0;i<16;i++)
//    {
//        int t = qrand()%10;
//        s.append(QString("%1").arg(t));
//    }
//    return s;
//}

void IWebRequest::getResponseFromServer()
{
    QNetworkReply *senders = (QNetworkReply *)sender();
    QByteArray arrayData = senders->readAll();
    while (arrayData.size() > 0) {
        // 如果接收的数据等于总的大小,数据接收结束
        readData(arrayData);
        arrayData.clear();
    }
    qDebug() << "readData" << answer;
    int errorno = -1;
    int cmd = senders->property("cmd").toInt();
    QString errormsg;
    QString result = answer;

    QScriptEngine engine;
    QScriptValue sc = engine.evaluate("value="+answer);
    errorno  = sc.property("error_no").toInt32();
    errormsg =  sc.property("error_msg").toString();
    qDebug() << "cmd" << cmd;
    qDebug() << "error_no" << errorno;
    qDebug() << "errormsg" << errormsg;
    switch(cmd)
    {
    case REQ_LOGIN:
        if(errorno == 0)
        {
            if(sc.property("result").isObject())
            {
                _GlobalSetting.userInfo.uid = sc.property("result").property("userInfo").property("uid").toInt32();
                _GlobalSetting.userInfo.user_type = sc.property("result").property("userInfo").property("user_type").toInt32();
                _GlobalSetting.userInfo.user_name = sc.property("result").property("userInfo").property("user_name").toString();
                _GlobalSetting.userInfo.nick = sc.property("result").property("userInfo").property("nick").toString();
                _GlobalSetting.userInfo.mobile = sc.property("result").property("userInfo").property("mobile").toString();
                _GlobalSetting.userInfo.email = sc.property("result").property("userInfo").property("email").toString();
                _GlobalSetting.userInfo.code = sc.property("result").property("userInfo").property("code").toString();
                _GlobalSetting.userInfo.job = sc.property("result").property("userInfo").property("job").toString();
                _GlobalSetting.userInfo.interests = sc.property("result").property("userInfo").property("interests").toString();
                _GlobalSetting.userInfo.call_number = sc.property("result").property("userInfo").property("call_number").toInt32();
                _GlobalSetting.userInfo.call_time = sc.property("result").property("userInfo").property("call_time").toInt32();
                _GlobalSetting.userInfo.attentions = sc.property("result").property("userInfo").property("attentions").toInt32();
                _GlobalSetting.userInfo.is_ishow = sc.property("result").property("userInfo").property("is_ishow").toInt32();
                _GlobalSetting.userInfo.avatar = sc.property("result").property("userInfo").property("avatar").toInt32();
                _GlobalSetting.userInfo.birthday = sc.property("result").property("userInfo").property("birthday").toInt32();
                _GlobalSetting.userInfo.age = sc.property("result").property("userInfo").property("age").toInt32();
                _GlobalSetting.userInfo.sex = sc.property("result").property("userInfo").property("sex").toInt32();


                _GlobalSetting.token.token = sc.property("result").property("token").property("token").toString();


                //加载用户基本信息和头像等
                QStringList params;
                IWebRequest::Instance()->sendRequestToServer(REQ_USER_GET, params);
            }
        }
        else
        {
            errorConnect(errormsg);
            qDebug("CMQ error_no...\n");
        }
        break;

//    case REQ_LOGOUT:
//        {
//            emit UseLogOut(1);
//            break;
//        }

        case REQ_GETJUSIG:
        {
            if(errorno == 0)
            {
                if(sc.property("result").isObject())
                {
                    _GlobalSetting.sigAuth.sig = sc.property("result").property("sig").toString();

                }
            }
            break;
        }

        case REQ_USER_GET:
        if(errorno == 0)
        {
            if(sc.property("result").isObject())
            {
                if(sc.property("result").property("avatar").isObject())
                {
                    _GlobalSetting.userHeadImg.url = sc.property("result").property("avatar").property("url").toString().replace("\/", "/");
                    _GlobalSetting.userHeadImg.s_url = sc.property("result").property("avatar").property("s_url").toString().replace("\/", "/");
                    _GlobalSetting.userHeadImg.file_id = sc.property("result").property("avatar").property("file_id").toInt32();
                    _GlobalSetting.userHeadImg.file_name = sc.property("result").property("avatar").property("file_name").toString();
                    _GlobalSetting.userHeadImg.ext = sc.property("result").property("avatar").property("ext").toString();
                    _GlobalSetting.userHeadImg.size = sc.property("result").property("avatar").property("size").toInt32();
                }


                if(sc.property("result").property("credits").isObject())
                {
                    _GlobalSetting.credits.credits = sc.property("result").property("credits").property("credits").toVariant().toFloat();
                    _GlobalSetting.credits.credits_used = sc.property("result").property("credits").property("credits_used").toVariant().toFloat();
                    _GlobalSetting.credits.credits_freeze = sc.property("result").property("credits").property("credits_freeze").toVariant().toFloat();
                    _GlobalSetting.credits.taocan_today = sc.property("result").property("credits").property("taocan_today").toInt32();
                    _GlobalSetting.credits.taocan_surplus = sc.property("result").property("credits").property("taocan_surplus").toInt32();
                    _GlobalSetting.credits.taocan_tomorrow = sc.property("result").property("credits").property("taocan_tomorrow").toInt32();
                    _GlobalSetting.credits.servertime = sc.property("result").property("credits").property("servertime").toInt32();
                    _GlobalSetting.credits.critical_time = sc.property("result").property("credits").property("critical_time").toInt32();
                }

                if(sc.property("result").property("teacher").isObject())
                {
                    _GlobalSetting.teacher.evaluation_times = sc.property("result").property("teacher").property("evaluation_times").toInt32();
                    _GlobalSetting.teacher.evaluation_total = sc.property("result").property("teacher").property("evaluation_total").toInt32();
                    _GlobalSetting.teacher.prices = sc.property("result").property("teacher").property("prices").toVariant().toFloat();
                    _GlobalSetting.teacher.education = sc.property("result").property("teacher").property("education").toString();
                    _GlobalSetting.teacher.experience = sc.property("result").property("teacher").property("experience").toString();
                    _GlobalSetting.teacher.profile = sc.property("result").property("teacher").property("profile").toString();
                    _GlobalSetting.teacher.online = sc.property("result").property("teacher").property("online").toInt32();
                    _GlobalSetting.teacher.missed_call = sc.property("result").property("teacher").property("missed_call").toInt32();
                    _GlobalSetting.teacher.skype = sc.property("result").property("teacher").property("skype").toString();
                }

            }
        }
        break;
    default:
        break;

    }
    if(errorno == 0)
        emit response(cmd, errorno, errormsg, result);
    else if(errorno == 404)
    {
        UseLogOut(2);//token不存在 账号被登陆
        emit response(REQ_LOGOUT, errorno, errormsg, result);
    }

}

void IWebRequest::httpFinish()
{
//    QNetworkReply *senders = (QNetworkReply *)sender();
//    qDebug() << "httpFinish" << senders;
    answer = "";
//    disconnect(reply, SIGNAL(readyRead()), this, SLOT(getResponseFromServer()));
//    disconnect(reply, SIGNAL(finished()), this, SLOT(httpFinish()));
}

void IWebRequest::slot_downloadProgress(qint64 bytesReceived, qint64 bytesTotal)
{
    qDebug() <<"下载字节" << bytesReceived << bytesTotal;
}