backup.txt 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371
  1. #include <cstdio>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <string>
  5. #include <fstream>
  6. #include <unistd.h>
  7. #include "dhnetsdk.h"
  8. #define Log(x...) printf("[HmGate|%3d] %14s : ",__LINE__,__FUNCTION__),printf(x),printf("\n")
  9. int imageRead(const std::string &path, char *&buffer) {
  10. std::ifstream img(path, std::ios::binary);
  11. img.seekg(0, std::ios::end);
  12. int size = (int) img.tellg();
  13. img.seekg(0, std::ios::beg);
  14. buffer = new char[size];
  15. img.read(buffer, size);
  16. return size;
  17. }
  18. void imageSave(const std::string &path, char *&start, const int &size) {
  19. if (size > 0 && start != nullptr) {
  20. std::ofstream out(path, std::ios::binary);
  21. if (!out.is_open()) return;
  22. out.write(start, size);
  23. out.close();
  24. }
  25. }
  26. class Device {
  27. private:
  28. LLONG loginId;
  29. const char *uid = "TempUserId", *name = "临时用户", *path = "./face.jpg";
  30. // 用户信息查询:CLIENT_StartFindUserInfo
  31. void userFind() {
  32. NET_IN_USERINFO_START_FIND stin;
  33. stin.dwSize = sizeof stin;
  34. strcpy(stin.szUserID, "");
  35. NET_OUT_USERINFO_START_FIND stout;
  36. stout.dwSize = sizeof stout;
  37. LLONG handler = CLIENT_StartFindUserInfo(loginId, &stin, &stout, 1000);
  38. if (handler) {
  39. Log("start: cap: %d, total: %d", stout.nCapNum, stout.nTotalCount);
  40. NET_IN_USERINFO_DO_FIND din;
  41. din.dwSize = sizeof din;
  42. din.nStartNo = 0;
  43. din.nCount = 3;
  44. NET_OUT_USERINFO_DO_FIND dout;
  45. dout.dwSize = sizeof dout;
  46. dout.nMaxNum = 3;
  47. dout.pstuInfo = new NET_ACCESS_USER_INFO[3];
  48. bool res = CLIENT_DoFindUserInfo(handler, &din, &dout, 1000);
  49. if (res) {
  50. Log("find success: count: %d", dout.nRetNum);
  51. for (int i = 0; i < dout.nRetNum; ++i) Log("user[%d].name: %s", i + 1, dout.pstuInfo[i].szName);
  52. } else {
  53. Log("find fail: %x", CLIENT_GetLastError());
  54. }
  55. delete[] dout.pstuInfo;
  56. } else {
  57. Log("can't start");
  58. }
  59. CLIENT_StopFindUserInfo(handler);
  60. sleep(1);
  61. }
  62. void faceAdd() {
  63. Log("-");
  64. NET_IN_ADD_FACE_INFO in;
  65. in.dwSize = sizeof in;
  66. strcpy(in.szUserID, uid);
  67. in.stuFaceInfo.nFacePhoto = 1;
  68. char *img;
  69. in.stuFaceInfo.nFacePhotoLen[0] = imageRead(path, img);
  70. in.stuFaceInfo.pszFacePhoto[0] = (char *) img;
  71. NET_OUT_ADD_FACE_INFO out;
  72. out.dwSize = sizeof out;
  73. bool res = CLIENT_FaceInfoOpreate(loginId, EM_FACEINFO_OPREATE_ADD, &in, &out, 1000);
  74. if (res) {
  75. Log("add face success");
  76. } else {
  77. Log("add face fail: %x", CLIENT_GetLastError());
  78. }
  79. delete[] img;
  80. }
  81. void userAdd() {
  82. Log("-");
  83. NET_IN_ACCESS_USER_SERVICE_INSERT in;
  84. in.dwSize = sizeof in;
  85. in.nInfoNum = 1;
  86. auto *user = new NET_ACCESS_USER_INFO;
  87. user->bUserIDEx = 0;
  88. strcpy(user->szUserID, uid);
  89. user->bUseNameEx = 0;
  90. strcpy(user->szName, name);
  91. user->emUserType = NET_ENUM_USER_TYPE_NORMAL;
  92. user->nUserStatus = 0;
  93. user->nDoorNum = 1, user->nDoors[0] = 0;
  94. user->nTimeSectionNum = 1, user->nTimeSectionNo[0] = 255;
  95. user->stuValidEndTime.dwYear = 2100, user->stuValidEndTime.dwMonth = 1, user->stuValidEndTime.dwDay = 1,
  96. user->stuValidEndTime.dwHour = 0, user->stuValidEndTime.dwMinute = 0, user->stuValidEndTime.dwSecond = 0;
  97. user->emAuthority = NET_ATTENDANCE_AUTHORITY_CUSTOMER;
  98. in.pUserInfo = user;
  99. NET_OUT_ACCESS_USER_SERVICE_INSERT out;
  100. out.dwSize = sizeof out;
  101. out.nMaxRetNum = 1;
  102. out.pFailCode = new NET_EM_FAILCODE;
  103. bool res = CLIENT_OperateAccessUserService(loginId, NET_EM_ACCESS_CTL_USER_SERVICE_INSERT, &in, &out, 3000);
  104. if (res) {
  105. Log("add success: %d", out.nMaxRetNum);
  106. faceAdd();
  107. } else {
  108. Log("query fail: %x, code: %d", CLIENT_GetLastError(), *out.pFailCode);
  109. }
  110. delete user;
  111. delete out.pFailCode;
  112. }
  113. void faceRemove() {
  114. Log("-");
  115. NET_IN_REMOVE_FACE_INFO in;
  116. in.dwSize = sizeof in;
  117. strcpy(in.szUserID, uid);
  118. NET_OUT_REMOVE_FACE_INFO out;
  119. out.dwSize = sizeof out;
  120. bool res = CLIENT_FaceInfoOpreate(loginId, EM_FACEINFO_OPREATE_REMOVE, &in, &out, 3000);
  121. if (res) {
  122. Log("delete face success");
  123. } else {
  124. Log("delete face fail: %x", CLIENT_GetLastError());
  125. }
  126. }
  127. void userRemove() {
  128. faceRemove();
  129. Log("-");
  130. NET_IN_ACCESS_USER_SERVICE_REMOVE in;
  131. in.dwSize = sizeof in;
  132. in.nUserNum = 1;
  133. std::strcpy(in.szUserID[0], uid);
  134. in.bUserIDEx = 0;
  135. NET_OUT_ACCESS_USER_SERVICE_REMOVE out;
  136. out.dwSize = sizeof out;
  137. out.nMaxRetNum = 1;
  138. out.pFailCode = new NET_EM_FAILCODE;
  139. bool res = CLIENT_OperateAccessUserService(loginId, NET_EM_ACCESS_CTL_USER_SERVICE_REMOVE, &in, &out, 1000);
  140. if (res) {
  141. Log("delete user success");
  142. } else {
  143. Log("delete user fail: %x", CLIENT_GetLastError());
  144. }
  145. delete out.pFailCode;
  146. }
  147. void carQuery(const bool &isBlack) {
  148. Log("-");
  149. NET_IN_FIND_RECORD_PARAM find_in;
  150. find_in.dwSize = sizeof find_in;
  151. find_in.emType = isBlack ? NET_RECORD_TRAFFICBLACKLIST : NET_RECORD_TRAFFICREDLIST;
  152. auto *find_cond = new FIND_RECORD_TRAFFICREDLIST_CONDITION;
  153. find_cond->dwSize = sizeof(FIND_RECORD_TRAFFICREDLIST_CONDITION);
  154. strcpy(find_cond->szPlateNumber, "");
  155. strcpy(find_cond->szPlateNumberVague, "");
  156. find_cond->nQueryResultBegin = 0;
  157. find_cond->bRapidQuery = 0;
  158. find_in.pQueryCondition = find_cond;
  159. NET_OUT_FIND_RECORD_PARAM find_out;
  160. find_out.dwSize = sizeof find_out;
  161. bool res = CLIENT_FindRecord(loginId, &find_in, &find_out);
  162. if (res) {
  163. Log("find success: handler = %ld", find_out.lFindeHandle);
  164. NET_IN_QUEYT_RECORD_COUNT_PARAM query_in;
  165. query_in.dwSize = sizeof query_in;
  166. query_in.lFindeHandle = find_out.lFindeHandle;
  167. NET_OUT_QUEYT_RECORD_COUNT_PARAM query_out;
  168. query_out.dwSize = sizeof query_out;
  169. res = CLIENT_QueryRecordCount(&query_in, &query_out);
  170. if (res) {
  171. Log("count success: total = %d", query_out.nRecordCount);
  172. int found = 0;
  173. while (found < query_out.nRecordCount) {
  174. NET_IN_FIND_NEXT_RECORD_PARAM do_in;
  175. do_in.dwSize = sizeof do_in;
  176. do_in.lFindeHandle = find_out.lFindeHandle;
  177. do_in.nFileCount = 5;
  178. NET_OUT_FIND_NEXT_RECORD_PARAM do_out;
  179. do_out.dwSize = sizeof do_out;
  180. do_out.nMaxRecordNum = 5;
  181. auto *records = new NET_TRAFFIC_LIST_RECORD[5];
  182. do_out.pRecordList = records;
  183. for (int i = 0; i < 5; ++i) records[i].dwSize = sizeof(NET_TRAFFIC_LIST_RECORD);
  184. res = CLIENT_FindNextRecord(&do_in, &do_out);
  185. if (res) {
  186. // Log("query success: return = %d, max = %d", do_out.nRetRecordNum, do_out.nMaxRecordNum);
  187. found += do_out.nRetRecordNum;
  188. for (int i = 0; i < do_out.nRetRecordNum; ++i) {
  189. Log(
  190. "id: %d, name: %s, plate: %s, auth-num: %d, control-num: %d, start: %d-%d-%d %d:%d:%d, end: %d-%d-%d %d:%d:%d",
  191. records[i].nRecordNo, records[i].szMasterOfCar, records[i].szPlateNumber,
  192. records[i].nAuthrityNum, records[i].emControlType,
  193. records[i].stBeginTime.dwYear, records[i].stBeginTime.dwMonth,
  194. records[i].stBeginTime.dwDay, records[i].stBeginTime.dwHour,
  195. records[i].stBeginTime.dwMinute, records[i].stBeginTime.dwSecond,
  196. records[i].stCancelTime.dwYear, records[i].stCancelTime.dwMonth,
  197. records[i].stCancelTime.dwDay, records[i].stCancelTime.dwHour,
  198. records[i].stCancelTime.dwMinute, records[i].stCancelTime.dwSecond
  199. );
  200. }
  201. } else {
  202. Log("query failed: %u", CLIENT_GetLastError());
  203. }
  204. delete[] records;
  205. }
  206. } else {
  207. Log("count failed: %u", CLIENT_GetLastError());
  208. }
  209. CLIENT_FindRecordClose(find_out.lFindeHandle);
  210. } else {
  211. Log("find failed: %u", CLIENT_GetLastError());
  212. }
  213. delete find_cond;
  214. }
  215. void carAdd(const bool &isBlack) {
  216. Log("-");
  217. NET_IN_OPERATE_TRAFFIC_LIST_RECORD in;
  218. in.dwSize = sizeof in;
  219. in.emOperateType = NET_TRAFFIC_LIST_INSERT;
  220. in.emRecordType = isBlack ? NET_RECORD_TRAFFICBLACKLIST : NET_RECORD_TRAFFICREDLIST;
  221. auto *info = new NET_INSERT_RECORD_INFO;
  222. info->dwSize = sizeof(NET_INSERT_RECORD_INFO);
  223. auto *record = new NET_TRAFFIC_LIST_RECORD;
  224. strcpy(record->szMasterOfCar, name);
  225. strcpy(record->szPlateNumber, plate);
  226. record->stBeginTime.dwYear = 2000, record->stBeginTime.dwMonth = 1, record->stBeginTime.dwDay = 1,
  227. record->stBeginTime.dwHour = 0, record->stBeginTime.dwMinute = 0, record->stBeginTime.dwSecond = 0;
  228. record->stCancelTime.dwYear = 2077, record->stCancelTime.dwMonth = 1, record->stCancelTime.dwDay = 1,
  229. record->stCancelTime.dwHour = 0, record->stCancelTime.dwMinute = 0, record->stCancelTime.dwSecond = 0;
  230. record->nAuthrityNum = 0;
  231. info->pRecordInfo = record;
  232. in.pstOpreateInfo = info;
  233. NET_OUT_OPERATE_TRAFFIC_LIST_RECORD out;
  234. out.dwSize = sizeof out;
  235. bool res = CLIENT_OperateTrafficList(loginId, &in, &out);
  236. if (res) {
  237. Log("add success: record-number = %d", out.nRecordNo);
  238. } else {
  239. Log("add failed: %u", CLIENT_GetLastError());
  240. }
  241. delete record;
  242. delete info;
  243. }
  244. void carDel(const bool &isBlack, const int &id) {
  245. Log("-");
  246. NET_IN_OPERATE_TRAFFIC_LIST_RECORD in;
  247. in.dwSize = sizeof in;
  248. in.emOperateType = NET_TRAFFIC_LIST_REMOVE;
  249. in.emRecordType = isBlack ? NET_RECORD_TRAFFICBLACKLIST : NET_RECORD_TRAFFICREDLIST;
  250. auto *info = new NET_REMOVE_RECORD_INFO;
  251. info->dwSize = sizeof(NET_REMOVE_RECORD_INFO);
  252. info->nRecordNo = id;
  253. in.pstOpreateInfo = info;
  254. NET_OUT_OPERATE_TRAFFIC_LIST_RECORD out;
  255. out.dwSize = sizeof out;
  256. bool res = CLIENT_OperateTrafficList(loginId, &in, &out);
  257. if (res) {
  258. Log("delete success: id = %d", out.nRecordNo);
  259. } else {
  260. Log("delete failed: %u", CLIENT_GetLastError());
  261. }
  262. delete info;
  263. }
  264. public:
  265. Device() {
  266. bool ok = CLIENT_Init(nullptr, 0);
  267. CLIENT_SetAutoReconnect(nullptr, 0);
  268. CLIENT_SetConnectTime(3000, 3);
  269. if (!ok) {
  270. Log("SDK init failed.");
  271. exit(-1);
  272. }
  273. Log("SDK init success");
  274. NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY in = {0};
  275. in.dwSize = sizeof in;
  276. strcpy(in.szIP, "192.168.1.108");
  277. in.nPort = 37777;
  278. strcpy(in.szUserName, "admin");
  279. strcpy(in.szPassword, "hmkj6688");
  280. NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY out;
  281. out.dwSize = sizeof out;
  282. this->loginId = CLIENT_LoginWithHighLevelSecurity(&in, &out);
  283. if (!this->loginId) {
  284. Log("login failed.");
  285. exit(-1);
  286. }
  287. Log("login success");
  288. }
  289. void Run() {
  290. userFind();
  291. // userAdd();
  292. // userFind();
  293. // userRemove();
  294. }
  295. ~Device() {
  296. Log("clean, Bye ~");
  297. CLIENT_Cleanup();
  298. }
  299. };
  300. int main(int count, char **args) {
  301. Device device;
  302. device.Run();
  303. return 0;
  304. }
  305. /// json test
  306. #include "json/parser.h"
  307. #include <iostream>
  308. using namespace std;
  309. int main() {
  310. string str1 = R"({
  311. "name": "Tinger",
  312. "age": 18,
  313. "words": ["this", "is", 123, null, false],
  314. })", str2 = R"([
  315. {
  316. "name": "jack",
  317. "age": 26
  318. }, {
  319. "name": "jay",
  320. "age": 32
  321. }, {
  322. "name": "john",
  323. "age": 62
  324. }
  325. ])", str3 = R"({
  326. "int": 2,
  327. "double": 96.26,
  328. "string": "casef"
  329. })";
  330. json::Parser parser;
  331. json::Value value = parser.parse(str3);
  332. cout << value.str() << " " << value["465"].type_name() << endl;
  333. return 0;
  334. }