#include "iwebRequest.h" #include "GlobalSetting.h" #include #include #include "../Notification.h" #include #include /** * @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() != 3) { return; } requestFunStr = "/user/login"; params += "&loginname="+paramsList.at(0); params += "&password="+paramsList.at(1); params += "&soft_version="+paramsList.at(2); } 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_REVIWE_CREATE: { if(paramsList.size() != 2) { return; } requestFunStr = "/review/create"; params += QString("&uid=%1").arg(paramsList.at(0)); params += QString("&token=%1").arg(_GlobalSetting.token.token); params += QString("&type=1"); params += QString("&call_id=%1").arg(paramsList.at(1)); 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_TEACHER_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=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_MSG_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("&pid=0"); 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("&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 //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); //获取课程列表 QStringList paramsCourse; paramsCourse.append(QString("1")); paramsCourse.append(QString("1")); IWebRequest::Instance()->sendRequestToServer(REQ_USER_COURSE_LIST_GET, paramsCourse); } } 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(); // _GlobalSetting.userInfo.call_time = sc.property("result").property("userInfo").property("call_time").toInt32(); } } } break; case REQ_USER_TEACHER_GET: if(errorno == 0) { if(sc.property("result").isObject()) { 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(); } _GlobalSetting.userInfo.call_time = sc.property("result").property("userInfo").property("call_time").toInt32(); } } 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; }