Commit 04869d6b by NitefullWind

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

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