Commit 04869d6b by NitefullWind

1. 实现socket断开后终止任务。

parent 3720e331
......@@ -20,6 +20,13 @@ FMPVipServer::FMPVipServer() :
isNeedSocketHeader = FMPVipSettings::instance()->getIsNeedSocketHeader();
}
FMPVipServer::~FMPVipServer()
{
if(dispatcher!=nullptr) {
delete dispatcher;
}
}
void FMPVipServer::Listen(quint16 port)
{
if(!this->listen(QHostAddress::Any, port)) {
......@@ -50,7 +57,12 @@ void FMPVipServer::onNewConnection()
void FMPVipServer::onDisconnected()
{
FMP_DEBUG() << "Socket disconnected.";
socket->close();
if(dispatcher!=nullptr) {
dispatcher->stopTask();
}
emit SocketDisconnected();
}
void FMPVipServer::onReadyRead()
......@@ -66,8 +78,6 @@ void FMPVipServer::onReadyRead()
if(!isNext) {
FMP_ERROR() << "Wait recv data time out. Recved length: " << totalLen << " need length: " << needLen << " Recved data: " << recvData;
socket->close();
socket->deleteLater();
socket = nullptr;
return;
}
}
......@@ -84,8 +94,6 @@ void FMPVipServer::onReadyRead()
if(header.flag != FMSOCKFLAG) {
FMP_ERROR() << "Incompatible protocol. Recved data: " << recvData;
socket->close();
socket->deleteLater();
socket = nullptr;
return;
} else {
dataLen = header.len;
......@@ -110,8 +118,8 @@ void FMPVipServer::onReadyRead()
Write(rspData);
socket->waitForBytesWritten();
socket->close();
socket->deleteLater();
socket = nullptr;
if(socket != nullptr && socket->isValid() && socket->isOpen()) {
socket->waitForBytesWritten();
socket->close();
}
}
......@@ -16,14 +16,19 @@ typedef struct {
class FMPVipServer : public QTcpServer
{
Q_OBJECT
public:
static FMPVipServer *instance();
~FMPVipServer();
void Listen(quint16 port);
void Write(const QByteArray &data);
void SetPluginContext(ctkPluginContext *ctx);
//signals:
signals:
void SocketDisconnected();
private slots:
void onNewConnection();
void onDisconnected();
......
......@@ -33,6 +33,9 @@ FMVipDispatcher::FMVipDispatcher(QObject *parent) :
FMVipDispatcher::~FMVipDispatcher()
{
if(fmTask!=nullptr) {
fmTask->deleteLater();
}
}
void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
......@@ -56,19 +59,25 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
switch (type) {
case FM_Set_Store_Info: {
TaskSetStoreInfo taskSetStoreInfo(jsonObj);
rspData = taskSetStoreInfo.doTask();
// TaskSetStoreInfo taskSetStoreInfo(jsonObj);
// rspData = taskSetStoreInfo.doTask();
fmTask = new TaskSetStoreInfo(jsonObj);
rspData = fmTask->doTask();
break;
}
case FM_Login: {
TaskLogin taskLogin(jsonObj, &session);
rspData = taskLogin.doTask();
// TaskLogin taskLogin(jsonObj, &session);
// rspData = taskLogin.doTask();
fmTask = new TaskLogin(jsonObj, &session);
rspData = fmTask->doTask();
session.resetCreatedTime();
break;
}
case FM_Pay: {
TaskPay taskPay(jsonObj, &session);
rspData = taskPay.doTask();
// TaskPay taskPay(jsonObj, &session);
// rspData = taskPay.doTask();
fmTask = new TaskPay(jsonObj, &session);
rspData = fmTask->doTask();
session.clear();
break;
}
......@@ -80,8 +89,10 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
// epay->StartService();
// rspData = epay->DockPayRespond();
// epay->StopService();
TaskQRPay taskEPay(jsonObj, epay);
rspData = taskEPay.doTask();
// TaskQRPay taskEPay(jsonObj, epay);
// rspData = taskEPay.doTask();
fmTask = new TaskQRPay(jsonObj, epay);
rspData = fmTask->doTask();
}
else {
rspData = QString::fromLocal8Bit("{\"msg:\":\"支付服务不可用\"}").toUtf8();
......@@ -129,8 +140,10 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
break;
}
case FM_Refund: {
TaskRefund taskRefund(jsonObj);
rspData = taskRefund.doTask();
// TaskRefund taskRefund(jsonObj);
// rspData = taskRefund.doTask();
fmTask = new TaskRefund(jsonObj);
rspData = fmTask->doTask();
break;
}
// case FM_Order_Revoke: {
......@@ -146,8 +159,10 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
// epay->StartService();
// rspData = epay->DockRefundRespond();
// epay->StopService();
TaskQRRefund taskEPayRefund(jsonObj, epay);
rspData = taskEPayRefund.doTask();
// TaskQRRefund taskEPayRefund(jsonObj, epay);
// rspData = taskEPayRefund.doTask();
fmTask = new TaskQRRefund(jsonObj, epay);
rspData = fmTask->doTask();
}
else {
rspData = QString::fromLocal8Bit("{\"msg:\":\"退款服务不可用\"}").toUtf8();
......@@ -155,14 +170,18 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
break;
}
case FM_Final: {
TaskFinal taskFinal(jsonObj, &session);
rspData = taskFinal.doTask();
// TaskFinal taskFinal(jsonObj, &session);
// rspData = taskFinal.doTask();
fmTask = new TaskFinal(jsonObj, &session);
rspData = fmTask->doTask();
session.clear();
break;
}
case FM_Fund: {
TaskFund taskFund(jsonObj);
rspData = taskFund.doTask();
// TaskFund taskFund(jsonObj);
// rspData = taskFund.doTask();
fmTask = new TaskFund(jsonObj);
rspData = fmTask->doTask();
break;
}
default:
......@@ -170,6 +189,11 @@ void FMVipDispatcher::doTask(const QByteArray &reqData, QByteArray &rspData)
break;
}
if(fmTask!=nullptr) {
fmTask->deleteLater();
fmTask = nullptr;
}
FMP_INFO() << "Send to pos: " << rspData;
}
......@@ -186,3 +210,10 @@ void FMVipDispatcher::setPluginContext(ctkPluginContext *ctx)
}
}
}
void FMVipDispatcher::stopTask()
{
if(fmTask!=nullptr) {
fmTask->stopTask();
}
}
......@@ -22,6 +22,9 @@ public:
void setPluginContext(ctkPluginContext *ctx);
public slots:
void stopTask();
private:
FMTask * fmTask;
ctkPluginContext* _ctx;
......
......@@ -60,7 +60,8 @@ void FMTask::stopTask()
preTask->stopTask();
}
if(_window != nullptr) {
_window->accept();
_window->reject();
FMMsgWnd::WarningWnd(QString::fromLocal8Bit("通讯中断,交易终止"), _window);
_window = nullptr;
}
......@@ -116,11 +117,7 @@ bool FMTask::sendToServer(bool isShowMsg)
QJsonDocument json(serverReqJsonObj);
QByteArray data = json.toJson(QJsonDocument::Compact);
#ifdef FMTEST
url = "http://127.0.0.1:5000/vip/" + ReqUrl.at(FM_Type());
#else
url = FMPVipSettings::instance()->getServerUrl() + "/" + ReqUrl.at(FM_Type());
#endif
QByteArray rspData;
FMNetwork net;
......
......@@ -5,7 +5,7 @@
#define VER_MINOR 1
#define VER_REVISION 0
#define VER_BUILD 33
#define VER_BUILD 34
//! Convert version numbers to string
#define _STR(S) #S
......
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