Commit a07907aa by NitefullWind

1. 新增POS断开socket后关闭窗口并提示。 2. 修改几处log信息。

parent ce30629e
...@@ -17,12 +17,15 @@ FMVipDispatcher::FMVipDispatcher(QObject *parent) ...@@ -17,12 +17,15 @@ FMVipDispatcher::FMVipDispatcher(QObject *parent)
_vindow(0), _vindow(0),
isLastOne(true), isLastOne(true),
_windowReturn(0), _windowReturn(0),
_posSocket(new QTcpSocket(this)),
_sysIcon(new QSystemTrayIcon) _sysIcon(new QSystemTrayIcon)
{ {
connect(this, SIGNAL(requested(QJsonObject)), SLOT(onRequest(QJsonObject))); connect(this, SIGNAL(requested(QJsonObject)), SLOT(onRequest(QJsonObject)));
connect(this, SIGNAL(responded(QByteArray)), SLOT(onResponse(QByteArray))); connect(this, SIGNAL(responded(QByteArray)), SLOT(onResponse(QByteArray)));
connect(FMVipForward::instance(), SIGNAL(serverResponsed(QJsonObject)), SLOT(onServerResponsed(QJsonObject))); connect(FMVipForward::instance(), SIGNAL(serverResponsed(QJsonObject)), SLOT(onServerResponsed(QJsonObject)));
connect(this, SIGNAL(initSocket()),this, SLOT(onInitSocket()));
QIcon icon = QIcon(":/img_logo.png"); QIcon icon = QIcon(":/img_logo.png");
_sysIcon->setIcon(icon); _sysIcon->setIcon(icon);
_sysIcon->setToolTip("FMVIP"); _sysIcon->setToolTip("FMVIP");
...@@ -46,6 +49,12 @@ FMVipDispatcher::~FMVipDispatcher() ...@@ -46,6 +49,12 @@ FMVipDispatcher::~FMVipDispatcher()
delete _sysIcon; delete _sysIcon;
_sysIcon = NULL; _sysIcon = NULL;
} }
if(_posSocket != nullptr) {
delete _posSocket;
_posSocket = nullptr;
}
} }
void FMVipDispatcher::onQuit() void FMVipDispatcher::onQuit()
...@@ -65,7 +74,7 @@ void FMVipDispatcher::onActiveSysTrayIcon(QSystemTrayIcon::ActivationReason reas ...@@ -65,7 +74,7 @@ void FMVipDispatcher::onActiveSysTrayIcon(QSystemTrayIcon::ActivationReason reas
INT FMVipDispatcher::_ParseRequest(LPSTR data) INT FMVipDispatcher::_ParseRequest(LPSTR data)
{ {
qDebug() << "\n\n\nPOS发来的请求 ===>\n" << data; qDebug() << "POS发来的请求:" << 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) {
...@@ -89,6 +98,9 @@ INT FMVipDispatcher::_ParseRequest(LPSTR data) ...@@ -89,6 +98,9 @@ INT FMVipDispatcher::_ParseRequest(LPSTR data)
BOOL FMVipDispatcher::_GetResponse(LPSTR &rsp, UINT &len) BOOL FMVipDispatcher::_GetResponse(LPSTR &rsp, UINT &len)
{ {
mutex.lock(); mutex.lock();
emit initSocket();
if(_serverRspData.isEmpty()) if(_serverRspData.isEmpty())
{ {
// 服务器还未返回则一直阻塞 // 服务器还未返回则一直阻塞
...@@ -98,7 +110,7 @@ BOOL FMVipDispatcher::_GetResponse(LPSTR &rsp, UINT &len) ...@@ -98,7 +110,7 @@ BOOL FMVipDispatcher::_GetResponse(LPSTR &rsp, UINT &len)
len = _serverRspData.length(); len = _serverRspData.length();
mutex.unlock(); mutex.unlock();
qDebug() << "发给POS ===>\n" << rsp; qDebug() << "发给POS:" << rsp;
return 1; return 1;
} }
...@@ -221,7 +233,6 @@ void FMVipDispatcher::onServerResponsed(const QJsonObject &rspObj) ...@@ -221,7 +233,6 @@ void FMVipDispatcher::onServerResponsed(const QJsonObject &rspObj)
} }
isLogin = false; isLogin = false;
_vindow->deleteLater(); _vindow->deleteLater();
qDebug() << "delete...";
} }
QJsonDocument rspDoc(rspObj); QJsonDocument rspDoc(rspObj);
...@@ -322,3 +333,19 @@ BOOL FMVipDispatcher::isLogined() ...@@ -322,3 +333,19 @@ BOOL FMVipDispatcher::isLogined()
QString account = SESSIONDATA_STRING("fm_open_id"); QString account = SESSIONDATA_STRING("fm_open_id");
return account != ""; return account != "";
} }
void FMVipDispatcher::onInitSocket()
{
_posSocket->setSocketDescriptor(_socket);
connect(_posSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onDisconnected()), Qt::UniqueConnection);
}
void FMVipDispatcher::onDisconnected()
{
if(_vindow != 0) {
_vindow->close();
}
FMMsgWnd::FailureWnd("操作时间过长,POS已断开Socket连接,请重新操作!");
serverIsBusy.wakeAll();
}
...@@ -7,9 +7,11 @@ ...@@ -7,9 +7,11 @@
#include "fmapirelay.h" #include "fmapirelay.h"
#include <QMutex> #include <QMutex>
#include <QWaitCondition> #include <QWaitCondition>
#include <QTcpSocket>
#define Err_WindowClose "{\"statusCode\":1001, \"prompt\":0, \"msg\":\"fmv:窗口异常关闭\"}" #define Err_WindowClose "{\"statusCode\":1001, \"prompt\":0, \"msg\":\"fmv:窗口异常关闭\"}"
#define Err_ErrorFMCMD "{\"statusCode\":1002, \"prompt\":1, \"msg\":\"fmv:无法识别的请求类型\"}" #define Err_ErrorFMCMD "{\"statusCode\":1002, \"prompt\":1, \"msg\":\"fmv:无法识别的请求类型\"}"
#define Err_Disconnected "{\"statusCode\":1003, \"prompt\":0, \"msg\":\"fmv:已经POS断开Socket连接\"}"
#define _DEBUG #define _DEBUG
...@@ -40,6 +42,8 @@ signals: ...@@ -40,6 +42,8 @@ signals:
void requested(const QJsonObject &); void requested(const QJsonObject &);
void responded(const QByteArray &); void responded(const QByteArray &);
void initSocket();
private slots: private slots:
void onRequest(const QJsonObject &jsonObj); void onRequest(const QJsonObject &jsonObj);
void onResponse(const QByteArray &rsp); void onResponse(const QByteArray &rsp);
...@@ -49,6 +53,9 @@ private slots: ...@@ -49,6 +53,9 @@ private slots:
void onDoPost(); void onDoPost();
void onInitSocket();
void onDisconnected();
void onActiveSysTrayIcon(QSystemTrayIcon::ActivationReason); void onActiveSysTrayIcon(QSystemTrayIcon::ActivationReason);
void onQuit(); void onQuit();
...@@ -61,6 +68,8 @@ private: ...@@ -61,6 +68,8 @@ private:
QSystemTrayIcon *_sysIcon; QSystemTrayIcon *_sysIcon;
QTcpSocket *_posSocket;
QMutex mutex; QMutex mutex;
QWaitCondition serverIsBusy; QWaitCondition serverIsBusy;
BOOL requestSuccess; BOOL requestSuccess;
......
...@@ -100,8 +100,8 @@ void FMVipForward::request(const QJsonObject &reqJob) ...@@ -100,8 +100,8 @@ void FMVipForward::request(const QJsonObject &reqJob)
} }
} }
qDebug() << "向服务器发送 ===>\n" << json; qDebug() << "向服务器发送:" << json;
qDebug() << "请求签名 ===>\n" << signStr; qDebug() << "请求签名:" << signStr;
// 设置请求头 // 设置请求头
_req.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); _req.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
...@@ -177,7 +177,7 @@ void FMVipForward::onServerFinished(QNetworkReply *reply, bool isTimeOut) ...@@ -177,7 +177,7 @@ void FMVipForward::onServerFinished(QNetworkReply *reply, bool isTimeOut)
QJsonParseError err; QJsonParseError err;
QJsonDocument jdoc = QJsonDocument::fromJson(data, &err); QJsonDocument jdoc = QJsonDocument::fromJson(data, &err);
qDebug() << "服务器返回 ===>\n" << jdoc; qDebug() << "服务器返回:" << jdoc;
if(err.error != QJsonParseError::NoError || !jdoc.isObject()) { if(err.error != QJsonParseError::NoError || !jdoc.isObject()) {
posObj["statusCode"] = 1000; posObj["statusCode"] = 1000;
......
...@@ -50,6 +50,7 @@ bool FMVipWnd::setProfile(const QByteArray &d) ...@@ -50,6 +50,7 @@ bool FMVipWnd::setProfile(const QByteArray &d)
void FMVipWnd::reject() void FMVipWnd::reject()
{ {
qDebug() << "窗口关闭";
QDialog::reject(); QDialog::reject();
setResult(-1); // 关闭时返回-1 setResult(-1); // 关闭时返回-1
deleteLater(); deleteLater();
...@@ -72,11 +73,11 @@ void FMVipWnd::setIsBusy(const bool isBusy) ...@@ -72,11 +73,11 @@ void FMVipWnd::setIsBusy(const bool isBusy)
int FMVipWnd::exec() int FMVipWnd::exec()
{ {
qDebug() << "显示窗口";
showNormal(); showNormal();
::SetForegroundWindow((HWND)effectiveWinId()); ::SetForegroundWindow((HWND)effectiveWinId());
::SetWindowPos( (HWND)effectiveWinId(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW); ::SetWindowPos( (HWND)effectiveWinId(), HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
// ::SetWindowPos( (HWND)effectiveWinId(), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
showNormal(); showNormal();
::SetForegroundWindow((HWND)effectiveWinId()); ::SetForegroundWindow((HWND)effectiveWinId());
...@@ -138,6 +139,11 @@ bool FMVipWnd::nativeEvent(const QByteArray &eventType, void *message, long *res ...@@ -138,6 +139,11 @@ bool FMVipWnd::nativeEvent(const QByteArray &eventType, void *message, long *res
fMsgDone = true; fMsgDone = true;
break; break;
} }
case WA_INACTIVE: {
qDebug() << "窗口失去焦点";
activateWindow();
break;
}
default: default:
break; break;
......
...@@ -211,8 +211,8 @@ void FMSockServer::RecvRoutine(DWORD err, DWORD bytes, LPWSAOVERLAPPED overlappe ...@@ -211,8 +211,8 @@ void FMSockServer::RecvRoutine(DWORD err, DWORD bytes, LPWSAOVERLAPPED overlappe
if (io_data->relay) { if (io_data->relay) {
io_data->relay->Transfer(io_data->msg, response, len); io_data->relay->Transfer(io_data->msg, response, len);
} }
if (response) { if (response) {
FMLOG(_T("Transfered %s"), response);
send(io_data->socket, response, len, 0); send(io_data->socket, response, len, 0);
} }
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