Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
FMVip_Today
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhenfei.zhang
FMVip_Today
Commits
da6c1b8f
Commit
da6c1b8f
authored
Sep 15, 2016
by
NitefllWind
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.重定向debug信息到文件中。2.处理POS发来的无法识别的请求类型。3.修复某些Socket未关闭。
parent
46c53602
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
70 additions
and
63 deletions
+70
-63
FMVip/fmvipdispatcher.cpp
+10
-6
FMVip/fmvipdispatcher.h
+1
-15
FMVip/fmvipforward.cpp
+10
-21
FMVip/main.cpp
+35
-8
FMVipDC/fmsockserver.cpp
+14
-13
No files found.
FMVip/fmvipdispatcher.cpp
View file @
da6c1b8f
...
@@ -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\n
POS发来的请求 ===>
\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
();
}
}
...
...
FMVip/fmvipdispatcher.h
View file @
da6c1b8f
...
@@ -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
...
...
FMVip/fmvipforward.cpp
View file @
da6c1b8f
...
@@ -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
,
reqDat
e
.
length
());
_req
.
setHeader
(
QNetworkRequest
::
ContentLengthHeader
,
reqDat
a
.
length
());
_nam
.
post
(
_req
,
reqDat
e
);
_nam
.
post
(
_req
,
reqDat
a
);
// 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
);
...
...
FMVip/main.cpp
View file @
da6c1b8f
...
@@ -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
();
}
}
FMVipDC/fmsockserver.cpp
View file @
da6c1b8f
...
@@ -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
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment