Commit da6c1b8f by NitefllWind

1.重定向debug信息到文件中。2.处理POS发来的无法识别的请求类型。3.修复某些Socket未关闭。

parent 46c53602
...@@ -28,9 +28,9 @@ FMVipDispatcher::FMVipDispatcher(QObject *parent) ...@@ -28,9 +28,9 @@ FMVipDispatcher::FMVipDispatcher(QObject *parent)
_sysIcon->setToolTip("FMVIP"); _sysIcon->setToolTip("FMVIP");
QMenu *menu = new QMenu(); QMenu *menu = new QMenu();
menu->addAction("退出", [=](){ // menu->addAction(addAction("退出", [=](){
this->_ParseRequest("{\"fm_cmd\":\"-1\"}"); // this->_ParseRequest("{\"fm_cmd\":\"-1\"}");
}); // });)
_sysIcon->setContextMenu(menu); _sysIcon->setContextMenu(menu);
connect(_sysIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), SLOT(onActiveSysTrayIcon(QSystemTrayIcon::ActivationReason))); connect(_sysIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), SLOT(onActiveSysTrayIcon(QSystemTrayIcon::ActivationReason)));
...@@ -49,7 +49,7 @@ void FMVipDispatcher::onActiveSysTrayIcon(QSystemTrayIcon::ActivationReason reas ...@@ -49,7 +49,7 @@ void FMVipDispatcher::onActiveSysTrayIcon(QSystemTrayIcon::ActivationReason reas
INT FMVipDispatcher::_ParseRequest(LPSTR data) INT FMVipDispatcher::_ParseRequest(LPSTR data)
{ {
qDebug() << __FUNCTION__ << "===>" << data; qDebug() << "\n\n\nPOS发来的请求 ===>\n" << data;
QJsonParseError err; QJsonParseError err;
QJsonDocument json = QJsonDocument::fromJson(data, &err); QJsonDocument json = QJsonDocument::fromJson(data, &err);
if (err.error != QJsonParseError::NoError) { if (err.error != QJsonParseError::NoError) {
...@@ -80,6 +80,8 @@ BOOL FMVipDispatcher::_GetResponse(LPSTR &rsp, UINT &len) ...@@ -80,6 +80,8 @@ BOOL FMVipDispatcher::_GetResponse(LPSTR &rsp, UINT &len)
len = _serverRspData.length(); len = _serverRspData.length();
mutex.unlock(); mutex.unlock();
qDebug() << "发给POS ===>\n" << rsp;
return 1; return 1;
} }
...@@ -113,7 +115,7 @@ void FMVipDispatcher::onRequest(const QJsonObject &jsonObj) ...@@ -113,7 +115,7 @@ void FMVipDispatcher::onRequest(const QJsonObject &jsonObj)
qApp->quit(); qApp->quit();
} }
#endif #endif
else { else if(type == Type_Pay || type == Type_Fund) {
requestSuccess = true; requestSuccess = true;
// 支付、充值、结算先检查登陆状态。 // 支付、充值、结算先检查登陆状态。
QJsonObject copyJsonObj(jsonObj); QJsonObject copyJsonObj(jsonObj);
...@@ -135,6 +137,9 @@ void FMVipDispatcher::onRequest(const QJsonObject &jsonObj) ...@@ -135,6 +137,9 @@ void FMVipDispatcher::onRequest(const QJsonObject &jsonObj)
} }
FMVipForward::instance()->clearSessionData(); FMVipForward::instance()->clearSessionData();
} else {
_serverRspData = Err_ErrorFMCMD;
serverIsBusy.wakeAll();
} }
} }
...@@ -158,7 +163,6 @@ void FMVipDispatcher::onFinished() ...@@ -158,7 +163,6 @@ void FMVipDispatcher::onFinished()
void FMVipDispatcher::onServerResponsed(const QJsonObject &rspObj) void FMVipDispatcher::onServerResponsed(const QJsonObject &rspObj)
{ {
qDebug() << __FUNCTION__ << "===>" << rspObj;
if(_vindow != 0) { if(_vindow != 0) {
_vindow->deleteLater(); _vindow->deleteLater();
} }
......
...@@ -7,23 +7,9 @@ ...@@ -7,23 +7,9 @@
#include "fmapirelay.h" #include "fmapirelay.h"
#include <QMutex> #include <QMutex>
#include <QWaitCondition> #include <QWaitCondition>
//#include <QNetworkAccessManager>
//#include <QNetworkReply>
//#define Type_Login "member_check_rquest"
//#define Type_Coupon "coupon_check_rquest"
//#define Type_Pay "order_request"
//#define Type_Fund "member_charge_rquest"
//#define Type_Final "Integral_request"
#define Err_WindowClose "{\"statusCode\":1001,\"msg\":\"窗口异常关闭\"}" #define Err_WindowClose "{\"statusCode\":1001,\"msg\":\"窗口异常关闭\"}"
#define Err_ErrorFMCMD "{\"statusCode\":1002,\"msg\":\"无法识别的请求类型\"}"
#define FM_VIP_LOGIN 1001
#define FM_VIP_FUND 1002
#define FM_VIP_PAY 1003
#define FM_VIP_REVOKE 1004
#define FM_VIP_COUPON 1006
#define FM_VIP_FINAL 1007
#define _DEBUG #define _DEBUG
......
...@@ -78,22 +78,22 @@ void FMVipForward::parseRequest(const QJsonObject &jsonObj) ...@@ -78,22 +78,22 @@ void FMVipForward::parseRequest(const QJsonObject &jsonObj)
void FMVipForward::request(const QJsonObject &reqJob) void FMVipForward::request(const QJsonObject &reqJob)
{ {
qDebug() << __FUNCTION__ << "===>" << reqJob;
// 设置URL // 设置URL
QString signStr = sign(reqJob); QString signStr = sign(reqJob);
qDebug() << "sign ===>" << signStr;
_req.setUrl(_urlStr.arg(signStr)); _req.setUrl(_urlStr.arg(signStr));
QJsonDocument json(reqJob); QJsonDocument json(reqJob);
QByteArray reqDate = json.toJson(QJsonDocument::Compact); QByteArray reqData = json.toJson();
qDebug() << "向服务器发送 ===>\n" << json;
qDebug() << "请求签名 ===>\n" << signStr;
// 设置请求头 // 设置请求头
_req.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); _req.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
_req.setHeader(QNetworkRequest::ContentLengthHeader, reqDate.length()); _req.setHeader(QNetworkRequest::ContentLengthHeader, reqData.length());
_nam.post(_req, reqDate); _nam.post(_req, reqData);
// clearSessionData(); // clearSessionData();
} }
...@@ -110,7 +110,7 @@ void FMVipForward::onServerFinished(QNetworkReply *reply) ...@@ -110,7 +110,7 @@ void FMVipForward::onServerFinished(QNetworkReply *reply)
QJsonParseError err; QJsonParseError err;
QJsonDocument jdoc = QJsonDocument::fromJson(data, &err); QJsonDocument jdoc = QJsonDocument::fromJson(data, &err);
qDebug() << "Server Return JSON ===>" << jdoc.object(); qDebug() << "服务器返回 ===>\n" << jdoc;
if(err.error != QJsonParseError::NoError || !jdoc.isObject()) { if(err.error != QJsonParseError::NoError || !jdoc.isObject()) {
posObj["statusCode"] = 1000; posObj["statusCode"] = 1000;
...@@ -211,6 +211,7 @@ void FMVipForward::final(const QJsonObject &job, QJsonObject &fmjob) ...@@ -211,6 +211,7 @@ void FMVipForward::final(const QJsonObject &job, QJsonObject &fmjob)
int amount = posTransObj["order_amount"].toInt(); int amount = posTransObj["order_amount"].toInt();
int paidAmount = posTransObj["paid_amount"].toInt(); int paidAmount = posTransObj["paid_amount"].toInt();
QJsonArray pay_ids = posTransObj["pay_ids"].toArray(); QJsonArray pay_ids = posTransObj["pay_ids"].toArray();
fmjob["memberTransId"] = job["fm_id"];
transObj["coupons"] = posTransObj["coupons"]; transObj["coupons"] = posTransObj["coupons"];
...@@ -225,7 +226,7 @@ void FMVipForward::final(const QJsonObject &job, QJsonObject &fmjob) ...@@ -225,7 +226,7 @@ void FMVipForward::final(const QJsonObject &job, QJsonObject &fmjob)
scoreAmount = pay_ob["paid_total_amount"].toInt(); scoreAmount = pay_ob["paid_total_amount"].toInt();
} }
} }
cashAmount = paidAmount - codeAmount - thirdAmount; cashAmount = paidAmount - codeAmount -scoreAmount - thirdAmount;
transObj["amount"] = amount; transObj["amount"] = amount;
transObj["payAmount"] = paidAmount; transObj["payAmount"] = paidAmount;
transObj["codeAmount"] = codeAmount; transObj["codeAmount"] = codeAmount;
...@@ -261,6 +262,7 @@ void FMVipForward::orderRefund(const QJsonObject &job, QJsonObject &fmjob) ...@@ -261,6 +262,7 @@ void FMVipForward::orderRefund(const QJsonObject &job, QJsonObject &fmjob)
void FMVipForward::orderRevoke(const QJsonObject &job, QJsonObject &fmjob) void FMVipForward::orderRevoke(const QJsonObject &job, QJsonObject &fmjob)
{ {
fmjob["reqType"] = FM_VIP_REVOKE; fmjob["reqType"] = FM_VIP_REVOKE;
Q_UNUSED(job); Q_UNUSED(job);
} }
...@@ -353,17 +355,6 @@ void FMVipForward::orderRevoked(const QJsonObject &serverJob, QJsonObject &posJo ...@@ -353,17 +355,6 @@ void FMVipForward::orderRevoked(const QJsonObject &serverJob, QJsonObject &posJo
QString FMVipForward::sign(const QJsonObject &reqJob) const QString FMVipForward::sign(const QJsonObject &reqJob) const
{ {
// 解析JSON插入MAP中按字典排序 // 解析JSON插入MAP中按字典排序
...@@ -386,8 +377,6 @@ QString FMVipForward::sign(const QJsonObject &reqJob) const ...@@ -386,8 +377,6 @@ QString FMVipForward::sign(const QJsonObject &reqJob) const
sb.append(KeyCode); sb.append(KeyCode);
qDebug() << "签名字符串 ===> " << sb;
QByteArray bt; QByteArray bt;
bt.append(sb); bt.append(sb);
......
...@@ -3,23 +3,50 @@ ...@@ -3,23 +3,50 @@
#include "fmsockserver.h" #include "fmsockserver.h"
#include "fmvipdispatcher.h" #include "fmvipdispatcher.h"
#include <QApplication> #include <QApplication>
#include <QSystemTrayIcon> #include <QFile>
#include <QTextStream>
#include <QtDebug>
#include <QDateTime>
void customMessageHandler(QtMsgType type,const QMessageLogContext& Context, const QString &msg)
{
Q_UNUSED(Context);
QString txt;
switch (type) {
case QtDebugMsg:
txt = QString("Debug: %1").arg(msg);
break;
case QtWarningMsg:
txt = QString("Warning: %1").arg(msg);
break;
case QtCriticalMsg:
txt = QString("Critical: %1").arg(msg);
break;
case QtFatalMsg:
txt = QString("Fatal: %1").arg(msg);
abort();
}
QString strDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");
QFile outFile("debuglog.txt");
outFile.open(QIODevice::WriteOnly | QIODevice::Append);
QTextStream ts(&outFile);
ts << strDateTime << txt << "\r\n";
outFile.flush();
outFile.close();
}
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
QApplication a(argc, argv); QApplication a(argc, argv);
qInstallMessageHandler(customMessageHandler);
FMVipDispatcher relay; FMVipDispatcher relay;
FMSockServer server(&relay); FMSockServer server(&relay);
server.Listen(23770); server.Listen(23770);
// QSystemTrayIcon *_sysIcon = new QSystemTrayIcon();
// _sysIcon->setToolTip("FMVIP");
// _sysIcon->show();
// relay._ParseRequest();
return a.exec(); return a.exec();
} }
...@@ -192,23 +192,24 @@ void FMSockServer::RecvRoutine(DWORD err, DWORD bytes, LPWSAOVERLAPPED overlappe ...@@ -192,23 +192,24 @@ void FMSockServer::RecvRoutine(DWORD err, DWORD bytes, LPWSAOVERLAPPED overlappe
if (response) { if (response) {
send(io_data->socket, response, len, 0); send(io_data->socket, response, len, 0);
LPFMSOCKDATA io_new_data = NULL; // LPFMSOCKDATA io_new_data = NULL;
io_new_data = (LPFMSOCKDATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(FMSOCKDATA)); // io_new_data = (LPFMSOCKDATA)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(FMSOCKDATA));
//! Receive length first // //! Receive length first
io_new_data->buffer.len = sizeof(io_new_data->header); // io_new_data->buffer.len = sizeof(io_new_data->header);
io_new_data->buffer.buf = (char*)&io_new_data->header; // io_new_data->buffer.buf = (char*)&io_new_data->header;
io_new_data->relay = io_data->relay; // io_new_data->relay = io_data->relay;
io_new_data->socket = io_data->socket; // io_new_data->socket = io_data->socket;
WSARecv(io_new_data->socket, &io_new_data->buffer, 1, NULL, &io_new_data->flags, &io_new_data->overlap, FMSockServer::RecvRoutine); // WSARecv(io_new_data->socket, &io_new_data->buffer, 1, NULL, &io_new_data->flags, &io_new_data->overlap, FMSockServer::RecvRoutine);
DWORD res = SleepEx(1000, TRUE); // DWORD res = SleepEx(1000, TRUE);
while (res != WAIT_IO_COMPLETION) { // while (res != WAIT_IO_COMPLETION) {
FMLOG(_T("Rewaiting for I/O completion...")); // FMLOG(_T("Rewaiting for I/O completion..."));
res = SleepEx(1000, TRUE); // res = SleepEx(1000, TRUE);
} // }
} }
else { else {
FMLOG(_T("Failed to determine response data.")); FMLOG(_T("Failed to determine response data."));
} }
closesocket(io_data->socket);
} }
} }
else { else {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment