Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
FaceDetection
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
guanghui.cui
FaceDetection
Commits
d7f9856a
Commit
d7f9856a
authored
Mar 01, 2018
by
guanghui.cui
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1、广告写入到sqlite数据库
2、广告接口对接
parent
2624bad5
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
165 additions
and
47 deletions
+165
-47
.gitignore
+13
-0
FaceDetection/FaceDetection.cpp
+75
-2
FaceDetection/utility/SQLiteModule.cpp
+53
-33
FaceDetection/utility/SQLiteModule.h
+10
-1
FaceDetection/utility/jsonAnalysis.cpp
+11
-11
Release/config.ini
+3
-0
Release/fmdata.db
+0
-0
No files found.
.gitignore
0 → 100644
View file @
d7f9856a
/relyLibrarys/
/ipch/
*.tlog
*.log
*.obj
*.iobj
*.pdb
*.ipdb
*.pch
*.ilk
*.suo
*.idb
\ No newline at end of file
FaceDetection/FaceDetection.cpp
View file @
d7f9856a
...
@@ -22,6 +22,7 @@
...
@@ -22,6 +22,7 @@
#include "curl/curl.h"
#include "curl/curl.h"
#include "utility/threadpool.h"
#include "utility/threadpool.h"
#include "utility/SQLiteModule.h"
#include "utility/SQLiteModule.h"
#include "utility/iniOperation.h"
INITIALIZE_EASYLOGGINGPP
INITIALIZE_EASYLOGGINGPP
//using namespace cv;
//using namespace cv;
using
namespace
std
;
using
namespace
std
;
...
@@ -51,10 +52,13 @@ using namespace std;
...
@@ -51,10 +52,13 @@ using namespace std;
全局变量定义
全局变量定义
****************************************/
****************************************/
std
::
string
strUrl
=
"http://139.196.195.9:8788/facesearch/search4File"
;
//接口URL
std
::
string
strUrl
=
"http://139.196.195.9:8788/facesearch/search4File"
;
//接口URL
std
::
string
strAdUrl
=
"http://www.eastjw.com:7000/FamilyInterfaceProject/familyInterface/addFamilyData"
;
//广告URL
std
::
vector
<
TargetInfo
>
track_dets
;
//跟踪目标所在位置
std
::
vector
<
TargetInfo
>
track_dets
;
//跟踪目标所在位置
CvxText
text
(
"kaiti.ttf"
);
//字库,否则不支持中文
CvxText
text
(
"kaiti.ttf"
);
//字库,否则不支持中文
int64
time_start
=
cv
::
getTickCount
(),
time_end
;
//时间戳,用于计算视频播放帧率
int64
time_start
=
cv
::
getTickCount
(),
time_end
;
//时间戳,用于计算视频播放帧率
int
fps
=
0
;
//帧率
int
fps
=
0
;
//帧率
std
::
vector
<
adStruct
>
vecADInfos
;
//广告信息
std
::
string
strDeviceId
;
//广告设备id
/****************************************
/****************************************
函数声明
函数声明
...
@@ -77,6 +81,11 @@ void reqUserInfoByImg(int index, string &imgPath);
...
@@ -77,6 +81,11 @@ void reqUserInfoByImg(int index, string &imgPath);
//更新图片文字显示
//更新图片文字显示
void
update_img_text
(
cv
::
Mat
&
image
,
int
iframe
,
int
target
);
void
update_img_text
(
cv
::
Mat
&
image
,
int
iframe
,
int
target
);
//获取广告信息,缓存到本地
void
get_adInfo
(
std
::
vector
<
adStruct
>
&
vecInfo
);
// 广告播放推送
CURLcode
curl_post_ad
(
const
string
&
url
,
const
string
equipmentId
,
const
string
productId
,
string
&
response
);
/****************************************
/****************************************
主函数
主函数
...
@@ -85,11 +94,22 @@ int main()
...
@@ -85,11 +94,22 @@ int main()
{
{
try
try
{
{
SQLite
sqlite
;
LOG
(
INFO
)
<<
"**************START PROCESS****************"
;
sqlite
.
initSQLite
();
// 读取配置文件信息
std
::
string
strIniPath
=
GetProcDir
();
strIniPath
.
append
(
"config.ini"
);
strDeviceId
=
ZIni
::
readString
(
"SYS"
,
"device_id"
,
""
,
strIniPath
.
c_str
());
LOG
(
INFO
)
<<
"device id:"
<<
strDeviceId
.
data
();
get_adInfo
(
vecADInfos
);
// global init curl
// global init curl
curl_global_init
(
CURL_GLOBAL_ALL
);
curl_global_init
(
CURL_GLOBAL_ALL
);
//std::string postAdResponseStr;
//curl_post_ad(strAdUrl,"6739c9fa37f547ef916d06d33a73331a","80052478", postAdResponseStr);
//LOG(INFO) <<"广告推送返回:" <<postAdResponseStr.data();
cv
::
VideoCapture
cap
(
0
);
cv
::
VideoCapture
cap
(
0
);
if
(
!
cap
.
isOpened
())
if
(
!
cap
.
isOpened
())
{
{
...
@@ -391,4 +411,56 @@ void update_img_text(cv::Mat &image, int iframe, int target)
...
@@ -391,4 +411,56 @@ void update_img_text(cv::Mat &image, int iframe, int target)
text
.
putText
(
&
IplImage
(
image
),
track_dets
[
i
].
strPhone
.
data
(),
cvPoint
(
track_dets
[
i
].
rc
.
right
()
+
5
,
track_dets
[
i
].
rc
.
top
()
+
45
),
CV_RGB
(
255
,
0
,
0
));
text
.
putText
(
&
IplImage
(
image
),
track_dets
[
i
].
strPhone
.
data
(),
cvPoint
(
track_dets
[
i
].
rc
.
right
()
+
5
,
track_dets
[
i
].
rc
.
top
()
+
45
),
CV_RGB
(
255
,
0
,
0
));
text
.
putText
(
&
IplImage
(
image
),
track_dets
[
i
].
strConfidence
.
data
(),
cvPoint
(
track_dets
[
i
].
rc
.
right
()
+
5
,
track_dets
[
i
].
rc
.
top
()
+
75
),
CV_RGB
(
255
,
0
,
0
));
text
.
putText
(
&
IplImage
(
image
),
track_dets
[
i
].
strConfidence
.
data
(),
cvPoint
(
track_dets
[
i
].
rc
.
right
()
+
5
,
track_dets
[
i
].
rc
.
top
()
+
75
),
CV_RGB
(
255
,
0
,
0
));
}
}
}
void
get_adInfo
(
std
::
vector
<
adStruct
>
&
vecInfo
)
{
SQLite
sqlite
;
sqlite
.
initSQLite
();
sqlite
.
query
(
"select * from fmAdInfo"
,
vecInfo
);
sqlite
.
closeSQLite
();
}
CURLcode
curl_post_ad
(
const
string
&
url
,
const
string
equipmentId
,
const
string
productId
,
string
&
response
)
{
// init curl
CURL
*
curl
=
curl_easy_init
();
// res code
CURLcode
res
;
if
(
curl
)
{
struct
curl_httppost
*
formpost
=
NULL
;
struct
curl_httppost
*
lastptr
=
NULL
;
curl_formadd
(
&
formpost
,
&
lastptr
,
CURLFORM_COPYNAME
,
"userId"
,
CURLFORM_COPYCONTENTS
,
"0ec78ea9ce9f4c3392399b663a5865cc"
,
CURLFORM_END
);
curl_formadd
(
&
formpost
,
&
lastptr
,
CURLFORM_COPYNAME
,
"passWord"
,
CURLFORM_COPYCONTENTS
,
"cf79ae6addba60ad018347359bd144d2"
,
CURLFORM_END
);
curl_formadd
(
&
formpost
,
&
lastptr
,
CURLFORM_COPYNAME
,
"equipmentId"
,
CURLFORM_COPYCONTENTS
,
equipmentId
.
data
(),
CURLFORM_END
);
curl_formadd
(
&
formpost
,
&
lastptr
,
CURLFORM_COPYNAME
,
"productId"
,
CURLFORM_COPYCONTENTS
,
productId
.
data
(),
CURLFORM_END
);
// set params
struct
curl_slist
*
head
=
NULL
;
head
=
curl_slist_append
(
head
,
"Content-Type:multipart/form-data"
);
//head = curl_slist_append(head, "Content-Type:application/json");
curl_easy_setopt
(
curl
,
CURLOPT_HTTPHEADER
,
head
);
curl_easy_setopt
(
curl
,
CURLOPT_POST
,
1
);
// post req
curl_easy_setopt
(
curl
,
CURLOPT_URL
,
url
.
c_str
());
// url
curl_easy_setopt
(
curl
,
CURLOPT_HTTPPOST
,
formpost
);
//curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postParams.c_str()); // params
curl_easy_setopt
(
curl
,
CURLOPT_SSL_VERIFYPEER
,
false
);
// if want to use https
curl_easy_setopt
(
curl
,
CURLOPT_SSL_VERIFYHOST
,
false
);
// set peer and host verify false
curl_easy_setopt
(
curl
,
CURLOPT_VERBOSE
,
1
);
curl_easy_setopt
(
curl
,
CURLOPT_READFUNCTION
,
NULL
);
curl_easy_setopt
(
curl
,
CURLOPT_WRITEFUNCTION
,
req_reply
);
curl_easy_setopt
(
curl
,
CURLOPT_WRITEDATA
,
(
void
*
)
&
response
);
curl_easy_setopt
(
curl
,
CURLOPT_NOSIGNAL
,
1
);
curl_easy_setopt
(
curl
,
CURLOPT_HEADER
,
1
);
curl_easy_setopt
(
curl
,
CURLOPT_CONNECTTIMEOUT
,
3
);
curl_easy_setopt
(
curl
,
CURLOPT_TIMEOUT
,
3
);
// start req
res
=
curl_easy_perform
(
curl
);
}
// release curl
curl_easy_cleanup
(
curl
);
return
res
;
}
}
\ No newline at end of file
FaceDetection/utility/SQLiteModule.cpp
View file @
d7f9856a
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
#include "utilCommonAPI.h"
#include "utilCommonAPI.h"
#include "easylogging++.h"
#include "easylogging++.h"
#define BUFFER_SIZE 1024 //
缓冲区大小
#define BUFFER_SIZE 1024 //
缓冲区大小
SQLite
::
SQLite
()
SQLite
::
SQLite
()
{
{
...
@@ -17,17 +17,17 @@ SQLite::~SQLite()
...
@@ -17,17 +17,17 @@ SQLite::~SQLite()
bool
SQLite
::
initSQLite
()
bool
SQLite
::
initSQLite
()
{
{
std
::
string
strDbFileName
;
//*.db
名称
std
::
string
strDbFileName
;
//*.db
名称
std
::
string
strPath
=
GetProcDir
();
std
::
string
strPath
=
GetProcDir
();
strPath
.
append
(
"fmdata.db"
);
strPath
.
append
(
"fmdata.db"
);
strDbFileName
=
strPath
;
strDbFileName
=
strPath
;
//
打开一个数据库,如果改数据库不存在,则创建一个名字为databaseName的数据库文件
//
打开一个数据库,如果改数据库不存在,则创建一个名字为databaseName的数据库文件
int
res
=
sqlite3_open
(
strDbFileName
.
c_str
(),
&
pDB
);
int
res
=
sqlite3_open
(
strDbFileName
.
c_str
(),
&
pDB
);
LOG
(
INFO
)
<<
"DbFileName:"
<<
strDbFileName
.
c_str
();
LOG
(
INFO
)
<<
"DbFileName:"
<<
strDbFileName
.
c_str
();
if
(
res
!=
SQLITE_OK
)
if
(
res
!=
SQLITE_OK
)
{
{
LOG
(
ERROR
)
<<
"
打开数据库失败:"
<<
strDbFileName
.
data
();
LOG
(
ERROR
)
<<
"
打开数据库失败
:"
<<
strDbFileName
.
data
();
return
false
;
return
false
;
}
}
try
try
...
@@ -36,7 +36,7 @@ bool SQLite::initSQLite()
...
@@ -36,7 +36,7 @@ bool SQLite::initSQLite()
}
}
catch
(
std
::
exception
&
ex
)
catch
(
std
::
exception
&
ex
)
{
{
LOG
(
ERROR
)
<<
"
创建表异常:"
<
<
ex
.
what
();
LOG
(
ERROR
)
<<
"
创建表异常:
"
<<
ex
.
what
();
return
false
;
return
false
;
}
}
return
true
;
return
true
;
...
@@ -44,32 +44,27 @@ bool SQLite::initSQLite()
...
@@ -44,32 +44,27 @@ bool SQLite::initSQLite()
bool
SQLite
::
_createTable
()
bool
SQLite
::
_createTable
()
{
{
//
插入一个表,返回值为SQLITE_OK为成功,否则输出出错信息
//
插入一个表,返回值为SQLITE_OK为成功,否则输出出错信息
//
函数参数:第一个为操作数据库的指针,第二句为SQL命令字符串
//
函数参数:第一个为操作数据库的指针,第二句为SQL命令字符串
//
第三个参数为callback函数,这里没有用,第四个参数为callback函数
//
第三个参数为callback函数,这里没有用,第四个参数为callback函数
//
中的第一个参数,第五个为出错信息
//
中的第一个参数,第五个为出错信息
bool
rlt
=
true
;
bool
rlt
=
true
;
std
::
string
strTableName
=
"fm
Test
"
;
std
::
string
strTableName
=
"fm
AdInfo
"
;
if
(
!
isTableExist
(
pDB
,
strTableName
))
{
if
(
!
isTableExist
(
pDB
,
strTableName
))
{
char
szCreate
[
1024
]
=
{
0
};
char
szCreate
[
1024
]
=
{
0
};
sprintf_s
(
szCreate
,
"create table %s(fm_id varchar(50) NOT NULL,\
sprintf_s
(
szCreate
,
"create table %s(id int NOT NULL,\
statusCode int, \
user_tag varchar(50),\
msg varchar(200),\
goods_id varchar(50),\
prompt bool,\
goods_name varchar(200),\
fm_open_id varchar(50),\
logtime TIMESTAMP default (datetime('now', 'localtime')),\
total_amount int,\
PRIMARY KEY (id))"
,
strTableName
.
c_str
());
paid_total_amount int,\
invoice_amount int,\
incentives_amount int,\
logtime TIMESTAMP default (datetime('now', 'localtime')),\
PRIMARY KEY (fm_id))"
,
strTableName
.
c_str
());
if
(
!
_execSql
(
szCreate
))
{
if
(
!
_execSql
(
szCreate
))
{
//
执行失败,退出
//
执行失败,退出
exit
(
0
);
exit
(
0
);
}
}
}
}
else
{
else
{
LOG
(
INFO
)
<<
"
已存在表:"
<<
strTableName
.
data
()
;
LOG
(
INFO
)
<<
"
已存在表
:"
<<
strTableName
.
data
()
;
}
}
return
rlt
;
return
rlt
;
...
@@ -81,7 +76,7 @@ void SQLite::closeSQLite()
...
@@ -81,7 +76,7 @@ void SQLite::closeSQLite()
sqlite3_close
(
pDB
);
sqlite3_close
(
pDB
);
}
}
//
查看表是否存在
//
查看表是否存在
bool
SQLite
::
isTableExist
(
sqlite3
*
sqDb
,
std
::
string
strTableName
)
bool
SQLite
::
isTableExist
(
sqlite3
*
sqDb
,
std
::
string
strTableName
)
{
{
char
szQuery
[
1024
]
=
{
0
};
char
szQuery
[
1024
]
=
{
0
};
...
@@ -99,7 +94,7 @@ bool SQLite::isTableExist(sqlite3 *sqDb, std::string strTableName)
...
@@ -99,7 +94,7 @@ bool SQLite::isTableExist(sqlite3 *sqDb, std::string strTableName)
int
SQLite
::
isRecordExist
(
std
::
string
strTable
,
std
::
string
strKey
)
int
SQLite
::
isRecordExist
(
std
::
string
strTable
,
std
::
string
strKey
)
{
{
char
*
lpSql
=
new
char
[
BUFFER_SIZE
];
char
*
lpSql
=
new
char
[
BUFFER_SIZE
];
sprintf_s
(
lpSql
,
BUFFER_SIZE
,
"select * from %s where
trans_id
= '%s'"
,
strTable
.
c_str
(),
strKey
.
c_str
());
sprintf_s
(
lpSql
,
BUFFER_SIZE
,
"select * from %s where
user_tag
= '%s'"
,
strTable
.
c_str
(),
strKey
.
c_str
());
char
**
pResult
;
char
**
pResult
;
int
nRow
=
0
;
int
nRow
=
0
;
int
nCol
=
0
;
int
nCol
=
0
;
...
@@ -119,7 +114,7 @@ bool SQLite::_execSql(const char* sql)
...
@@ -119,7 +114,7 @@ bool SQLite::_execSql(const char* sql)
int
res
=
sqlite3_exec
(
pDB
,
sql
,
0
,
0
,
&
errMsg
);
int
res
=
sqlite3_exec
(
pDB
,
sql
,
0
,
0
,
&
errMsg
);
if
(
res
!=
SQLITE_OK
)
if
(
res
!=
SQLITE_OK
)
{
{
LOG
(
ERROR
)
<<
"
执行sql失败:"
<<
sql
<<
" 失败信息:"
<
<
errMsg
;
LOG
(
ERROR
)
<<
"
执行sql失败:"
<<
sql
<<
" 失败信息
:"
<<
errMsg
;
rlt
=
false
;
rlt
=
false
;
}
}
return
rlt
;
return
rlt
;
...
@@ -140,29 +135,53 @@ bool SQLite::remove(const char* sql)
...
@@ -140,29 +135,53 @@ bool SQLite::remove(const char* sql)
return
_execSql
(
sql
);
return
_execSql
(
sql
);
}
}
std
::
string
UTF8ToASCII
(
const
char
*
utf8
)
{
std
::
string
strUtf8
;
int
len
=
MultiByteToWideChar
(
CP_UTF8
,
0
,
utf8
,
-
1
,
NULL
,
0
);
wchar_t
*
wstr
=
new
wchar_t
[
len
+
1
];
memset
(
wstr
,
0
,
len
+
1
);
MultiByteToWideChar
(
CP_UTF8
,
0
,
utf8
,
-
1
,
wstr
,
len
);
len
=
WideCharToMultiByte
(
CP_ACP
,
0
,
wstr
,
-
1
,
NULL
,
0
,
NULL
,
NULL
);
char
*
str
=
new
char
[
len
+
1
];
memset
(
str
,
0
,
len
+
1
);
WideCharToMultiByte
(
CP_ACP
,
0
,
wstr
,
-
1
,
str
,
len
,
NULL
,
NULL
);
if
(
wstr
)
delete
[]
wstr
;
strUtf8
=
str
;
if
(
str
)
delete
[]
str
;
return
strUtf8
;
}
std
::
vector
<
adStruct
>
vecTempADInfo
;
int
callbackQuery
(
void
*
data
,
int
n_columns
,
char
**
column_values
,
char
**
column_names
)
int
callbackQuery
(
void
*
data
,
int
n_columns
,
char
**
column_values
,
char
**
column_names
)
{
{
try
try
{
{
std
::
string
col0
=
column_values
[
0
];
adStruct
adInfo
;
std
::
string
col1
=
column_values
[
1
];
adInfo
.
userTag
=
UTF8ToASCII
(
column_values
[
1
]);
std
::
string
col2
=
column_values
[
2
];
adInfo
.
goodsId
=
column_values
[
2
];
LOG
(
INFO
)
<<
"column0:"
<<
col0
<<
" column1:"
<<
col1
<<
" column2:"
<<
col2
;
adInfo
.
goodsName
=
UTF8ToASCII
(
column_values
[
3
]);
vecTempADInfo
.
push_back
(
adInfo
);
}
}
catch
(
std
::
exception
&
ex
)
catch
(
std
::
exception
&
ex
)
{
{
LOG
(
ERROR
)
<<
"
读取数据失败:"
<<
ex
.
what
();
LOG
(
ERROR
)
<<
"
读取数据失败
:"
<<
ex
.
what
();
return
-
1
;
return
-
1
;
}
}
return
0
;
return
0
;
}
}
void
SQLite
::
query
(
const
char
*
sql
)
void
SQLite
::
query
(
const
char
*
sql
,
std
::
vector
<
adStruct
>
&
vecADInfos
)
{
{
vecTempADInfo
.
clear
();
int
rlt
=
sqlite3_exec
(
pDB
,
sql
,
callbackQuery
,
0
,
&
errMsg
);
int
rlt
=
sqlite3_exec
(
pDB
,
sql
,
callbackQuery
,
0
,
&
errMsg
);
if
(
rlt
!=
SQLITE_OK
)
if
(
rlt
!=
SQLITE_OK
)
{
{
LOG
(
ERROR
)
<<
"查询数据失败:"
<<
errMsg
;
LOG
(
ERROR
)
<<
"查询数据失败:"
<<
errMsg
;
}
else
{
vecADInfos
.
assign
(
vecTempADInfo
.
begin
(),
vecTempADInfo
.
end
());
}
}
}
}
\ No newline at end of file
FaceDetection/utility/SQLiteModule.h
View file @
d7f9856a
#ifndef SQLITE_MODULE_H
#ifndef SQLITE_MODULE_H
#define SQLITE_MODULE_H
#define SQLITE_MODULE_H
#include <iostream>
#include <iostream>
#include <vector>
#include "sqlite3.h"
#include "sqlite3.h"
//广告信息结构体
struct
adStruct
{
std
::
string
userTag
;
//用户标签
std
::
string
goodsId
;
//商品广告ID
std
::
string
goodsName
;
//商品名称
};
class
SQLite
class
SQLite
{
{
public
:
public
:
...
@@ -17,7 +26,7 @@ public:
...
@@ -17,7 +26,7 @@ public:
bool
insert
(
const
char
*
sql
);
bool
insert
(
const
char
*
sql
);
bool
update
(
const
char
*
sql
);
bool
update
(
const
char
*
sql
);
bool
remove
(
const
char
*
sql
);
bool
remove
(
const
char
*
sql
);
void
query
(
const
char
*
sql
);
void
query
(
const
char
*
sql
,
std
::
vector
<
adStruct
>
&
vecADInfos
);
private
:
private
:
bool
_execSql
(
const
char
*
sql
);
bool
_execSql
(
const
char
*
sql
);
bool
_createTable
();
bool
_createTable
();
...
...
FaceDetection/utility/jsonAnalysis.cpp
View file @
d7f9856a
// json.cpp :
定义控制台应用程序的入口点。
// json.cpp :
定义控制台应用程序的入口点。
//
//
#include "jsonAnalysis.h"
#include "jsonAnalysis.h"
...
@@ -47,9 +47,9 @@ std::string GetIdentityUserJson(const char* photo)
...
@@ -47,9 +47,9 @@ std::string GetIdentityUserJson(const char* photo)
sServerResponse
GetServerResultData
(
const
char
*
json
)
sServerResponse
GetServerResultData
(
const
char
*
json
)
{
{
sServerResponse
res
;
sServerResponse
res
;
rapidjson
::
Document
document
;
//
定义一个Document对象
rapidjson
::
Document
document
;
//
定义一个Document对象
document
.
Parse
(
json
);
//
解析,Parse()无返回值,也不会抛异常
document
.
Parse
(
json
);
//
解析,Parse()无返回值,也不会抛异常
if
(
document
.
HasParseError
())
//
通过HasParseError()来判断解析是否成功
if
(
document
.
HasParseError
())
//
通过HasParseError()来判断解析是否成功
{
{
std
::
cout
<<
"HasParseError11"
<<
std
::
endl
;
std
::
cout
<<
"HasParseError11"
<<
std
::
endl
;
}
}
...
@@ -109,14 +109,14 @@ sServerResponse GetServerResultData(const char* json)
...
@@ -109,14 +109,14 @@ sServerResponse GetServerResultData(const char* json)
int
SocketRequestJson
(
const
char
*
json
)
int
SocketRequestJson
(
const
char
*
json
)
{
{
int
result
=
0
;
int
result
=
0
;
rapidjson
::
Document
document
;
//
定义一个Document对象
rapidjson
::
Document
document
;
//
定义一个Document对象
document
.
Parse
(
json
);
//
解析,Parse()无返回值,也不会抛异常
document
.
Parse
(
json
);
//
解析,Parse()无返回值,也不会抛异常
if
(
document
.
HasParseError
())
//
通过HasParseError()来判断解析是否成功
if
(
document
.
HasParseError
())
//
通过HasParseError()来判断解析是否成功
{
{
//
可通过GetParseError()取得出错代码,
//
可通过GetParseError()取得出错代码,
//
注意GetParseError()返回的是一个rapidjson::ParseErrorCode类型的枚举值
//
注意GetParseError()返回的是一个rapidjson::ParseErrorCode类型的枚举值
//
使用函数rapidjson::GetParseError_En()得到错误码的字符串说明,这里的En为English简写
//
使用函数rapidjson::GetParseError_En()得到错误码的字符串说明,这里的En为English简写
//
函数GetErrorOffset()返回出错发生的位置
//
函数GetErrorOffset()返回出错发生的位置
//LOG_ERROR("GetTakeawayPrintInfo JSON parse error: (%d:%d)", document.GetParseError(), document.GetErrorOffset())
//LOG_ERROR("GetTakeawayPrintInfo JSON parse error: (%d:%d)", document.GetParseError(), document.GetErrorOffset())
//return false;
//return false;
}
}
...
...
Release/config.ini
0 → 100644
View file @
d7f9856a
[SYS]
device_id
=
6739c9fa37f547ef916d06d33a73331a
Release/fmdata.db
0 → 100644
View file @
d7f9856a
File added
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