{"id":97855,"date":"2026-08-30T13:32:43","date_gmt":"2026-08-30T05:32:43","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/97855.html"},"modified":"2026-08-30T13:32:43","modified_gmt":"2026-08-30T05:32:43","slug":"%e9%a2%84%e7%ba%a6%e7%b3%bb%e7%bb%9f%e7%89%88%e6%9c%ac2%ef%bc%88pyhtonflask%e5%8f%af%e8%a7%86%e5%8c%96%e7%89%88%e6%9c%ac%ef%bc%89","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/97855.html","title":{"rendered":"\u9884\u7ea6\u7cfb\u7edf\u7248\u672c2\uff08pyhton+flask\u53ef\u89c6\u5316\u7248\u672c\uff09"},"content":{"rendered":"<h2>\u9884\u7ea6\u7cfb\u7edf\u7248\u672c2<\/h2>\n<p>\u57fa\u4e8e C&#043;&#043; &#043; epoll &#043; pthread &#043; MySQL \u7684\u591a\u7ebf\u7a0b\u5e76\u53d1\u9884\u7ea6\u7cfb\u7edf \u5305\u542b\u8fde\u63a5\u6c60\u3001\u7ebf\u7a0b\u6c60\u3001epoll I\/O \u591a\u8def\u590d\u7528\u3001JSON \u534f\u8bae\u3001SQL \u4e8b\u52a1<\/p>\n<hr \/>\n<h3>\u4e00\u3001\u9879\u76ee\u6982\u8ff0<\/h3>\n<h4>1.1 \u9879\u76ee\u5b9a\u4f4d<\/h4>\n<p>\u4e00\u4e2a\u652f\u6301\u591a\u5ba2\u6237\u7aef\u540c\u65f6\u5728\u7ebf\u7684\u7968\u52a1\u9884\u7ea6\u7cfb\u7edf&#xff0c;\u5ba2\u6237\u7aef\u901a\u8fc7 TCP \u957f\u8fde\u63a5\u4e0e\u670d\u52a1\u7aef\u4ea4\u4e92&#xff0c;\u670d\u52a1\u7aef\u4f7f\u7528 epoll \u76d1\u542c I\/O \u4e8b\u4ef6&#xff0c;\u5e76\u901a\u8fc7\u7ebf\u7a0b\u6c60\u628a\u4efb\u52a1\u4ea4\u7ed9 worker \u7ebf\u7a0b\u5904\u7406&#xff0c;worker \u7ebf\u7a0b\u901a\u8fc7\u8fde\u63a5\u6c60\u501f\u7528 MySQL \u8fde\u63a5\u6267\u884c SQL\u3002<\/p>\n<h4>1.2 \u6838\u5fc3\u7279\u6027<\/h4>\n<table>\n<tr>\u7279\u6027\u5b9e\u73b0\u65b9\u5f0f<\/tr>\n<tbody>\n<tr>\n<td>\u5e76\u53d1\u6a21\u578b<\/td>\n<td>epoll &#043; pthread \u7ebf\u7a0b\u6c60<\/td>\n<\/tr>\n<tr>\n<td>\u6570\u636e\u5e93\u590d\u7528<\/td>\n<td>Connect_Pool \u8fde\u63a5\u6c60&#xff08;5 \u4e2a\u8fde\u63a5\u590d\u7528&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u534f\u8bae\u683c\u5f0f<\/td>\n<td>JSON&#xff08;\u57fa\u4e8e jsoncpp&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>\u4e8b\u52a1\u652f\u6301<\/td>\n<td>\u9884\u7ea6\/\u53d6\u6d88\u64cd\u4f5c\u4f7f\u7528 MySQL \u4e8b\u52a1<\/td>\n<\/tr>\n<tr>\n<td>\u5bb9\u9519<\/td>\n<td>\u8fde\u63a5\u6c60\u6ee1\u65f6\u8fd4\u56de \u201cMYSQL CLIENT BUSSY\u201d&#xff0c;\u5ba2\u6237\u7aef\u63d0\u793a\u91cd\u8bd5<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4>1.3 \u4e1a\u52a1\u529f\u80fd<\/h4>\n<ul>\n<li>\u7528\u6237\u6ce8\u518c&#xff08;\u624b\u673a\u53f7 &#043; \u7528\u6237\u540d &#043; \u5bc6\u7801&#xff09;<\/li>\n<li>\u7528\u6237\u767b\u5f55<\/li>\n<li>\u67e5\u770b\u53ef\u9884\u7ea6\u7968\u5217\u8868<\/li>\n<li>\u9884\u7ea6\u7968&#xff08;\u5e26\u4e8b\u52a1&#xff0c;\u9632\u6b62\u8d85\u5356&#xff09;<\/li>\n<li>\u67e5\u770b\u6211\u7684\u9884\u7ea6<\/li>\n<li>\u53d6\u6d88\u9884\u7ea6&#xff08;\u5e26\u4e8b\u52a1&#xff0c;\u4fdd\u6301 count \u4e00\u81f4&#xff09;<\/li>\n<\/ul>\n<hr \/>\n<h3>\u4e8c\u3001\u9879\u76ee\u7ed3\u6784<\/h3>\n<p>csproject2view\/<br \/>\n\u251c\u2500\u2500 service.h              # \u670d\u52a1\u7aef\u5934\u6587\u4ef6&#xff08;\u7c7b\u58f0\u660e&#xff09;<br \/>\n\u251c\u2500\u2500 service.cpp            # \u670d\u52a1\u7aef\u5b9e\u73b0&#xff08;\u4e3b\u6d41\u7a0b &#043; \u4e1a\u52a1\u903b\u8f91&#xff09;<br \/>\n\u251c\u2500\u2500 client.h               # \u547d\u4ee4\u884c\u5ba2\u6237\u7aef\u5934\u6587\u4ef6<br \/>\n\u251c\u2500\u2500 client.cpp             # \u547d\u4ee4\u884c\u5ba2\u6237\u7aef\u5b9e\u73b0<br \/>\n\u251c\u2500\u2500 service.conf           # \u670d\u52a1\u7aef\u914d\u7f6e&#xff08;IP\/Port&#061;9999\/lismax&#xff09;<br \/>\n\u251c\u2500\u2500 mysql.conf             # \u6570\u636e\u5e93\u914d\u7f6e&#xff08;IP\/Port\/db_name&#xff09;<br \/>\n\u251c\u2500\u2500 Makefile               # \u6784\u5efa\u811a\u672c<br \/>\n\u251c\u2500\u2500 service                # \u7f16\u8bd1\u4ea7\u7269&#xff08;\u670d\u52a1\u7aef\u53ef\u6267\u884c&#xff0c;\u76d1\u542c 9999&#xff09;<br \/>\n\u251c\u2500\u2500 client                 # \u7f16\u8bd1\u4ea7\u7269&#xff08;\u547d\u4ee4\u884c\u5ba2\u6237\u7aef&#xff09;<br \/>\n\u251c\u2500\u2500 start_all.sh           # \u4e00\u952e\u542f\u52a8&#xff08;MySQL\u2192C&#043;&#043;\u2192Web\u2192\u6d4f\u89c8\u5668&#xff0c;\u5199 PID \u6587\u4ef6&#xff09;<br \/>\n\u251c\u2500\u2500 stop_all.sh            # \u4e00\u952e\u505c\u6b62&#xff08;PID \u6587\u4ef6\u65b9\u5f0f&#xff0c;\u4e0d\u8bef\u6740\u5176\u4ed6\u9879\u76ee&#xff09;<br \/>\n\u251c\u2500\u2500 .service.pid           # \u542f\u52a8\u65f6\u8bb0\u5f55\u7684 C&#043;&#043; \u670d\u52a1 PID<br \/>\n\u251c\u2500\u2500 .web.pid               # \u542f\u52a8\u65f6\u8bb0\u5f55\u7684 Web \u670d\u52a1 PID<br \/>\n\u251c\u2500\u2500 \u9884\u7ea6\u7cfb\u7edf\u7248\u672c2.md        # \u672c\u6587\u6863<br \/>\n\u251c\u2500\u2500 WEB_GUIDE.md           # Web \u754c\u9762\u4e13\u9879\u8bf4\u660e&#xff08;\u53ef\u9009\u53c2\u8003&#xff09;<br \/>\n\u2514\u2500\u2500 web\/                   # \u2190 Web \u53ef\u89c6\u5316\u754c\u9762&#xff08;\u65b0\u589e&#xff09;<br \/>\n    \u251c\u2500\u2500 app.py             # Flask \u540e\u7aef&#xff08;9 \u4e2a\u8def\u7531 &#043; session \u767b\u5f55\u6001&#xff09;<br \/>\n    \u251c\u2500\u2500 cp_client.py       # C&#043;&#043; TCP \u670d\u52a1\u7684 Python \u5ba2\u6237\u7aef\u5c01\u88c5<br \/>\n    \u251c\u2500\u2500 requirements.txt   # Python \u4f9d\u8d56&#xff08;flask&gt;&#061;2.0&#xff09;<br \/>\n    \u251c\u2500\u2500 start.sh           # \u5355\u72ec\u542f\u52a8 Web \u7684\u811a\u672c<br \/>\n    \u251c\u2500\u2500 templates\/<br \/>\n    \u2502   \u251c\u2500\u2500 login.html      # \u767b\u5f55 \/ \u6ce8\u518c\u9875<br \/>\n    \u2502   \u2514\u2500\u2500 index.html     # \u4e3b\u64cd\u4f5c\u9875<br \/>\n    \u2514\u2500\u2500 static\/<br \/>\n        \u251c\u2500\u2500 style.css      # \u9875\u9762\u6837\u5f0f&#xff08;\u5361\u7247\/\u9634\u5f71\/\u54cd\u5e94\u5f0f&#xff09;<br \/>\n        \u2514\u2500\u2500 app.js         # \u524d\u7aef\u903b\u8f91&#xff08;AJAX\u3001\u8868\u683c\u6e32\u67d3\u3001\u4ea4\u4e92&#xff09;<\/p>\n<h4>\u6574\u4f53\u67b6\u6784<\/h4>\n<p>\u6d4f\u89c8\u5668 (Chrome\/Firefox\/&#8230;)<br \/>\n   \u2502  HTTP \u8bf7\u6c42 (JSON)<br \/>\n   \u25bc<br \/>\nFlask Web \u670d\u52a1  (web\/app.py, 0.0.0.0:5000)<br \/>\n   \u2502  \u7ef4\u6301 session \u767b\u5f55\u6001\u3001\u53c2\u6570\u6821\u9a8c\u3001\u8f6c\u53d1<br \/>\n   \u2502  TCP \u8fde\u63a5\u5230 127.0.0.1:9999<br \/>\n   \u25bc<br \/>\nC&#043;&#043; TCP \u670d\u52a1   (service, 127.0.0.1:9999)<br \/>\n   \u2502  epoll &#043; \u7ebf\u7a0b\u6c60 &#043; MySQL \u8fde\u63a5\u6c60<br \/>\n   \u25bc<br \/>\nMySQL \u6570\u636e\u5e93   (c2411db, 3306)<\/p>\n<p>\u5916\u90e8\u7528\u6237\u53ea\u9700\u8bbf\u95ee http:\/\/localhost:5000&#xff0c;Web \u4e0e C&#043;&#043; \u4e4b\u95f4\u7684 9999 \u7aef\u53e3\u4ec5\u672c\u5730\u53ef\u89c1&#xff0c;\u4e0d\u5bf9\u5916\u66b4\u9732\u3002<\/p>\n<h4>\u7f16\u8bd1 &amp; \u542f\u52a8<\/h4>\n<p><span class=\"token comment\"># \u65b9\u5f0f\u4e00&#xff1a;\u4e00\u952e\u542f\u52a8\u6574\u4e2a\u7cfb\u7edf&#xff08;\u63a8\u8350&#xff09;<\/span><br \/>\n.\/start_all.sh        <span class=\"token comment\"># \u81ea\u52a8&#xff1a;\u68c0\u67e5 MySQL\u2192\u542f\u52a8 C&#043;&#043; \u670d\u52a1\u2192\u88c5 Flask\u2192\u542f\u52a8 Web\u2192\u5f00\u6d4f\u89c8\u5668<\/span><\/p>\n<p><span class=\"token comment\"># \u65b9\u5f0f\u4e8c&#xff1a;\u4ec5\u7f16\u8bd1\u5e76\u5355\u72ec\u542f\u52a8 C&#043;&#043; \u670d\u52a1<\/span><br \/>\n<span class=\"token function\">make<\/span> clean <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token function\">make<\/span> all<br \/>\n.\/service service.conf<\/p>\n<p><span class=\"token comment\"># \u65b9\u5f0f\u4e09&#xff1a;\u5355\u72ec\u542f\u52a8 Web&#xff08;\u8c03\u8bd5\u7528&#xff0c;\u9700\u5148\u786e\u4fdd C&#043;&#043; \u670d\u52a1\u5728 9999 \u8fd0\u884c&#xff09;<\/span><br \/>\n<span class=\"token builtin class-name\">cd<\/span> web <span class=\"token operator\">&amp;&amp;<\/span> python3 app.py<\/p>\n<h4>\u505c\u6b62<\/h4>\n<p>.\/stop_all.sh         <span class=\"token comment\"># PID \u6587\u4ef6\u65b9\u5f0f\u7cbe\u786e\u505c\u6b62&#xff0c;\u4e0d\u8bef\u6740\u5176\u4ed6\u9879\u76ee<\/span><\/p>\n<hr \/>\n<h3>\u4e09\u3001\u6539\u8fdb\u5efa\u8bae<\/h3>\n<h4>3.1 \u6027\u80fd\u6539\u8fdb<\/h4>\n<h5>3.1.1 \u8fde\u63a5\u6c60\u52a0\u6761\u4ef6\u53d8\u91cf&#xff08;\u5f53\u524d\u6700\u5927\u77ed\u677f&#xff09;<\/h5>\n<p>\u73b0\u72b6&#xff1a;Connect_Mysql_Server \u501f\u4e0d\u5230\u8fde\u63a5\u76f4\u63a5 return false&#xff0c;\u6784\u9020\u5931\u8d25 \u2192 \u5ba2\u6237\u7aef\u6536\u5230 BUSSY\u3002 \u95ee\u9898&#xff1a;\u5e76\u53d1\u8bf7\u6c42\u8d85\u8fc7 5 \u4e2a\u65f6&#xff0c;\u7b2c 6 \u4e2a\u76f4\u63a5\u88ab\u62d2&#xff0c;\u7528\u6237\u4f53\u9a8c\u5dee\u3002 \u6539\u8fdb&#xff1a;\u5728 Connect_Pool \u52a0 pthread_cond_t&#xff0c;\u501f\u4e0d\u5230\u65f6 pthread_cond_wait&#xff0c;\u7b49\u4ed6\u4eba\u5f52\u8fd8\u540e\u5524\u9192\u3002<\/p>\n<p><span class=\"token comment\">\/\/ \u501f\u8fde\u63a5<\/span><br \/>\n<span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span>C_P_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>status <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token function\">pthread_cond_wait<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>cond<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token comment\">\/\/ \u5f52\u8fd8\u65f6<\/span><br \/>\n<span class=\"token function\">pthread_cond_signal<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>cond<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<h5>3.1.2 worker \u7ebf\u7a0b\u7ed1\u5b9a\u56fa\u5b9a\u8fde\u63a5&#xff08;\u5f7b\u5e95\u6d88\u9664\u9501&#xff09;<\/h5>\n<p>\u73b0\u72b6&#xff1a;5 \u4e2a worker \u5171\u4eab 5 \u4e2a\u8fde\u63a5&#xff0c;\u501f\/\u8fd8\u90fd\u8981\u52a0\u9501\u3002 \u6539\u8fdb&#xff1a;worker \u542f\u52a8\u65f6\u7ed1\u6b7b\u4e00\u4e2a\u8fde\u63a5&#xff08;\u7ebf\u7a0b\u5c40\u90e8\u5b58\u50a8 __thread \u6216 pthread_key&#xff09;&#xff0c;\u5b8c\u5168\u65e0\u9501\u3002<\/p>\n<h5>3.1.3 send\/recv \u6539\u975e\u963b\u585e &#043; \u8fb9\u6cbf\u89e6\u53d1<\/h5>\n<p>\u73b0\u72b6&#xff1a;epoll \u7528 Level Triggered &#043; EPOLLONESHOT&#xff0c;\u6bcf\u6b21\u8981\u91cd\u65b0 MOD\u3002 \u6539\u8fdb&#xff1a;\u6539 Edge Triggered &#043; \u975e\u963b\u585e fd&#xff0c;\u5faa\u73af recv \u5230 EAGAIN&#xff0c;\u51cf\u5c11 epoll_ctl \u8c03\u7528\u3002<\/p>\n<h5>3.1.4 SQL \u9884\u5904\u7406\u8bed\u53e5<\/h5>\n<p>\u73b0\u72b6&#xff1a;\u6bcf\u6b21 mysql_query \u62fc\u5b57\u7b26\u4e32&#xff0c;\u670d\u52a1\u7aef\u6bcf\u6b21\u90fd\u8981 parse SQL\u3002 \u6539\u8fdb&#xff1a;\u7528 mysql_stmt_prepare &#043; mysql_stmt_bind_param&#xff0c;\u590d\u7528\u6267\u884c\u8ba1\u5212\u3002<\/p>\n<hr \/>\n<h4>3.2 \u5b89\u5168\u6539\u8fdb<\/h4>\n<h5>3.2.1 SQL \u6ce8\u5165&#xff08;\u5fc5\u6539&#xff09;<\/h5>\n<p>\u73b0\u72b6&#xff1a;Db_User_Register\u3001Db_User_Login \u7b49\u76f4\u63a5\u62fc\u5b57\u7b26\u4e32&#xff1a;<\/p>\n<p>string sql <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;select Name,Passwd from user_info where Tel&#061;&#039;&#034;<\/span> <span class=\"token operator\">&#043;<\/span> tel <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#034;&#039;&#034;<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>\u98ce\u9669&#xff1a;\u7528\u6237 tel \u8f93\u5165 &#039; OR &#039;1&#039;&#061;&#039;1 \u76f4\u63a5\u7ed5\u8fc7\u5bc6\u7801\u6821\u9a8c\u3002 \u6539\u8fdb&#xff1a;\u7528 mysql_real_escape_string \u8f6c\u4e49&#xff0c;\u6216\u6539 prepared statement\u3002<\/p>\n<h5>3.2.2 \u5bc6\u7801\u660e\u6587\u5b58\u50a8<\/h5>\n<p>\u73b0\u72b6&#xff1a;Db_User_Register values(0,&#039;tel&#039;,&#039;name&#039;,&#039;passwd&#039;,&#8230;) \u76f4\u63a5\u5b58\u660e\u6587\u3002 \u98ce\u9669&#xff1a;\u6570\u636e\u5e93\u88ab\u62d6\u5e93\u540e\u5bc6\u7801\u5168\u66b4\u9732\u3002 \u6539\u8fdb&#xff1a;\u7528 crypt()\/SHA256\/bcrypt \u5b58\u54c8\u5e0c&#xff0c;\u767b\u5f55\u65f6\u6bd4\u54c8\u5e0c\u3002<\/p>\n<h5>3.2.3 \u5ba2\u6237\u7aef\u4e0d\u9a8c\u8bc1\u670d\u52a1\u7aef\u8eab\u4efd<\/h5>\n<p>\u73b0\u72b6&#xff1a;\u5ba2\u6237\u7aef\u76f4\u63a5 connect&#xff0c;\u65e0\u6cd5\u8bc6\u522b\u4e2d\u95f4\u4eba\u3002 \u6539\u8fdb&#xff1a;\u7528 TLS&#xff08;OpenSSL&#xff09;\u52a0\u5bc6\u901a\u9053\u3002<\/p>\n<hr \/>\n<h4>3.3 \u5065\u58ee\u6027\u6539\u8fdb<\/h4>\n<h5>3.3.1 signal \u5904\u7406<\/h5>\n<p>\u73b0\u72b6&#xff1a;Ctrl&#043;C \u65f6 epoll_wait \u4f1a\u88ab EINTR \u4e2d\u65ad&#xff0c;\u4f46 L895-L900 \u76f4\u63a5 exit(1)&#xff0c;\u4e0d\u91ca\u653e\u8d44\u6e90\u3002 \u6539\u8fdb&#xff1a;\u6ce8\u518c SIGINT\/SIGTERM handler&#xff0c;\u8bbe Status &#061; false&#xff0c;\u8ba9\u4e3b\u5faa\u73af\u4f18\u96c5\u9000\u51fa&#xff0c;\u6790\u6784 Tcp_Service \u2192 \u6790\u6784 Thread_Pool \u2192 join \u6240\u6709 worker\u3002<\/p>\n<h5>3.3.2 \u5ba2\u6237\u7aef\u65ad\u8fde\u611f\u77e5<\/h5>\n<p>\u73b0\u72b6&#xff1a;\u5ba2\u6237\u7aef Ctrl&#043;C \u9000\u51fa&#xff0c;\u670d\u52a1\u7aef Do_client \u6536\u5230 recv_num &#061;&#061; 0 \u8d70 delete this&#xff0c;OK\u3002\u4f46\u5982\u679c\u5ba2\u6237\u7aef\u7f51\u7edc\u5f02\u5e38&#xff08;\u6ca1\u53d1 FIN&#xff09;&#xff0c;\u670d\u52a1\u7aef\u4e0d\u77e5\u9053\u3002 \u6539\u8fdb&#xff1a;\u7528 TCP keepalive&#xff08;setsockopt SO_KEEPALIVE&#xff09;\u6216\u5e94\u7528\u5c42\u5fc3\u8df3\u3002<\/p>\n<h5>3.3.3 EPOLLONESHOT \u5904\u7406\u4e00\u81f4<\/h5>\n<p>\u73b0\u72b6&#xff1a;listen socket \u6ca1\u7528 EPOLLONESHOT&#xff0c;client socket \u7528\u4e86\u3002 \u98ce\u9669&#xff1a;\u591a\u7ebf\u7a0b\u540c\u65f6 accept \u540c\u4e00\u4e2a listen fd&#xff0c;\u53ef\u80fd\u7ade\u4e89\u3002 \u6539\u8fdb&#xff1a;listen fd \u4e5f\u7528 EPOLLONESHOT&#xff0c;accept \u540e\u91cd\u65b0 MOD\u3002<\/p>\n<h5>3.3.4 \u914d\u7f6e\u6587\u4ef6\u786c\u7f16\u7801\u8def\u5f84<\/h5>\n<p>\u73b0\u72b6&#xff1a;service.h#L22 #define Conf_path &#034;\/home\/xiaoc\/mycode\/csproject2\/service.conf&#034;&#xff0c;\u6362\u673a\u5668\u5c31\u5e9f\u3002 \u6539\u8fdb&#xff1a;\u4ece argv[1] \u8bfb&#xff0c;\u6216\u8bfb\u73af\u5883\u53d8\u91cf\u3002<\/p>\n<h5>3.3.5 mysql_real_connect \u5bc6\u7801\u786c\u7f16\u7801<\/h5>\n<p>\u73b0\u72b6&#xff1a;Connect_Pool::Run &#034;root&#034;,&#034;111111&#034; \u5199\u6b7b\u5728\u4ee3\u7801\u91cc\u3002 \u6539\u8fdb&#xff1a;\u4ece mysql.conf \u8bfb\u7528\u6237\u540d\/\u5bc6\u7801&#xff0c;\u6216\u7528 MySQL \u914d\u7f6e\u6587\u4ef6 [client] \u6bb5\u3002<\/p>\n<hr \/>\n<h4>3.4 \u53ef\u7ef4\u62a4\u6027\u6539\u8fdb<\/h4>\n<h5>3.4.1 \u5934\u6587\u4ef6\u4f9d\u8d56\u6df7\u4e71<\/h5>\n<p>\u73b0\u72b6&#xff1a;service.h \u628a Service_Config\u3001Socket\u3001AccSocket\u3001RecvSocket\u3001Thread_Pool\u3001Mysql_config\u3001Mysql_Client\u3001Mysql_cli\u3001Connect_Pool\u3001Tcp_Service 10 \u4e2a\u7c7b\u578b\u5168\u5806\u5728\u4e00\u4e2a\u6587\u4ef6\u3002 \u6539\u8fdb&#xff1a;\u62c6\u5206\u6210 socket.h\u3001thread_pool.h\u3001mysql_pool.h\u3001mysql_client.h\u3001tcp_service.h\u3001service_config.h&#xff0c;\u6bcf\u4e2a\u6587\u4ef6\u5355\u4e00\u804c\u8d23\u3002<\/p>\n<h5>3.4.2 \u5168\u5c40\u53d8\u91cf<\/h5>\n<p>\u73b0\u72b6&#xff1a;service.cpp#L15-L16 Mysql_config file; \u548c Connect_Pool* g_pool; \u662f\u5168\u5c40\u53d8\u91cf\u3002 \u95ee\u9898&#xff1a;\u96be\u8ffd\u8e2a\u4fee\u6539\u70b9&#xff0c;\u96be\u5355\u5143\u6d4b\u8bd5\u3002 \u6539\u8fdb&#xff1a;g_pool \u6539\u6210 Connect_Pool::GetInstance() \u5355\u4f8b&#xff1b;file \u653e\u5230 Tcp_Service \u91cc\u4f5c\u6210\u5458\u3002<\/p>\n<h5>3.4.3 \u88f8\u6307\u9488 &#043; \u624b\u52a8 new\/delete<\/h5>\n<p>\u73b0\u72b6&#xff1a;Socket* task\u3001Mysql_cli* C_P_array \u7b49\u5168\u662f\u88f8\u6307\u9488&#xff0c;\u9760 delete \u624b\u52a8\u7ba1\u7406\u3002 \u98ce\u9669&#xff1a;\u5f02\u5e38\u8def\u5f84\u6f0f delete \u4f1a\u6cc4\u6f0f\u3002 \u6539\u8fdb&#xff1a;\u7528 std::unique_ptr \/ std::shared_ptr&#xff0c;\u6790\u6784\u81ea\u52a8\u91ca\u653e\u3002<\/p>\n<h5>3.4.4 \u9519\u8bef\u65e5\u5fd7\u4e0d\u5206\u7ea7<\/h5>\n<p>\u73b0\u72b6&#xff1a;\u6240\u6709\u9519\u8bef\u90fd cout &lt;&lt; \u6253\u5230 stdout\u3002 \u6539\u8fdb&#xff1a;\u5f15\u5165\u7b80\u5355\u65e5\u5fd7\u5e93&#xff08;\u5982 spdlog&#xff09;&#xff0c;\u5206 INFO\/WARN\/ERROR\/FATAL&#xff0c;\u652f\u6301\u6587\u4ef6\u5206\u5377\u3002<\/p>\n<h5>3.4.5 magic number<\/h5>\n<p>\u73b0\u72b6&#xff1a;service.cpp#L787 &#034;root&#034;,&#034;111111&#034;\u3001client.h#L18 PORTADRESS 8888\u3001MAXLINE 256\u3001d_size 1024 \u7b49\u786c\u7f16\u7801\u3002 \u6539\u8fdb&#xff1a;\u5168\u90e8\u79fb\u5230\u914d\u7f6e\u6587\u4ef6\u6216 const \u5e38\u91cf\u3002<\/p>\n<hr \/>\n<h4>3.5 \u529f\u80fd\u6269\u5c55<\/h4>\n<h5>3.5.1 \u7f3a\u5c11\u5ba2\u6237\u7aef\u8d85\u65f6<\/h5>\n<p>\u5ba2\u6237\u7aef recv \u662f\u963b\u585e\u7684&#xff0c;\u670d\u52a1\u7aef\u6302\u4e86\u5ba2\u6237\u7aef\u4f1a\u4e00\u76f4\u7b49\u3002 \u6539\u8fdb&#xff1a;\u7528 setsockopt SO_RCVTIMEO \u8bbe 5 \u79d2\u8d85\u65f6&#xff0c;\u8d85\u65f6\u63d0\u793a\u3002<\/p>\n<h5>3.5.2 \u7f3a\u5c11\u7ba1\u7406\u5458\u540e\u53f0<\/h5>\n<p>\u73b0\u5728\u65e0\u6cd5\u540e\u53f0\u7ba1\u7406\u7968\u52a1&#xff08;\u589e\u5220\u6539\u67e5\u7968\u3001\u67e5\u7528\u6237\u3001\u7edf\u8ba1&#xff09;\u3002 \u6539\u8fdb&#xff1a;\u52a0\u4e00\u4e2a\u7ba1\u7406\u7aef\u534f\u8bae type&#061;Admin_Login &#043; type&#061;Admin_Add_Ticket \u7b49\u3002<\/p>\n<h5>3.5.3 \u7f3a\u5c11\u5e76\u53d1\u6570\u7edf\u8ba1<\/h5>\n<p>\u65e0\u6cd5\u67e5\u770b\u5f53\u524d\u5728\u7ebf\u7528\u6237\u3001\u6c60\u4f7f\u7528\u7387\u3002 \u6539\u8fdb&#xff1a;\u670d\u52a1\u7aef\u52a0\u4e00\u4e2a stats \u63a5\u53e3&#xff08;\u53ef\u901a\u8fc7 SIGUSR1 \u4fe1\u53f7 dump \u72b6\u6001\u5230\u65e5\u5fd7&#xff09;\u3002<\/p>\n<hr \/>\n<h3>\u56db\u3001\u5404\u6587\u4ef6\u8be6\u89e3<\/h3>\n<h4>4.1 service.h \u2014 \u670d\u52a1\u7aef\u7c7b\u58f0\u660e<\/h4>\n<h5>\u5b8c\u6574\u4ee3\u7801<\/h5>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;stdlib.h&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;string&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cstring&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;netinet\/in.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;arpa\/inet.h&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;jsoncpp\/json\/json.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;mysql\/mysql.h&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/socket.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/epoll.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;pthread.h&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;unistd.h&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">MAXLINE<\/span> <span class=\"token expression\"><span class=\"token number\">256<\/span><\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">START<\/span> <span class=\"token expression\"><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">Conf_path<\/span> <span class=\"token string\">&#034;\/home\/xiaoc\/mycode\/csproject2\/service.conf&#034;<\/span> <\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">Sql_Conf_path<\/span> <span class=\"token string\">&#034;\/home\/xiaoc\/mycode\/csproject2\/mysql.conf&#034;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">d_size<\/span>  <span class=\"token expression\"><span class=\"token number\">1024<\/span><\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">thread_num<\/span> <span class=\"token expression\"><span class=\"token number\">5<\/span><\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">o<\/span> <span class=\"token string\">&#034;ok&#034;<\/span><\/span><\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Connect_Pool<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">extern<\/span> Connect_Pool<span class=\"token operator\">*<\/span> g_pool<span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">Service_Config<\/span><span class=\"token punctuation\">{<\/span><br \/>\n     <span class=\"token keyword\">const<\/span> <span class=\"token keyword\">char<\/span><span class=\"token operator\">*<\/span> config_path<span class=\"token operator\">&#061;<\/span>Conf_path<span class=\"token punctuation\">;<\/span><br \/>\n     std<span class=\"token double-colon punctuation\">::<\/span>string IP<span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">short<\/span> Port<span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">short<\/span> Lismax<span class=\"token punctuation\">;<\/span><\/p>\n<p>     <span class=\"token keyword\">void<\/span> <span class=\"token function\">ReadConfig<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> <span class=\"token keyword\">char<\/span><span class=\"token operator\">*<\/span> config_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">PrintConfig<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Socket<\/span><span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n      <span class=\"token keyword\">int<\/span> fd<span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">int<\/span> epfd<span class=\"token punctuation\">;<\/span><\/p>\n<p>      <span class=\"token function\">Socket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> fd<span class=\"token punctuation\">,<\/span><span class=\"token keyword\">int<\/span> epfd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">virtual<\/span> <span class=\"token operator\">~<\/span><span class=\"token function\">Socket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">virtual<\/span> <span class=\"token keyword\">void<\/span> <span class=\"token function\">Do_client<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">AccSocket<\/span> <span class=\"token operator\">:<\/span> <span class=\"token base-clause\"><span class=\"token keyword\">public<\/span> <span class=\"token class-name\">Socket<\/span><\/span><span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n      <span class=\"token function\">AccSocket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> fd<span class=\"token punctuation\">,<\/span><span class=\"token keyword\">int<\/span> epfd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token operator\">~<\/span><span class=\"token function\">AccSocket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Do_client<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">override<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><br \/>\n     <span class=\"token keyword\">static<\/span> <span class=\"token keyword\">unsigned<\/span> <span class=\"token keyword\">int<\/span> count<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">RecvSocket<\/span> <span class=\"token operator\">:<\/span> <span class=\"token base-clause\"><span class=\"token keyword\">public<\/span> <span class=\"token class-name\">Socket<\/span><\/span><span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n      <span class=\"token function\">RecvSocket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> fd<span class=\"token punctuation\">,<\/span><span class=\"token keyword\">int<\/span> epfd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token operator\">~<\/span><span class=\"token function\">RecvSocket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">void<\/span> <span class=\"token function\">Do_client<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">override<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">void<\/span> <span class=\"token function\">send_Ok<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">void<\/span> <span class=\"token function\">send_false<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">typedef<\/span> <span class=\"token keyword\">struct<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    Socket<span class=\"token operator\">*<\/span> task<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span>task_t<span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Thread_Pool<\/span><span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><br \/>\n    task_t <span class=\"token operator\">*<\/span> dequeue<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> dequeue_size<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> front<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> rear<span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">int<\/span> task_Num<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> thread_Num<span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">bool<\/span> status<span class=\"token punctuation\">;<\/span><\/p>\n<p>    pthread_mutex_t mutex<span class=\"token punctuation\">;<\/span><br \/>\n    pthread_cond_t cond<span class=\"token punctuation\">;<\/span><\/p>\n<p>    pthread_t Thread_array<span class=\"token punctuation\">[<\/span>thread_num<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n     <span class=\"token function\">Thread_Pool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token operator\">~<\/span><span class=\"token function\">Thread_Pool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">bool<\/span> <span class=\"token function\">Init_Thread_pool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">add_Task<\/span><span class=\"token punctuation\">(<\/span>Socket<span class=\"token operator\">*<\/span> csocket<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Create_Thread<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Work<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span><span class=\"token operator\">*<\/span> <span class=\"token function\">General_Thread<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">void<\/span><span class=\"token operator\">*<\/span> arg<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">Mysql_config<\/span><span class=\"token punctuation\">{<\/span><br \/>\n     <span class=\"token keyword\">short<\/span> db_port<span class=\"token punctuation\">;<\/span><br \/>\n     std<span class=\"token double-colon punctuation\">::<\/span>string db_ip<span class=\"token punctuation\">;<\/span><br \/>\n     std<span class=\"token double-colon punctuation\">::<\/span>string db_name<span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">const<\/span> <span class=\"token keyword\">char<\/span><span class=\"token operator\">*<\/span> Sql_config_path<span class=\"token operator\">&#061;<\/span>Sql_Conf_path<span class=\"token punctuation\">;<\/span><\/p>\n<p>     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Init_Mysql_config<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> <span class=\"token keyword\">char<\/span><span class=\"token operator\">*<\/span> Sql_config_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">print_Mysql_config<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Mysql_Client<\/span><span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><br \/>\n      <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">Mysql_config<\/span><span class=\"token operator\">*<\/span> file<span class=\"token punctuation\">;<\/span><br \/>\n      MYSQL<span class=\"token operator\">*<\/span> mysql_con<span class=\"token punctuation\">;<\/span><span class=\"token comment\">\/\/mysql\u7684\u8fde\u63a5\u53e5\u67c4<\/span><br \/>\n      <span class=\"token keyword\">int<\/span> who<span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">bool<\/span> connected<span class=\"token punctuation\">;<\/span>   <span class=\"token comment\">\/\/ \u662f\u5426\u6210\u529f\u4ece\u6c60\u91cc\u501f\u5230\u8fde\u63a5<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n     <span class=\"token function\">Mysql_Client<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">Mysql_config<\/span> <span class=\"token operator\">*<\/span> Sql_config<span class=\"token punctuation\">,<\/span><span class=\"token keyword\">int<\/span> who<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">ResetSTatus<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token operator\">~<\/span><span class=\"token function\">Mysql_Client<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">bool<\/span> <span class=\"token function\">IsConnected<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token keyword\">return<\/span> connected<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span>   <span class=\"token comment\">\/\/ \u4f9b\u5916\u90e8\u68c0\u67e5\u662f\u5426\u501f\u5230\u8fde\u63a5<\/span><\/p>\n<p>     <span class=\"token keyword\">bool<\/span> <span class=\"token function\">Connect_Mysql_Server<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">bool<\/span> <span class=\"token function\">Db_User_Register<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string <span class=\"token operator\">&amp;<\/span>user_tel<span class=\"token punctuation\">,<\/span><span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string <span class=\"token operator\">&amp;<\/span>user_name<span class=\"token punctuation\">,<\/span><span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string <span class=\"token operator\">&amp;<\/span>user_passwd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">bool<\/span> <span class=\"token function\">Db_User_Login<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string<span class=\"token operator\">&amp;<\/span> tel<span class=\"token punctuation\">,<\/span>std<span class=\"token double-colon punctuation\">::<\/span>string<span class=\"token operator\">&amp;<\/span> name<span class=\"token punctuation\">,<\/span><span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string<span class=\"token operator\">&amp;<\/span> passwd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">bool<\/span> <span class=\"token function\">Db_Show_Ticket<\/span><span class=\"token punctuation\">(<\/span>Json<span class=\"token double-colon punctuation\">::<\/span>Value <span class=\"token operator\">&amp;<\/span>res<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">bool<\/span> <span class=\"token function\">Db_Yd_Ticket<\/span><span class=\"token punctuation\">(<\/span>std<span class=\"token double-colon punctuation\">::<\/span>string usertel<span class=\"token punctuation\">,<\/span>std<span class=\"token double-colon punctuation\">::<\/span>string tk_id<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">bool<\/span> <span class=\"token function\">Db_Show_My_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string<span class=\"token operator\">&amp;<\/span>user_tel<span class=\"token punctuation\">,<\/span>Json<span class=\"token double-colon punctuation\">::<\/span>Value <span class=\"token operator\">&amp;<\/span>res<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">bool<\/span> <span class=\"token function\">Db_Cancel_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string <span class=\"token operator\">&amp;<\/span>user_tel<span class=\"token punctuation\">,<\/span><span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string <span class=\"token operator\">&amp;<\/span>yd_id<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Send_full<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Mysql_Begin<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Mysql_RollBack<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Mysql_Commit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/\u8fde\u63a5\u6c60\u4e2d\u7684\u6bcf\u4e00\u4e2a\u4e0e\u6570\u636e\u5e93\u8fdb\u884c\u8fde\u63a5\u7684\u5ba2\u6237\u7aef\u5165\u53e3\u7ed3\u6784\u4f53<\/span><br \/>\n<span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">Mysql_cli<\/span><span class=\"token punctuation\">{<\/span><br \/>\n     MYSQL<span class=\"token operator\">*<\/span> mysql_con<span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">bool<\/span> status<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Connect_Pool<\/span><span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><\/p>\n<p>   <span class=\"token keyword\">bool<\/span> status<span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token keyword\">int<\/span> MAX_USER<span class=\"token punctuation\">;<\/span><br \/>\n   Mysql_config<span class=\"token operator\">*<\/span> Sql_config<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n   Mysql_cli<span class=\"token operator\">*<\/span> C_P_array<span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token keyword\">int<\/span> user<span class=\"token punctuation\">;<\/span><br \/>\n   pthread_mutex_t mutex<span class=\"token punctuation\">;<\/span><\/p>\n<p>   <span class=\"token function\">Connect_Pool<\/span><span class=\"token punctuation\">(<\/span>Mysql_config<span class=\"token operator\">*<\/span> Sql_config<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token operator\">~<\/span><span class=\"token function\">Connect_Pool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>   <span class=\"token keyword\">bool<\/span> <span class=\"token function\">Run<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token keyword\">void<\/span> <span class=\"token function\">Reset<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Tcp_Service<\/span><span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><br \/>\n     <span class=\"token keyword\">const<\/span> Service_Config<span class=\"token operator\">*<\/span> config<span class=\"token punctuation\">;<\/span><br \/>\n     Thread_Pool<span class=\"token operator\">*<\/span> pool<span class=\"token punctuation\">;<\/span><\/p>\n<p>     <span class=\"token keyword\">int<\/span> lis_fd <span class=\"token operator\">&#061;<\/span> START<span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">int<\/span> ep_fd <span class=\"token operator\">&#061;<\/span> START<span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">bool<\/span> Status<span class=\"token punctuation\">;<\/span><\/p>\n<p>     <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">epoll_event<\/span> ready_events<span class=\"token punctuation\">[<\/span>MAXLINE<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">{<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n     <span class=\"token function\">Tcp_Service<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> Service_Config<span class=\"token operator\">*<\/span> config<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token operator\">~<\/span><span class=\"token function\">Tcp_Service<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Init<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> Service_Config<span class=\"token operator\">*<\/span> config<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<h5>\u6587\u4ef6\u4f5c\u7528<\/h5>\n<p>\u96c6\u4e2d\u58f0\u660e\u670d\u52a1\u7aef\u6240\u6709\u7c7b\u578b&#xff1a;\u914d\u7f6e\u7c7b\u3001Socket \u4f53\u7cfb\u3001\u7ebf\u7a0b\u6c60\u3001MySQL \u5ba2\u6237\u7aef\u3001\u8fde\u63a5\u6c60\u3001Tcp_Service \u4e3b\u63a7\u3002<\/p>\n<h5>\u5173\u952e\u7c7b\u578b\u4e00\u89c8<\/h5>\n<table>\n<tr>\u7c7b\u578b\u884c\u53f7\u804c\u8d23<\/tr>\n<tbody>\n<tr>\n<td>Service_Config<\/td>\n<td>L34-L43<\/td>\n<td>\u8bfb service.conf&#xff0c;\u5b58 IP\/Port\/Lismax<\/td>\n<\/tr>\n<tr>\n<td>Socket&#xff08;\u62bd\u8c61\u57fa\u7c7b&#xff09;<\/td>\n<td>L48-L56<\/td>\n<td>\u6301\u6709 fd &#043; epfd&#xff0c;\u7eaf\u865a Do_client()<\/td>\n<\/tr>\n<tr>\n<td>AccSocket<\/td>\n<td>L58-L66<\/td>\n<td>\u5904\u7406 listen fd \u4e0a\u7684 accept \u4e8b\u4ef6<\/td>\n<\/tr>\n<tr>\n<td>RecvSocket<\/td>\n<td>L68-L76<\/td>\n<td>\u5904\u7406 client fd \u4e0a\u7684 recv \u4e8b\u4ef6<\/td>\n<\/tr>\n<tr>\n<td>task_t<\/td>\n<td>L78-L80<\/td>\n<td>\u4efb\u52a1\u7ed3\u6784\u4f53&#xff08;\u5305 Socket* \u6307\u9488&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>Thread_Pool<\/td>\n<td>L82-L105<\/td>\n<td>\u4efb\u52a1\u961f\u5217 &#043; 5 \u4e2a worker \u7ebf\u7a0b<\/td>\n<\/tr>\n<tr>\n<td>Mysql_config<\/td>\n<td>L110-L118<\/td>\n<td>\u8bfb mysql.conf&#xff0c;\u5b58 db_ip\/port\/name<\/td>\n<\/tr>\n<tr>\n<td>Mysql_Client<\/td>\n<td>L120-L145<\/td>\n<td>\u4e1a\u52a1\u5c42&#xff0c;\u5c01\u88c5 SQL \u64cd\u4f5c<\/td>\n<\/tr>\n<tr>\n<td>Mysql_cli<\/td>\n<td>L148-L151<\/td>\n<td>\u8fde\u63a5\u6c60\u4e2d\u5355\u4e2a slot&#xff08;MYSQL* &#043; status&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>Connect_Pool<\/td>\n<td>L155-L172<\/td>\n<td>5 \u4e2a Mysql_cli &#043; mutex<\/td>\n<\/tr>\n<tr>\n<td>Tcp_Service<\/td>\n<td>L174-L191<\/td>\n<td>\u4e3b\u63a7&#xff1a;listen &#043; epoll \u5faa\u73af<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5>\u8bbe\u8ba1\u4eae\u70b9<\/h5>\n<ul>\n<li>\u524d\u7f6e\u58f0\u660e class Connect_Pool;&#xff08;L31&#xff09;\u8ba9 g_pool \u5168\u5c40\u6307\u9488\u53ef\u7528&#xff0c;\u5b9a\u4e49\u653e\u5728\u540e\u9762<\/li>\n<li>Socket \u62bd\u8c61\u57fa\u7c7b &#043; Do_client() \u7eaf\u865a\u51fd\u6570&#xff0c;\u591a\u6001\u5206\u53d1 accept\/recv \u4efb\u52a1<\/li>\n<li>Mysql_Client::IsConnected()&#xff08;L130&#xff09;\u63d0\u4f9b\u8fde\u63a5\u72b6\u6001\u67e5\u8be2&#xff0c;\u907f\u514d\u5916\u90e8\u8bbf\u95ee\u79c1\u6709\u6210\u5458<\/li>\n<\/ul>\n<h5>\u4e0d\u8db3<\/h5>\n<ul>\n<li>10 \u4e2a\u7c7b\u578b\u6324\u4e00\u4e2a\u6587\u4ef6&#xff0c;\u8fdd\u53cd\u5355\u4e00\u804c\u8d23<\/li>\n<li>Mysql_cli \u662f struct \u4f46\u6210\u5458\u516c\u5f00&#xff0c;\u5c01\u88c5\u4e0d\u4e25<\/li>\n<\/ul>\n<hr \/>\n<h4>4.2 service.cpp \u2014 \u670d\u52a1\u7aef\u5b9e\u73b0<\/h4>\n<h5>\u5b8c\u6574\u4ee3\u7801<\/h5>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;service.h&#034;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;errno.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;fcntl.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;iostream&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;jsoncpp\/json\/reader.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;jsoncpp\/json\/value.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;mysql\/mysql.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;netinet\/in.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;pthread.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;string&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/epoll.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/socket.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;unistd.h&gt;<\/span><\/span><br \/>\n<span class=\"token keyword\">using<\/span> <span class=\"token keyword\">namespace<\/span> std<span class=\"token punctuation\">;<\/span><\/p>\n<p>Mysql_config file<span class=\"token punctuation\">;<\/span><br \/>\nConnect_Pool<span class=\"token operator\">*<\/span> g_pool <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">enum<\/span> <span class=\"token class-name\">OP_TYPE<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  Login <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  Register<span class=\"token punctuation\">,<\/span><br \/>\n  CheckApoint<span class=\"token punctuation\">,<\/span><br \/>\n  Appointment<span class=\"token punctuation\">,<\/span><br \/>\n  AppoinMessage<span class=\"token punctuation\">,<\/span><br \/>\n  CancelAppoin<span class=\"token punctuation\">,<\/span><br \/>\n  Exit<br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Service_Config<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">ReadConfig<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> <span class=\"token keyword\">char<\/span> <span class=\"token operator\">*<\/span>config_path<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>config_path <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;config_path is nullptr!&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  FILE <span class=\"token operator\">*<\/span>fp <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">fopen<\/span><span class=\"token punctuation\">(<\/span>config_path<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;r&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>fp <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">perror<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;fopen config file failed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;fopen config file failed! errno&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> errno <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">char<\/span> line<span class=\"token punctuation\">[<\/span>MAXLINE<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">{<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">int<\/span> num <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">fgets<\/span><span class=\"token punctuation\">(<\/span>line<span class=\"token punctuation\">,<\/span> MAXLINE <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span> fp<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    num<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>line<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token char\">&#039;#&#039;<\/span> <span class=\"token operator\">||<\/span> line<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token char\">&#039;\\\\n&#039;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">continue<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">char<\/span> <span class=\"token operator\">*<\/span>Before <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">strtok<\/span><span class=\"token punctuation\">(<\/span>line<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">char<\/span> <span class=\"token operator\">*<\/span>After <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">strtok<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>Before <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span> <span class=\"token operator\">||<\/span> After <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">continue<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    After<span class=\"token punctuation\">[<\/span><span class=\"token function\">strlen<\/span><span class=\"token punctuation\">(<\/span>After<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token char\">&#039;\\\\0&#039;<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">strcmp<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ip&#034;<\/span><span class=\"token punctuation\">,<\/span> Before<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      IP <span class=\"token operator\">&#061;<\/span> After<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7981\u6b62\u5171\u4eab\u5185\u5b58&#xff0c;line\u662f\u4e00\u6b21\u6027\u4f7f\u7528&#xff0c;After\u4f1a\u88ab\u8986\u76d6<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">strcmp<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;port&#034;<\/span><span class=\"token punctuation\">,<\/span> Before<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      Port <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">atoi<\/span><span class=\"token punctuation\">(<\/span>After<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">strcmp<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;lismax&#034;<\/span><span class=\"token punctuation\">,<\/span> Before<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      Lismax <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">atoi<\/span><span class=\"token punctuation\">(<\/span>After<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">strcmp<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;service_conf_path&#034;<\/span><span class=\"token punctuation\">,<\/span> Before<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      config_path <span class=\"token operator\">&#061;<\/span> After<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;unknown config item: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> Before <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; at line &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> num <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token function\">memset<\/span><span class=\"token punctuation\">(<\/span>line<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>line<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token function\">fclose<\/span><span class=\"token punctuation\">(<\/span>fp<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Service_Config<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">PrintConfig<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;IP: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> IP <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;Port: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> Port <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;Lismax: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> Lismax <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;config_path: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> config_path <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token class-name\">Tcp_Service<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Tcp_Service<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> Service_Config <span class=\"token operator\">*<\/span>config<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token function\">Init<\/span><span class=\"token punctuation\">(<\/span>config<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token class-name\">Tcp_Service<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token operator\">~<\/span><span class=\"token function\">Tcp_Service<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;~Tcp_Service()&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span>lis_fd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span>ep_fd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>pool <span class=\"token operator\">!&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">delete<\/span> pool<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token class-name\">Socket<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Socket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> fd<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> epfd<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">:<\/span> <span class=\"token function\">fd<\/span><span class=\"token punctuation\">(<\/span>fd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token function\">epfd<\/span><span class=\"token punctuation\">(<\/span>epfd<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token class-name\">Socket<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token operator\">~<\/span><span class=\"token function\">Socket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token class-name\">AccSocket<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">AccSocket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> fd<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> epfd<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">:<\/span> <span class=\"token function\">Socket<\/span><span class=\"token punctuation\">(<\/span>fd<span class=\"token punctuation\">,<\/span> epfd<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">unsigned<\/span> <span class=\"token keyword\">int<\/span> AccSocket<span class=\"token double-colon punctuation\">::<\/span>count <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token class-name\">AccSocket<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token operator\">~<\/span><span class=\"token function\">AccSocket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">AccSocket<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Do_client<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr_in<\/span> client_addr<span class=\"token punctuation\">;<\/span><br \/>\n  socklen_t client_addr_len <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>client_addr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">memset<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>client_addr<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>client_addr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token comment\">\/\/ lis_fd\u5bf9accept\u7684\u5f71\u54cd&#xff0c;\u5728\u9ed8\u8ba4\u60c5\u51b5\u4e0b&#xff0c;lis_fd\u5728\u961f\u5217\u4e3a\u7a7a\u65f6&#xff0c;\u4f1a\u9ed8\u8ba4\u8ba9accept\u5728\u83b7\u53d6\u8fd9\u4e2a\u7a7a\u961f\u5217\u65f6\u963b\u585e&#xff0c;\u7ebf\u7a0b\u4f1a\u76f4\u63a5\u963b\u585e\u5361\u6b7b\u5728\u8fd9<\/span><br \/>\n  <span class=\"token comment\">\/\/ \u6240\u4ee5\u6211\u4eec\u8981\u7528\u975e\u963b\u585e\u6a21\u5f0f\u7684accept&#xff0c;\u5f53\u961f\u5217\u4e3a\u7a7a\u65f6&#xff0c;accept\u4f1a\u8fd4\u56deEAGAIN\u6216EWOULDBLOCK&#xff0c;\u800c\u4e0d\u662f\u963b\u585e\u7ebf\u7a0b<\/span><br \/>\n  <span class=\"token keyword\">int<\/span> conn_fd <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">accept<\/span><span class=\"token punctuation\">(<\/span>fd<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr<\/span> <span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">&amp;<\/span>client_addr<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>client_addr_len<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>conn_fd <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>errno <span class=\"token operator\">&#061;&#061;<\/span> EAGAIN <span class=\"token operator\">||<\/span> errno <span class=\"token operator\">&#061;&#061;<\/span> EWOULDBLOCK<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token comment\">\/\/ listen \u961f\u5217\u7a7a\u4e86,\u522b\u7684 worker \u5df2\u7ecf\u628a\u8fde\u63a5\u53d6\u8d70\u4e86,\u6b63\u5e38\u9000\u51fa<\/span><br \/>\n      <span class=\"token keyword\">delete<\/span> <span class=\"token keyword\">this<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token function\">perror<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;accept failed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;accept failed! errno&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> errno <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">delete<\/span> <span class=\"token keyword\">this<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;client:&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> conn_fd <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; connect success!&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;Service accept client numb now: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token operator\">&#043;&#043;<\/span>count <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">epoll_event<\/span> ev_client_accpet<span class=\"token punctuation\">;<\/span><br \/>\n  ev_client_accpet<span class=\"token punctuation\">.<\/span>events <span class=\"token operator\">&#061;<\/span> EPOLLIN <span class=\"token operator\">|<\/span> EPOLLONESHOT<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">auto<\/span> <span class=\"token operator\">*<\/span>recvSock <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token function\">RecvSocket<\/span><span class=\"token punctuation\">(<\/span>conn_fd<span class=\"token punctuation\">,<\/span> epfd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  ev_client_accpet<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>ptr <span class=\"token operator\">&#061;<\/span> recvSock<span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">epoll_ctl<\/span><span class=\"token punctuation\">(<\/span>epfd<span class=\"token punctuation\">,<\/span> EPOLL_CTL_ADD<span class=\"token punctuation\">,<\/span> conn_fd<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>ev_client_accpet<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">perror<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;epoll_ctl add client fd failed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;epoll_client_ctl add false! errno&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> errno <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span>conn_fd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>  <span class=\"token comment\">\/\/ \u5173\u95ed\u8fde\u63a5,\u4e0d\u53d7\u76d1\u63a7\u7684\u4e0d\u8981<\/span><br \/>\n    <span class=\"token keyword\">delete<\/span> recvSock<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5220\u9664\u5bf9\u8c61<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">delete<\/span> <span class=\"token keyword\">this<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token class-name\">RecvSocket<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">RecvSocket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> fd<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">int<\/span> pdfd<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">:<\/span> <span class=\"token function\">Socket<\/span><span class=\"token punctuation\">(<\/span>fd<span class=\"token punctuation\">,<\/span> pdfd<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token class-name\">RecvSocket<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token operator\">~<\/span><span class=\"token function\">RecvSocket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span>fd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">RecvSocket<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">send_Ok<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  Json<span class=\"token double-colon punctuation\">::<\/span>Value value<span class=\"token punctuation\">;<\/span><br \/>\n  string a <span class=\"token operator\">&#061;<\/span> o<span class=\"token punctuation\">;<\/span><br \/>\n  value<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> a<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span>fd<span class=\"token punctuation\">,<\/span> value<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n       <span class=\"token function\">strlen<\/span><span class=\"token punctuation\">(<\/span>value<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">RecvSocket<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">send_false<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  Json<span class=\"token double-colon punctuation\">::<\/span>Value value<span class=\"token punctuation\">;<\/span><br \/>\n  string a <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;false&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  value<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> a<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span>fd<span class=\"token punctuation\">,<\/span> value<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n       <span class=\"token function\">strlen<\/span><span class=\"token punctuation\">(<\/span>value<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">RecvSocket<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Do_client<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">char<\/span> buff<span class=\"token punctuation\">[<\/span>MAXLINE<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">{<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  ssize_t recv_num <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">recv<\/span><span class=\"token punctuation\">(<\/span>fd<span class=\"token punctuation\">,<\/span> buff<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>buff<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">bool<\/span> tag <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>recv_num <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">perror<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;recv failed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;[fd&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> fd <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;] recv \u51fa\u9519 errno&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> errno <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    tag <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>recv_num <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;[fd&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> fd <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;] \u5ba2\u6237\u7aef\u6b63\u5e38\u5173\u95ed\u8fde\u63a5&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    tag <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    buff<span class=\"token punctuation\">[<\/span>recv_num<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token char\">&#039;\\\\0&#039;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;[fd&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> fd <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;] \u6536\u5230 &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> recv_num <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; \u5b57\u8282&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><\/p>\n<p>    Json<span class=\"token double-colon punctuation\">::<\/span>Value val<span class=\"token punctuation\">;<\/span><br \/>\n    Json<span class=\"token double-colon punctuation\">::<\/span>Reader read<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>read<span class=\"token punctuation\">.<\/span><span class=\"token function\">parse<\/span><span class=\"token punctuation\">(<\/span>buff<span class=\"token punctuation\">,<\/span> val<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;[fd&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> fd <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;] Json \u89e3\u6790\u5931\u8d25! \u6536\u5230\u5185\u5bb9: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> buff <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n      tag <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>      Mysql_Client <span class=\"token function\">sql<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>file<span class=\"token punctuation\">,<\/span>fd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>sql<span class=\"token punctuation\">.<\/span><span class=\"token function\">IsConnected<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asInt<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&#061;&#061;<\/span> Login<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        string user_tel <span class=\"token operator\">&#061;<\/span> val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        string passwd <span class=\"token operator\">&#061;<\/span> val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;passwd&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        string user_name <span class=\"token operator\">&#061;<\/span> val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_name&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>sql<span class=\"token punctuation\">.<\/span><span class=\"token function\">Db_User_Login<\/span><span class=\"token punctuation\">(<\/span>user_tel<span class=\"token punctuation\">,<\/span> user_name<span class=\"token punctuation\">,<\/span> passwd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token function\">send_Ok<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token function\">send_false<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&#061;&#061;<\/span> Register<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        string tel <span class=\"token operator\">&#061;<\/span> val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        string name <span class=\"token operator\">&#061;<\/span> val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_name&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        string passwd <span class=\"token operator\">&#061;<\/span> val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;passwd&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>sql<span class=\"token punctuation\">.<\/span><span class=\"token function\">Db_User_Register<\/span><span class=\"token punctuation\">(<\/span>tel<span class=\"token punctuation\">,<\/span> name<span class=\"token punctuation\">,<\/span> passwd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token function\">send_Ok<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token function\">send_false<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>      <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&#061;&#061;<\/span> CheckApoint<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        Json<span class=\"token double-colon punctuation\">::<\/span>Value Reader<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>sql<span class=\"token punctuation\">.<\/span><span class=\"token function\">Db_Show_Ticket<\/span><span class=\"token punctuation\">(<\/span>Reader<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token function\">send_false<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span><br \/>\n          <span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span>fd<span class=\"token punctuation\">,<\/span> Reader<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n               <span class=\"token function\">strlen<\/span><span class=\"token punctuation\">(<\/span>Reader<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&#061;&#061;<\/span> Appointment<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        string user_tel <span class=\"token operator\">&#061;<\/span> val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        string ticket_id <span class=\"token operator\">&#061;<\/span> val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_id&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>sql<span class=\"token punctuation\">.<\/span><span class=\"token function\">Db_Yd_Ticket<\/span><span class=\"token punctuation\">(<\/span>user_tel<span class=\"token punctuation\">,<\/span> ticket_id<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token function\">send_false<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token function\">send_Ok<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&#061;&#061;<\/span> AppoinMessage<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        string user_tel <span class=\"token operator\">&#061;<\/span> val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        Json<span class=\"token double-colon punctuation\">::<\/span>Value res<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>sql<span class=\"token punctuation\">.<\/span><span class=\"token function\">Db_Show_My_Ticket<\/span><span class=\"token punctuation\">(<\/span>user_tel<span class=\"token punctuation\">,<\/span> res<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token function\">send_false<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span>fd<span class=\"token punctuation\">,<\/span> res<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n               <span class=\"token function\">strlen<\/span><span class=\"token punctuation\">(<\/span>res<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>i <span class=\"token operator\">&#061;&#061;<\/span> CancelAppoin<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        string user_tel <span class=\"token operator\">&#061;<\/span> val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        string yd_id <span class=\"token operator\">&#061;<\/span> val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;yd_id&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>sql<span class=\"token punctuation\">.<\/span><span class=\"token function\">Db_Cancel_Ticket<\/span><span class=\"token punctuation\">(<\/span>user_tel<span class=\"token punctuation\">,<\/span> yd_id<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token function\">send_false<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token function\">send_Ok<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        tag <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>tag<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">epoll_ctl<\/span><span class=\"token punctuation\">(<\/span>epfd<span class=\"token punctuation\">,<\/span> EPOLL_CTL_DEL<span class=\"token punctuation\">,<\/span> fd<span class=\"token punctuation\">,<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">delete<\/span> <span class=\"token keyword\">this<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">epoll_event<\/span> ev<span class=\"token punctuation\">;<\/span><br \/>\n    ev<span class=\"token punctuation\">.<\/span>events <span class=\"token operator\">&#061;<\/span> EPOLLIN <span class=\"token operator\">|<\/span> EPOLLONESHOT<span class=\"token punctuation\">;<\/span><br \/>\n    ev<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>ptr <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">this<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">epoll_ctl<\/span><span class=\"token punctuation\">(<\/span>epfd<span class=\"token punctuation\">,<\/span> EPOLL_CTL_MOD<span class=\"token punctuation\">,<\/span> fd<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>ev<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token class-name\">Thread_Pool<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Thread_Pool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span><span class=\"token function\">Init_Thread_pool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token function\">exit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token function\">Create_Thread<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token class-name\">Thread_Pool<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token operator\">~<\/span><span class=\"token function\">Thread_Pool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token function\">pthread_mutex_lock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  status <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">pthread_cond_broadcast<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>cond<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u5524\u9192\u6240\u6709\u5728 cond_wait \u7684\u7ebf\u7a0b<\/span><br \/>\n  <span class=\"token function\">pthread_mutex_unlock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> thread_num<span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">pthread_join<\/span><span class=\"token punctuation\">(<\/span>Thread_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token function\">free<\/span><span class=\"token punctuation\">(<\/span>dequeue<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">pthread_mutex_destroy<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">pthread_cond_destroy<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>cond<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">bool<\/span> <span class=\"token class-name\">Thread_Pool<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Init_Thread_pool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>  dequeue <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>task_t <span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span><span class=\"token function\">malloc<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>task_t<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">*<\/span> d_size<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>dequeue <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;dequeue malloc failure&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  dequeue_size <span class=\"token operator\">&#061;<\/span> d_size<span class=\"token punctuation\">;<\/span><br \/>\n  front <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  rear <span class=\"token operator\">&#061;<\/span> front<span class=\"token punctuation\">;<\/span><br \/>\n  task_Num <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  thread_Num <span class=\"token operator\">&#061;<\/span> thread_num<span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token function\">pthread_cond_init<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>cond<span class=\"token punctuation\">,<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">pthread_mutex_init<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>mutex<span class=\"token punctuation\">,<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  status <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;ThreadPool init success!&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Thread_Pool<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">add_Task<\/span><span class=\"token punctuation\">(<\/span>Socket <span class=\"token operator\">*<\/span>csocket<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token function\">pthread_mutex_lock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>task_Num <span class=\"token operator\">&gt;&#061;<\/span> dequeue_size<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">delete<\/span> csocket<span class=\"token punctuation\">;<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;dequeue_size is full!add_Task false!&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">pthread_mutex_unlock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  dequeue<span class=\"token punctuation\">[<\/span>rear<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>task <span class=\"token operator\">&#061;<\/span> csocket<span class=\"token punctuation\">;<\/span><br \/>\n  rear <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>rear <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">%<\/span> dequeue_size<span class=\"token punctuation\">;<\/span><br \/>\n  task_Num<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token function\">pthread_cond_signal<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>cond<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">pthread_mutex_unlock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token operator\">*<\/span><span class=\"token function\">General_Thread<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">void<\/span> <span class=\"token operator\">*<\/span>arg<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  Thread_Pool <span class=\"token operator\">*<\/span>poo <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>Thread_Pool <span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span>arg<span class=\"token punctuation\">;<\/span><br \/>\n  poo<span class=\"token operator\">-&gt;<\/span><span class=\"token function\">Work<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">return<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Thread_Pool<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Create_Thread<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> thread_num<span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">pthread_create<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>Thread_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">,<\/span> General_Thread<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">this<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Thread_Pool<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Work<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token boolean\">true<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">pthread_mutex_lock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span>task_Num <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">&amp;&amp;<\/span> status <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token function\">pthread_cond_wait<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>cond<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token comment\">\/\/ \u8fd9\u662f\u6761\u4ef6\u4f11\u7720&#xff0c;\u8fdb\u5165\u5230\u6761\u4ef6\u53d8\u91cf\u7684\u4f11\u7720\u961f\u5217&#xff0c;\u8fdb\u5165\u6761\u4ef6\u53d8\u91cf\u7684\u4f11\u7720\u961f\u5217\u662f\u4f1a\u81ea\u52a8\u91ca\u653e\u9501&#xff0c;\u8fd9\u4e0esleep\u662f\u4e0d\u76f8\u540c\u7684\u3002<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span> <span class=\"token comment\">\/\/ \u4e0d\u80fd\u7528if&#xff0c;\u8981\u7528while&#xff0c;\u4ee5\u9632\u865a\u5047\u5524\u9192\u3002<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>status <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;ThreadPool not run&#8230;..&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span> <span class=\"token comment\">\/\/ \u5904\u7406\u7ebf\u7a0b\u6c60\u672a\u542f\u7528\u7684\u72b6\u6001\u3002<\/span><\/p>\n<p>    Socket <span class=\"token operator\">*<\/span>tmp <span class=\"token operator\">&#061;<\/span> dequeue<span class=\"token punctuation\">[<\/span>front<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>task<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>tmp <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;tmp is nullptr&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    front <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>front <span class=\"token operator\">&#043;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">%<\/span> dequeue_size<span class=\"token punctuation\">;<\/span><br \/>\n    task_Num<span class=\"token operator\">&#8212;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token comment\">\/\/ cout&lt;&lt;&#034;Thread id: &#034;&lt;&lt;pthread_self()&lt;&lt;endl;<\/span><br \/>\n    <span class=\"token function\">pthread_mutex_unlock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    tmp<span class=\"token operator\">-&gt;<\/span><span class=\"token function\">Do_client<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token comment\">\/\/ \u53d1\u751f\u610f\u5916\u60c5\u51b5\u4e5f\u8981\u53ca\u65f6\u91ca\u653e\u9501<\/span><br \/>\n  <span class=\"token function\">pthread_mutex_unlock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Mysql_config<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Init_Mysql_config<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> <span class=\"token keyword\">char<\/span> <span class=\"token operator\">*<\/span>Sql_config_path<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>Sql_config_path <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;config_path is nullptr!&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  FILE <span class=\"token operator\">*<\/span>fp <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">fopen<\/span><span class=\"token punctuation\">(<\/span>Sql_config_path<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;r&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>fp <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">perror<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;fopen config file failed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;fopen config file failed! errno&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> errno <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">char<\/span> line<span class=\"token punctuation\">[<\/span>MAXLINE<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">{<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">int<\/span> num <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">fgets<\/span><span class=\"token punctuation\">(<\/span>line<span class=\"token punctuation\">,<\/span> MAXLINE <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">2<\/span><span class=\"token punctuation\">,<\/span> fp<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    num<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>line<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token char\">&#039;#&#039;<\/span> <span class=\"token operator\">||<\/span> line<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token char\">&#039;\\\\n&#039;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">continue<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">char<\/span> <span class=\"token operator\">*<\/span>Before <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">strtok<\/span><span class=\"token punctuation\">(<\/span>line<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">char<\/span> <span class=\"token operator\">*<\/span>After <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">strtok<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>Before <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span> <span class=\"token operator\">||<\/span> After <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">continue<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    After<span class=\"token punctuation\">[<\/span><span class=\"token function\">strlen<\/span><span class=\"token punctuation\">(<\/span>After<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token char\">&#039;\\\\0&#039;<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">strcmp<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;dp_ip&#034;<\/span><span class=\"token punctuation\">,<\/span> Before<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      db_ip <span class=\"token operator\">&#061;<\/span> After<span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u7981\u6b62\u5171\u4eab\u5185\u5b58&#xff0c;line\u662f\u4e00\u6b21\u6027\u4f7f\u7528&#xff0c;After\u4f1a\u88ab\u8986\u76d6<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">strcmp<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;dp_port&#034;<\/span><span class=\"token punctuation\">,<\/span> Before<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      db_port <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">atoi<\/span><span class=\"token punctuation\">(<\/span>After<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">strcmp<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;dp_name&#034;<\/span><span class=\"token punctuation\">,<\/span> Before<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      db_name <span class=\"token operator\">&#061;<\/span> After<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">strcmp<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;dp_mysql_path&#034;<\/span><span class=\"token punctuation\">,<\/span> Before<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      Sql_config_path <span class=\"token operator\">&#061;<\/span> After<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;unknown config item: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> Before <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; at line &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> num <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token function\">memset<\/span><span class=\"token punctuation\">(<\/span>line<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>line<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token function\">fclose<\/span><span class=\"token punctuation\">(<\/span>fp<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">print_Mysql_config<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Mysql_config<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">print_Mysql_config<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">const<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;db_ip: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> db_ip <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;db_port: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> db_port <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;db_name: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> db_name <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;config_path: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> Sql_config_path <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p> <span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Mysql_Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Send_full<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n  string a <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;MYSQL CLIENT BUSSY&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  Json<span class=\"token double-colon punctuation\">::<\/span>Value value<span class=\"token punctuation\">;<\/span><br \/>\n  value<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> a<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span>who<span class=\"token punctuation\">,<\/span> value<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n       <span class=\"token function\">strlen<\/span><span class=\"token punctuation\">(<\/span>value<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token class-name\">Mysql_Client<\/span><span class=\"token double-colon punctuation\">::<\/span><br \/>\n<span class=\"token function\">Mysql_Client<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">Mysql_config<\/span> <span class=\"token operator\">*<\/span>Sql_config<span class=\"token punctuation\">,<\/span><span class=\"token keyword\">int<\/span> who<span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span><span class=\"token function\">who<\/span><span class=\"token punctuation\">(<\/span>who<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  connected <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  mysql_con <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>Sql_config <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;Mysql_config_path nullptr!&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">Send_full<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>                       <span class=\"token comment\">\/\/ \u4e0d exit, \u8ba9\u5ba2\u6237\u7aef\u6536\u5230 busy \u540e\u81ea\u5df1\u91cd\u8bd5<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  file <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">Mysql_config<\/span> <span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span>Sql_config<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span><span class=\"token function\">Connect_Mysql_Server<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;connect mysql false (pool busy)&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">Send_full<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span>                  <span class=\"token comment\">\/\/ \u7ed9\u5ba2\u6237\u7aef\u53d1 &#034;MYSQL CLIENT BUSSY&#034;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span>                       <span class=\"token comment\">\/\/ \u4e0d\u518d\u7ee7\u7eed, \u540e\u7eed Db_* \u4e5f\u4e0d\u4f1a\u88ab\u8c03\u7528<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  connected <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;connect mysql succeed&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Mysql_Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Mysql_Begin<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>connected<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">mysql_query<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;begin&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;\u4e8b\u7269\u542f\u52a8\u5931\u8d25!&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Mysql_Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Mysql_RollBack<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>connected<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">mysql_query<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;rollback&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;\u4e8b\u7269\u56de\u6eda\u5931\u8d25!&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Mysql_Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Mysql_Commit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>connected<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">mysql_query<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;commit&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;\u4e8b\u7269\u63d0\u4ea4\u5931\u8d25!&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">bool<\/span> <span class=\"token class-name\">Mysql_Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Connect_Mysql_Server<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token function\">pthread_mutex_lock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>g_pool<span class=\"token operator\">-&gt;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">int<\/span> i<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">while<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token operator\">&lt;<\/span>thread_num<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>g_pool<span class=\"token operator\">-&gt;<\/span>C_P_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>status<span class=\"token operator\">&#061;&#061;<\/span><span class=\"token boolean\">true<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">{<\/span><br \/>\n  mysql_con <span class=\"token operator\">&#061;<\/span> g_pool<span class=\"token operator\">-&gt;<\/span>C_P_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>mysql_con<span class=\"token punctuation\">;<\/span><br \/>\n  g_pool<span class=\"token operator\">-&gt;<\/span>C_P_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>status<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>i<span class=\"token operator\">&gt;&#061;<\/span>thread_num<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token function\">pthread_mutex_unlock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>g_pool<span class=\"token operator\">-&gt;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">{<\/span><br \/>\n  g_pool<span class=\"token operator\">-&gt;<\/span>user<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">pthread_mutex_unlock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>g_pool<span class=\"token operator\">-&gt;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">bool<\/span> <span class=\"token class-name\">Mysql_Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Db_User_Register<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string <span class=\"token operator\">&amp;<\/span>user_tel<span class=\"token punctuation\">,<\/span><br \/>\n                                    <span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string <span class=\"token operator\">&amp;<\/span>user_name<span class=\"token punctuation\">,<\/span><br \/>\n                                    <span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string <span class=\"token operator\">&amp;<\/span>user_passwd<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>connected<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  string sql <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;insert into user_info values(0,&#039;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> user_tel <span class=\"token operator\">&#043;<\/span><br \/>\n               <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#039;,&#039;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> user_name <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#039;,&#039;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> user_passwd <span class=\"token operator\">&#043;<\/span><br \/>\n               <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#039;,1,CURDATE())&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">mysql_query<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">,<\/span> sql<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">bool<\/span> <span class=\"token class-name\">Mysql_Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Db_User_Login<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string <span class=\"token operator\">&amp;<\/span>tel<span class=\"token punctuation\">,<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string <span class=\"token operator\">&amp;<\/span>name<span class=\"token punctuation\">,<\/span><br \/>\n                                 <span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string <span class=\"token operator\">&amp;<\/span>passwd<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>connected<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  string sql <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;select Name,Passwd from user_info where Tel&#061;&#039;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> tel <span class=\"token operator\">&#043;<\/span><br \/>\n               <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#039;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">mysql_query<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">,<\/span> sql<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  MYSQL_RES <span class=\"token operator\">*<\/span>r <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_store_result<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>r <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">int<\/span> num <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_num_rows<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>num <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  MYSQL_ROW row <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_fetch_row<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>row <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  string username <span class=\"token operator\">&#061;<\/span> row<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  string userpasswd <span class=\"token operator\">&#061;<\/span> row<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token function\">mysql_free_result<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>userpasswd <span class=\"token operator\">!&#061;<\/span> passwd <span class=\"token operator\">||<\/span> name <span class=\"token operator\">!&#061;<\/span> username<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">bool<\/span> <span class=\"token class-name\">Mysql_Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Db_Show_Ticket<\/span><span class=\"token punctuation\">(<\/span>Json<span class=\"token double-colon punctuation\">::<\/span>Value <span class=\"token operator\">&amp;<\/span>res<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>connected<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  string sql <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;select * from ticket_table where status&#061;1&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">mysql_query<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">,<\/span> sql<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  MYSQL_RES <span class=\"token operator\">*<\/span>r <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_store_result<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>r <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">int<\/span> num <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_num_rows<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>num <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  res<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> o<span class=\"token punctuation\">;<\/span><br \/>\n  res<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;num&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> num<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> num<span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    MYSQL_ROW row <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_fetch_row<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    Json<span class=\"token double-colon punctuation\">::<\/span>Value val<span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_id&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">atoi<\/span><span class=\"token punctuation\">(<\/span>row<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_name&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> row<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_max&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> row<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_count&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> row<span class=\"token punctuation\">[<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;day_time&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> row<span class=\"token punctuation\">[<\/span><span class=\"token number\">4<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    res<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_arr&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span>val<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ Json\u5bf9\u8c61\u4e5f\u53ef\u4ee5\u6dfb\u52a0\u8fdb\u53bb<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token function\">mysql_free_result<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">bool<\/span> <span class=\"token class-name\">Mysql_Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Db_Yd_Ticket<\/span><span class=\"token punctuation\">(<\/span>std<span class=\"token double-colon punctuation\">::<\/span>string usertel<span class=\"token punctuation\">,<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string tk_id<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>connected<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  string sql_max_count <span class=\"token operator\">&#061;<\/span><br \/>\n      <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;select tk_max,count from ticket_table where Tk_id&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> tk_id<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">mysql_query<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">,<\/span> sql_max_count<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;[\u9884\u7ea6] \u67e5\u8be2\u7968\u4fe1\u606f\u5931\u8d25: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token function\">mysql_error<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">)<\/span><br \/>\n         <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; | SQL: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> sql_max_count <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  MYSQL_RES <span class=\"token operator\">*<\/span>r <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_store_result<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>r <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;[\u9884\u7ea6] \u53d6\u7ed3\u679c\u96c6\u5931\u8d25: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token function\">mysql_error<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">int<\/span> num <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_num_rows<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>num <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;[\u9884\u7ea6] \u672a\u627e\u5230 Tk_id&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> tk_id <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; \u7684\u7968\u8bb0\u5f55&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">mysql_free_result<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  MYSQL_ROW row <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_fetch_row<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">int<\/span> max <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">atoi<\/span><span class=\"token punctuation\">(<\/span>row<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">int<\/span> count <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">atoi<\/span><span class=\"token punctuation\">(<\/span>row<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">mysql_free_result<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>count <span class=\"token operator\">&gt;&#061;<\/span> max<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;[\u9884\u7ea6] \u7968\u6570\u4e0d\u8db3 max&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> max <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; count&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> count <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  count<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token function\">Mysql_Begin<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token comment\">\/\/ \u4e00\u65e6\u5f00\u542f\u4e8b\u7269&#xff0c;\u8fd9\u4e24\u6761sql\u8bed\u53e5\u90fd\u6210\u529f\u6267\u884c\u7684\u60c5\u51b5\u4e0b&#xff0c;\u624d\u4f1a\u53bb\u8fdb\u884c\u63d0\u4ea4\u4e8b\u7269\u7684\u64cd\u4f5c&#xff0c;<\/span><br \/>\n  <span class=\"token comment\">\/\/  \u5426\u5219\u4e00\u65e6\u6709\u5176\u4e2d\u4e00\u4e2a\u672a\u6210\u529f&#xff0c;\u5c31\u7b97\u5176\u4e2d\u4e00\u4e2a\u6210\u529f\u7684\u64cd\u4f5c\u4e5f\u4f1a\u64a4\u9500&#xff0c;\u4e8c\u8005\u7acb\u523b\u56de\u6eda&#xff0c;\u6240\u6709\u6539\u52a8\u7acb\u5373\u64a4\u9500&#xff0c;<\/span><br \/>\n  string sql_setcount <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;update ticket_table set count&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n                        <span class=\"token function\">to_string<\/span><span class=\"token punctuation\">(<\/span>count<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034; where Tk_id&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> tk_id<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">mysql_query<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">,<\/span> sql_setcount<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;[\u9884\u7ea6] \u66f4\u65b0\u7968\u6570\u5931\u8d25: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token function\">mysql_error<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">)<\/span><br \/>\n         <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; | SQL: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> sql_setcount <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">Mysql_RollBack<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  string sql_yd <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;insert into yd_table values(0,&#039;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> usertel <span class=\"token operator\">&#043;<\/span><br \/>\n                  <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#039;,&#039;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> tk_id <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#039;,now())&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">mysql_query<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">,<\/span> sql_yd<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;[\u9884\u7ea6] \u5199\u5165\u9884\u7ea6\u8868\u5931\u8d25: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token function\">mysql_error<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">)<\/span><br \/>\n         <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; | SQL: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> sql_yd <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">Mysql_RollBack<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token function\">Mysql_Commit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;[\u9884\u7ea6] \u6210\u529f: user_tel&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> usertel <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; Tk_id&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> tk_id<br \/>\n       <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; \u5269\u4f59&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token punctuation\">(<\/span>max <span class=\"token operator\">&#8211;<\/span> count<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">bool<\/span> <span class=\"token class-name\">Mysql_Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Db_Show_My_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string <span class=\"token operator\">&amp;<\/span>user_tel<span class=\"token punctuation\">,<\/span><br \/>\n                                     Json<span class=\"token double-colon punctuation\">::<\/span>Value <span class=\"token operator\">&amp;<\/span>res<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>connected<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  string sql <span class=\"token operator\">&#061;<\/span><br \/>\n      <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;select y.yd_id, t.tk_name, t.tk_max, t.&#096;count&#096;, t.DateTime &#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n      <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;from yd_table y, ticket_table t &#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n      <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;where y.user_tel&#061;&#039;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> user_tel <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#039; and y.tk_id&#061;t.Tk_id&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">mysql_query<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">,<\/span> sql<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token function\">mysql_error<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  MYSQL_RES <span class=\"token operator\">*<\/span>r <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_store_result<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>r <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    res<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> o<span class=\"token punctuation\">;<\/span><br \/>\n    res<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;num&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">int<\/span> num <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_num_rows<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  res<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> o<span class=\"token punctuation\">;<\/span><br \/>\n  res<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;num&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> num<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> num<span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    MYSQL_ROW row <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_fetch_row<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    Json<span class=\"token double-colon punctuation\">::<\/span>Value val<span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;yd_id&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> row<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_name&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> row<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_max&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> row<span class=\"token punctuation\">[<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_count&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> row<span class=\"token punctuation\">[<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;day_time&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> row<span class=\"token punctuation\">[<\/span><span class=\"token number\">4<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    res<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;my_ticket_arr&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span>val<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token function\">mysql_free_result<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">bool<\/span> <span class=\"token class-name\">Mysql_Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Db_Cancel_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string <span class=\"token operator\">&amp;<\/span>user_tel<span class=\"token punctuation\">,<\/span><br \/>\n                                    <span class=\"token keyword\">const<\/span> std<span class=\"token double-colon punctuation\">::<\/span>string <span class=\"token operator\">&amp;<\/span>yd_id<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>connected<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  string sql_select <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;select tk_id from yd_table where yd_id&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n                      yd_id <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034; and user_tel&#061;&#039;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> user_tel <span class=\"token operator\">&#043;<\/span><br \/>\n                      <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#039;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token comment\">\/\/ \u56e0\u4e3a\u6211\u4eec\u5220\u9664\u7684\u65f6\u5019\u662f\u5220\u9664\u6211\u4eec\u81ea\u5df1\u7684\u9884\u7ea6\u8868\u7684\u6700\u524d\u9762\u7684\u90a3\u4e2a\u7f16\u53f7&#xff0c;\u800c\u4e0d\u662f\u7968\u7684\u7968\u53f7&#xff0c;\u6240\u4ee5\u6211\u4eec\u8981\u989d\u5916\u7684\u53bb\u5b58\u50a8\u8fd9\u4e2a\u7968\u7684\u7968\u53f7&#xff0c;\u5bf9\u8fd9\u4e2a\u7968\u7684\u6570\u636e\u8fdb\u884c\u51cf\u4e00\u7684\u64cd\u4f5c\u3002<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">mysql_query<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">,<\/span> sql_select<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;\u67e5\u8be2\u9884\u7ea6\u8bb0\u5f55\u5931\u8d25: &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token function\">mysql_error<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  MYSQL_RES <span class=\"token operator\">*<\/span>r <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_store_result<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>r <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">int<\/span> num <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_num_rows<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>num <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">mysql_free_result<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u9884\u7ea6\u8bb0\u5f55\u4e0d\u5b58\u5728&#xff0c;\u65e0\u6cd5\u53d6\u6d88<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  MYSQL_ROW row <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_fetch_row<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  string tk_id <span class=\"token operator\">&#061;<\/span> row<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">mysql_free_result<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token function\">Mysql_Begin<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  string sql_del <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;delete from yd_table where yd_id&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> yd_id<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">mysql_query<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">,<\/span> sql_del<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token function\">mysql_error<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">Mysql_RollBack<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  string sql_update <span class=\"token operator\">&#061;<\/span><br \/>\n      <span class=\"token function\">string<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;update ticket_table set &#096;count&#096;&#061;&#096;count&#096;-1 where Tk_id&#061;&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> tk_id<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">mysql_query<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">,<\/span> sql_update<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token function\">mysql_error<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">Mysql_RollBack<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token function\">Mysql_Commit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  string sql_reset <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;ALTER TABLE yd_table AUTO_INCREMENT &#061; 1&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">mysql_query<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">,<\/span> sql_reset<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token function\">mysql_error<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token class-name\">Mysql_Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token operator\">~<\/span><span class=\"token function\">Mysql_Client<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token function\">pthread_mutex_lock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>g_pool<span class=\"token operator\">-&gt;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">for<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>i<span class=\"token operator\">&lt;<\/span>thread_num<span class=\"token punctuation\">;<\/span>i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>mysql_con<span class=\"token operator\">&#061;&#061;<\/span>g_pool<span class=\"token operator\">-&gt;<\/span>C_P_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>mysql_con<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    g_pool<span class=\"token operator\">-&gt;<\/span>C_P_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>status<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    g_pool<span class=\"token operator\">-&gt;<\/span>user<span class=\"token operator\">&#8212;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n   <span class=\"token punctuation\">}<\/span><br \/>\n   <span class=\"token function\">pthread_mutex_unlock<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>g_pool<span class=\"token operator\">-&gt;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token class-name\">Connect_Pool<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Connect_Pool<\/span><span class=\"token punctuation\">(<\/span>Mysql_config <span class=\"token operator\">*<\/span>Sql_config<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>Sql_config <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;Connect Sqlconfig &#061;&#061; nullptr!&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  user <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  status <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  MAX_USER <span class=\"token operator\">&#061;<\/span> thread_num<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">this<\/span><span class=\"token operator\">-&gt;<\/span>Sql_config <span class=\"token operator\">&#061;<\/span> Sql_config<span class=\"token punctuation\">;<\/span><br \/>\n  C_P_array <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> Mysql_cli<span class=\"token punctuation\">[<\/span>thread_num<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token function\">Reset<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">pthread_mutex_init<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>mutex<span class=\"token punctuation\">,<\/span><span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span><span class=\"token function\">Run<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;Connect_Pool Run failed!&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">Reset<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">exit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n  cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;Connect_Pool Run success!&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n  cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">bool<\/span> <span class=\"token class-name\">Connect_Pool<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Run<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>status <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> thread_num<span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>    MYSQL <span class=\"token operator\">*<\/span>mysql <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_init<\/span><span class=\"token punctuation\">(<\/span>C_P_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>mysql_con<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>mysql <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    mysql <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">mysql_real_connect<\/span><span class=\"token punctuation\">(<\/span>mysql<span class=\"token punctuation\">,<\/span> Sql_config<span class=\"token operator\">-&gt;<\/span>db_ip<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;root&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                               <span class=\"token string\">&#034;111111&#034;<\/span><span class=\"token punctuation\">,<\/span> Sql_config<span class=\"token operator\">-&gt;<\/span>db_name<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                               Sql_config<span class=\"token operator\">-&gt;<\/span>db_port<span class=\"token punctuation\">,<\/span> <span class=\"token constant\">NULL<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>mysql <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    C_P_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>mysql_con <span class=\"token operator\">&#061;<\/span> mysql<span class=\"token punctuation\">;<\/span><br \/>\n    C_P_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>status <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Connect_Pool<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Reset<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n<span class=\"token keyword\">for<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>i<span class=\"token operator\">&lt;<\/span>thread_num<span class=\"token punctuation\">;<\/span>i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>C_P_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>mysql_con<span class=\"token operator\">!&#061;<\/span><span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">mysql_close<\/span><span class=\"token punctuation\">(<\/span> C_P_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>mysql_con<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  C_P_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>mysql_con<span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  C_P_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>status <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token class-name\">Connect_Pool<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token operator\">~<\/span><span class=\"token function\">Connect_Pool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">for<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>i<span class=\"token operator\">&lt;<\/span>thread_num<span class=\"token punctuation\">;<\/span>i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">mysql_close<\/span><span class=\"token punctuation\">(<\/span>C_P_array<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>mysql_con<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token keyword\">delete<\/span> C_P_array<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">pthread_mutex_destroy<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>mutex<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Tcp_Service<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Init<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> Service_Config <span class=\"token operator\">*<\/span>config<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>config <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;config is nullptr!&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token keyword\">this<\/span><span class=\"token operator\">-&gt;<\/span>config <span class=\"token operator\">&#061;<\/span> config<span class=\"token punctuation\">;<\/span><br \/>\n  Status <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  pool <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> Thread_Pool<span class=\"token punctuation\">;<\/span><\/p>\n<p>  Mysql_config file<span class=\"token punctuation\">;<\/span><br \/>\n  file<span class=\"token punctuation\">.<\/span><span class=\"token function\">Init_Mysql_config<\/span><span class=\"token punctuation\">(<\/span>Sql_Conf_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  lis_fd <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">socket<\/span><span class=\"token punctuation\">(<\/span>AF_INET<span class=\"token punctuation\">,<\/span> SOCK_STREAM<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>lis_fd <span class=\"token operator\">&#061;&#061;<\/span> START<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">perror<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;socket failed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;socket failed! errno&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> errno <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">exit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token comment\">\/\/ listen socket \u8bbe\u4e3a\u975e\u963b\u585e,accept \u961f\u5217\u7a7a\u65f6\u8fd4\u56de EAGAIN \u800c\u4e0d\u662f\u963b\u585e<\/span><br \/>\n  <span class=\"token keyword\">int<\/span> flags <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">fcntl<\/span><span class=\"token punctuation\">(<\/span>lis_fd<span class=\"token punctuation\">,<\/span> F_GETFL<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">fcntl<\/span><span class=\"token punctuation\">(<\/span>lis_fd<span class=\"token punctuation\">,<\/span> F_SETFL<span class=\"token punctuation\">,<\/span> flags <span class=\"token operator\">|<\/span> O_NONBLOCK<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token comment\">\/\/ \u56e0\u4e3a\u662flis_fd\u4e3a\u7a7a\u5bfc\u81f4\u7684\u963b\u585e&#xff0c;\u6240\u4ee5\u6211\u4eec\u8fd9\u4e2a\u5c06\u6a21\u5f0f\u8bbe\u4e3a\u975e\u963b\u585e&#xff0c;\u5728\u6b64\u4e4b\u540e&#xff0c;accept\u4f1a\u76f4\u63a5\u8fd4\u56deEAGAIN\u6216EWOULDBLOCK&#xff0c;\u800c\u4e0d\u662f\u963b\u585e\u7ebf\u7a0b<\/span><br \/>\n  <span class=\"token comment\">\/\/ \u4e0d\u4f1a\u963b\u585e<\/span><\/p>\n<p>  <span class=\"token keyword\">int<\/span> opt <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">setsockopt<\/span><span class=\"token punctuation\">(<\/span>lis_fd<span class=\"token punctuation\">,<\/span> SOL_SOCKET<span class=\"token punctuation\">,<\/span> SO_REUSEADDR<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>opt<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>opt<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr_in<\/span> server_addr<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">memset<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>server_addr<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>server_addr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  server_addr<span class=\"token punctuation\">.<\/span>sin_family <span class=\"token operator\">&#061;<\/span> AF_INET<span class=\"token punctuation\">;<\/span><br \/>\n  server_addr<span class=\"token punctuation\">.<\/span>sin_addr<span class=\"token punctuation\">.<\/span>s_addr <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">inet_addr<\/span><span class=\"token punctuation\">(<\/span>config<span class=\"token operator\">-&gt;<\/span>IP<span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  server_addr<span class=\"token punctuation\">.<\/span>sin_port <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">htons<\/span><span class=\"token punctuation\">(<\/span>config<span class=\"token operator\">-&gt;<\/span>Port<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  config<span class=\"token operator\">-&gt;<\/span><span class=\"token function\">PrintConfig<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">bind<\/span><span class=\"token punctuation\">(<\/span>lis_fd<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr<\/span> <span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">&amp;<\/span>server_addr<span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>server_addr<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">perror<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;bind failed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;bind failed! errno&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> errno <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">exit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">listen<\/span><span class=\"token punctuation\">(<\/span>lis_fd<span class=\"token punctuation\">,<\/span> config<span class=\"token operator\">-&gt;<\/span>Lismax<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">perror<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;listen failed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;listen init error! errno&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> errno <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">exit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">int<\/span> epfd <span class=\"token operator\">&#061;<\/span><br \/>\n      <span class=\"token function\">epoll_create1<\/span><span class=\"token punctuation\">(<\/span>EPOLL_CLOEXEC<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token comment\">\/\/ \u9632\u6b62fork\u7248\u672c\u516c\u7528\u4e00\u4e2a\u6587\u4ef6\u63cf\u8ff0\u7b26\u7684\u60c5\u51b5<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span> <span class=\"token operator\">&#061;&#061;<\/span> epfd<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">perror<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;epoll_create1 failed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;create epoll error! errno&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> errno <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span>lis_fd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">exit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  ep_fd <span class=\"token operator\">&#061;<\/span> epfd<span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;epoll success!&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">epoll_event<\/span> ev_listen<span class=\"token punctuation\">;<\/span><br \/>\n  ev_listen<span class=\"token punctuation\">.<\/span>events <span class=\"token operator\">&#061;<\/span> EPOLLIN<span class=\"token punctuation\">;<\/span><br \/>\n  ev_listen<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>fd <span class=\"token operator\">&#061;<\/span> lis_fd<span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token function\">epoll_ctl<\/span><span class=\"token punctuation\">(<\/span>epfd<span class=\"token punctuation\">,<\/span> EPOLL_CTL_ADD<span class=\"token punctuation\">,<\/span> lis_fd<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&amp;<\/span>ev_listen<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">perror<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;epoll_ctl add listen fd failed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;epoll_ctl add false! errno&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> errno <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span>lis_fd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">exit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;Tcp service success!&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">while<\/span> <span class=\"token punctuation\">(<\/span>Status<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>    <span class=\"token keyword\">int<\/span> ready_count <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">epoll_wait<\/span><span class=\"token punctuation\">(<\/span>epfd<span class=\"token punctuation\">,<\/span> ready_events<span class=\"token punctuation\">,<\/span> MAXLINE<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token comment\">\/\/- \u5185\u6838 :\u8d1f\u8d23\u628a\u53d1\u751f\u4e8b\u4ef6\u7684 fd \u653e\u5165\u5c31\u7eea\u53cc\u94fe\u8868(\u8fd9\u662f\u4e2d\u65ad\/\u56de\u8c03\u9a71\u52a8\u7684,\u968f\u65f6\u53d1\u751f)<\/span><br \/>\n    <span class=\"token comment\">\/\/ epoll_wait :\u8d1f\u8d23\u4ece\u5c31\u7eea\u53cc\u94fe\u8868\u53d6\u51fa\u4e8b\u4ef6,\u62f7\u8d1d\u7ed9\u7528\u6237\u6001\u7684 ready_events<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>ready_count <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token function\">perror<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;epoll_wait failed&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;epoll_wait error! errno&#061;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> errno <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span>lis_fd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token function\">exit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> ready_count<span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">int<\/span> tmfd <span class=\"token operator\">&#061;<\/span> ready_events<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>fd<span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>tmfd <span class=\"token operator\">&#061;&#061;<\/span> lis_fd<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">auto<\/span> csocket <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token function\">AccSocket<\/span><span class=\"token punctuation\">(<\/span>lis_fd<span class=\"token punctuation\">,<\/span> epfd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        pool<span class=\"token operator\">-&gt;<\/span><span class=\"token function\">add_Task<\/span><span class=\"token punctuation\">(<\/span>csocket<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">auto<\/span> csocket <span class=\"token operator\">&#061;<\/span> ready_events<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>ptr<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>csocket <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token keyword\">nullptr<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;csocket is nullptr&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n          <span class=\"token keyword\">continue<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        pool<span class=\"token operator\">-&gt;<\/span><span class=\"token function\">add_Task<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>Socket <span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span>csocket<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">int<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><\/p>\n<p>  file<span class=\"token punctuation\">.<\/span><span class=\"token function\">Init_Mysql_config<\/span><span class=\"token punctuation\">(<\/span>Sql_Conf_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  file<span class=\"token punctuation\">.<\/span><span class=\"token function\">print_Mysql_config<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n  g_pool <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token function\">Connect_Pool<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>file<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  Service_Config a<span class=\"token punctuation\">;<\/span><br \/>\n  a<span class=\"token punctuation\">.<\/span><span class=\"token function\">ReadConfig<\/span><span class=\"token punctuation\">(<\/span>a<span class=\"token punctuation\">.<\/span>config_path<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><\/p>\n<p>  Tcp_Service <span class=\"token function\">tcp_service<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>a<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">delete<\/span> g_pool<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">return<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h5>\u6587\u4ef6\u4f5c\u7528<\/h5>\n<p>\u5b9e\u73b0 service.h \u91cc\u6240\u6709\u7c7b\u7684\u65b9\u6cd5 &#043; main \u51fd\u6570&#xff08;\u7ea6 935 \u884c&#xff09;\u3002<\/p>\n<h5>\u6838\u5fc3\u6d41\u7a0b<\/h5>\n<p>main()<br \/>\n  \u251c\u2500 file.Init_Mysql_config()           \/\/ \u8bfb mysql.conf<br \/>\n  \u251c\u2500 g_pool &#061; new Connect_Pool(&amp;file)    \/\/ \u5efa\u8fde\u63a5\u6c60&#xff08;5 \u4e2a\u8fde\u63a5&#xff09;<br \/>\n  \u251c\u2500 a.ReadConfig()                     \/\/ \u8bfb service.conf<br \/>\n  \u2514\u2500 Tcp_Service tcp_service(&amp;a)        \/\/ \u8fdb\u5165\u4e3b\u5faa\u73af<br \/>\n       \u251c\u2500 new Thread_Pool                \/\/ \u8d77 5 \u4e2a worker<br \/>\n       \u251c\u2500 listen &#043; bind &#043; socket         \/\/ \u8d77 TCP \u670d\u52a1<br \/>\n       \u2514\u2500 while (Status) {               \/\/ epoll \u4e3b\u5faa\u73af<br \/>\n            epoll_wait()<br \/>\n            \u251c\u2500 if listen fd \u2192 new AccSocket \u2192 add_Task<br \/>\n            \u2514\u2500 else \u2192 \u53d6 RecvSocket* \u2192 add_Task<br \/>\n          }<\/p>\n<h5>\u5173\u952e\u65b9\u6cd5\u8be6\u89e3<\/h5>\n<h6>Tcp_Service::Init (L815-L917)<\/h6>\n<p>\u4e3b\u63a7\u51fd\u6570&#xff1a;\u5efa\u7ebf\u7a0b\u6c60 \u2192 \u5efa listen fd&#xff08;\u8bbe\u975e\u963b\u585e &#043; SO_REUSEADDR&#xff09;\u2192 bind \u2192 listen \u2192 epoll_create1 \u2192 epoll_ctl ADD listen fd \u2192 while(Status) \u5faa\u73af epoll_wait\u3002<\/p>\n<h6>Thread_Pool::Work (L338-L366)<\/h6>\n<p>worker \u7ebf\u7a0b\u4e3b\u5faa\u73af&#xff1a;pthread_mutex_lock \u2192 while(task_Num&#061;&#061;0) cond_wait \u2192 \u53d6\u51fa dequeue[front].task \u2192 unlock \u2192 tmp-&gt;Do_client() \u591a\u6001\u5206\u53d1\u3002<\/p>\n<h6>RecvSocket::Do_client (L164-L260)<\/h6>\n<ul>\n<li>recv \u6570\u636e \u2192 JSON \u89e3\u6790 \u2192 \u6784\u9020 Mysql_Client sql(&amp;file, fd)<\/li>\n<li>\u68c0\u67e5 sql.IsConnected()&#xff1a;\n<ul>\n<li>false&#xff08;\u6c60\u6ee1&#xff09;\u2192 \u8df3\u8fc7 Db_* \u8c03\u7528&#xff0c;\u6784\u9020\u91cc\u5df2 Send_full() \u53d1\u4e86 BUSSY<\/li>\n<li>true \u2192 \u6309 val[&#034;type&#034;] \u8d70 6 \u4e2a\u4e1a\u52a1\u5206\u652f<\/li>\n<\/ul>\n<\/li>\n<li>\u7ed3\u675f\u540e epoll_ctl MOD \u91cd\u65b0\u76d1\u542c&#xff08;EPOLLONESHOT&#xff09;<\/li>\n<\/ul>\n<h6>Mysql_Client::Connect_Mysql_Server (L474-L499)<\/h6>\n<p>\u52a0\u9501\u904d\u5386 C_P_array&#xff0c;\u627e\u5230 status&#061;&#061;true \u7684 slot \u2192 mysql_con &#061; C_P_array[i].mysql_con \u2192 status&#061;false \u2192 user&#043;&#043; \u2192 \u8fd4\u56de true\u3002\u501f\u4e0d\u5230\u8fd4\u56de false\u3002<\/p>\n<h6>Mysql_Client::~Mysql_Client (L740-L749)<\/h6>\n<p>\u52a0\u9501\u904d\u5386 C_P_array&#xff0c;\u627e\u5230 mysql_con \u76f8\u7b49\u7684 slot \u2192 status&#061;true \u2192 user&#8211; \u5f52\u8fd8\u3002<\/p>\n<h6>Connect_Pool::Run (L776-L798)<\/h6>\n<p>\u5faa\u73af 5 \u6b21&#xff1a;mysql_init \u2192 mysql_real_connect \u2192 \u5b58\u8fdb C_P_array[i].mysql_con &#043; status&#061;true\u3002<\/p>\n<h6>Connect_Pool::Reset (L801-L809)<\/h6>\n<p>\u5faa\u73af 5 \u6b21&#xff1a;\u82e5 mysql_con !&#061; nullptr \u5219 mysql_close&#xff0c;\u7136\u540e\u7f6e nullptr &#043; status&#061;false\u3002<\/p>\n<h5>\u4e1a\u52a1\u65b9\u6cd5<\/h5>\n<ul>\n<li>Db_User_Register (L501) \u2014 \u63d2\u5165 user_info<\/li>\n<li>Db_User_Login (L517) \u2014 select Name,Passwd \u6bd4\u5bf9<\/li>\n<li>Db_Show_Ticket (L552) \u2014 select * \u62fc\u6210 JSON<\/li>\n<li>Db_Yd_Ticket (L585) \u2014 \u4e8b\u52a1&#xff1a;\u67e5 max\/count \u2192 \u66f4\u65b0 count \u2192 \u63d2 yd_table<\/li>\n<li>Db_Show_My_Ticket (L647) \u2014 JOIN yd_table &#043; ticket_table<\/li>\n<li>Db_Cancel_Ticket (L684) \u2014 \u4e8b\u52a1&#xff1a;\u67e5 tk_id \u2192 \u5220 yd \u2192 count-1<\/li>\n<\/ul>\n<h5>\u8bbe\u8ba1\u4eae\u70b9<\/h5>\n<ul>\n<li>Mysql_Client::IsConnected() \u8ba9 Do_client \u53ef\u4ee5\u65e0\u4fb5\u5165\u5904\u7406&#034;\u6c60\u6ee1&#034;<\/li>\n<li>Send_full() \u76f4\u63a5\u53d1 BUSSY \u7ed9\u5ba2\u6237\u7aef fd&#xff0c;\u907f\u514d\u5728 Do_client \u591a\u53d1\u4e00\u6b21 false<\/li>\n<li>\u4e8b\u52a1\u5728 Db_Yd_Ticket \/ Db_Cancel_Ticket \u4e2d\u6b63\u786e begin\/commit\/rollback<\/li>\n<li>listen fd \u8bbe\u975e\u963b\u585e &#043; accept \u8fd4\u56de EAGAIN \u65f6\u4e0d\u62a5\u9519\u9759\u9ed8\u9000\u51fa&#xff08;\u591a worker \u7ade\u4e89\u4fdd\u62a4&#xff09;<\/li>\n<\/ul>\n<h5>\u4e0d\u8db3<\/h5>\n<ul>\n<li>Mysql_Client::mysql_con \u4e4b\u524d\u662f\u91ce\u6307\u9488&#xff08;\u5df2\u52a0 mysql_con &#061; nullptr; \u521d\u59cb\u5316\u4fee\u597d&#xff09;<\/li>\n<li>day-time vs day_time \u5b57\u6bb5\u540d\u4e0d\u4e00\u81f4&#xff08;\u5df2\u4fee&#xff09;<\/li>\n<li>Connect_Pool::Run \u5931\u8d25\u65f6\u5c40\u90e8 mysql \u6307\u9488\u4e22\u5931&#xff08;OS \u515c\u5e95&#xff09;<\/li>\n<li>SQL \u5168\u5b57\u7b26\u4e32\u62fc\u63a5&#xff0c;\u5b58\u5728\u6ce8\u5165\u98ce\u9669<\/li>\n<\/ul>\n<hr \/>\n<h4>4.3 client.h \u2014 \u5ba2\u6237\u7aef\u7c7b\u58f0\u660e<\/h4>\n<h5>\u5b8c\u6574\u4ee3\u7801<\/h5>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;stdlib.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;string&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;cstring&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;netinet\/in.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;arpa\/inet.h&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;jsoncpp\/json\/json.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;mysql\/mysql.h&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/socket.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/epoll.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;pthread.h&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;unistd.h&gt;<\/span><\/span><\/p>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">IPADRESS<\/span> <span class=\"token string\">&#034;127.0.0.1&#034;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">PORTADRESS<\/span> <span class=\"token expression\"><span class=\"token number\">8888<\/span><\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">START<\/span> <span class=\"token expression\"><span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">Length<\/span> <span class=\"token expression\"><span class=\"token number\">1024<\/span><\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">k<\/span> <span class=\"token string\">&#034;ok&#034;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">BUSY<\/span> <span class=\"token string\">&#034;MYSQL CLIENT BUSSY&#034;<\/span>   <span class=\"token comment\">\/\/ \u670d\u52a1\u5668\u8fde\u63a5\u6c60\u6ee1\u65f6\u8fd4\u56de\u7684\u6807\u8bb0<\/span><\/span><\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">Client<\/span><span class=\"token punctuation\">{<\/span><br \/>\n   <span class=\"token keyword\">private<\/span><span class=\"token operator\">:<\/span><\/p>\n<p>     <span class=\"token keyword\">short<\/span> Port<span class=\"token punctuation\">;<\/span><\/p>\n<p>     <span class=\"token keyword\">int<\/span> conn_fd<span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">int<\/span> User_Login_way<span class=\"token punctuation\">;<\/span><\/p>\n<p>     <span class=\"token keyword\">bool<\/span> Running<span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">bool<\/span> Dl_Status<span class=\"token punctuation\">;<\/span><\/p>\n<p>     std<span class=\"token double-colon punctuation\">::<\/span>string IP<span class=\"token punctuation\">;<\/span><br \/>\n     std<span class=\"token double-colon punctuation\">::<\/span>string user_name<span class=\"token punctuation\">;<\/span><br \/>\n     std<span class=\"token double-colon punctuation\">::<\/span>string user_tel<span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">public<\/span><span class=\"token operator\">:<\/span><br \/>\n     <span class=\"token function\">Client<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token operator\">~<\/span><span class=\"token function\">Client<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Client_Init<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Print_Config<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Run<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Show_Menu<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">User_Register<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">User_login<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Show_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Yd_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Show_My_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">void<\/span> <span class=\"token function\">Qx_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<h5>\u6587\u4ef6\u4f5c\u7528<\/h5>\n<p>\u58f0\u660e Client \u7c7b&#xff0c;\u5b9a\u4e49\u5ba2\u6237\u7aef\u5e38\u91cf&#xff08;IP\/PORT\/Buff \u5927\u5c0f&#xff09;\u3002<\/p>\n<h5>\u5173\u952e\u6210\u5458<\/h5>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">IPADRESS<\/span> <span class=\"token string\">&#034;127.0.0.1&#034;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">PORTADRESS<\/span> <span class=\"token expression\"><span class=\"token number\">8888<\/span><\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">Length<\/span> <span class=\"token expression\"><span class=\"token number\">1024<\/span><\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">k<\/span> <span class=\"token string\">&#034;ok&#034;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">define<\/span> <span class=\"token macro-name\">BUSY<\/span> <span class=\"token string\">&#034;MYSQL CLIENT BUSSY&#034;<\/span>   <span class=\"token comment\">\/\/ \u670d\u52a1\u5668\u8fde\u63a5\u6c60\u6ee1\u65f6\u8fd4\u56de\u7684\u6807\u8bb0<\/span><\/span><\/p>\n<h5>Client \u7c7b<\/h5>\n<table>\n<tr>\u6210\u5458\u4f5c\u7528<\/tr>\n<tbody>\n<tr>\n<td>conn_fd<\/td>\n<td>TCP \u8fde\u63a5 fd<\/td>\n<\/tr>\n<tr>\n<td>Dl_Status<\/td>\n<td>\u767b\u5f55\u72b6\u6001<\/td>\n<\/tr>\n<tr>\n<td>Running<\/td>\n<td>\u4e3b\u5faa\u73af\u5f00\u5173<\/td>\n<\/tr>\n<tr>\n<td>user_name \/ user_tel<\/td>\n<td>\u5f53\u524d\u7528\u6237\u4fe1\u606f<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5>\u65b9\u6cd5<\/h5>\n<ul>\n<li>Client_Init() \u2014 socket &#043; connect<\/li>\n<li>Show_Menu() \u2014 \u663e\u793a\u83dc\u5355&#xff08;\u767b\u5f55\u524d\u540e\u4e0d\u540c&#xff09;<\/li>\n<li>User_Register \/ User_login \/ Show_Ticket \/ Yd_Ticket \/ Show_My_Ticket \/ Qx_Ticket \u2014 6 \u4e2a\u4e1a\u52a1<\/li>\n<li>Run() \u2014 \u4e3b\u5faa\u73af switch \u5206\u53d1<\/li>\n<\/ul>\n<hr \/>\n<h4>4.4 client.cpp \u2014 \u5ba2\u6237\u7aef\u5b9e\u73b0<\/h4>\n<h5>\u5b8c\u6574\u4ee3\u7801<\/h5>\n<p><span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&#034;client.h&#034;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;jsoncpp\/json\/value.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;ostream&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;sys\/socket.h&gt;<\/span><\/span><br \/>\n<span class=\"token macro property\"><span class=\"token directive-hash\">#<\/span><span class=\"token directive keyword\">include<\/span> <span class=\"token string\">&lt;iostream&gt;<\/span><\/span><br \/>\n<span class=\"token keyword\">using<\/span> <span class=\"token keyword\">namespace<\/span> std<span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">enum<\/span> <span class=\"token class-name\">OP_TYPE<\/span><span class=\"token punctuation\">{<\/span><br \/>\n  Login <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  Register<span class=\"token punctuation\">,<\/span><br \/>\n  CheckApoint<span class=\"token punctuation\">,<\/span><br \/>\n  Appointment<span class=\"token punctuation\">,<\/span><br \/>\n  AppoinMessage<span class=\"token punctuation\">,<\/span><br \/>\n  CancelAppoin<span class=\"token punctuation\">,<\/span><br \/>\n  Exit<br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token class-name\">Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Client<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    IP<span class=\"token operator\">&#061;<\/span>IPADRESS<span class=\"token punctuation\">;<\/span><br \/>\n    Port <span class=\"token operator\">&#061;<\/span> PORTADRESS<span class=\"token punctuation\">;<\/span><br \/>\n    conn_fd <span class=\"token operator\">&#061;<\/span> START<span class=\"token punctuation\">;<\/span><br \/>\n    Dl_Status <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    Running <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">Client_Init<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token class-name\">Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token operator\">~<\/span><span class=\"token function\">Client<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>conn_fd <span class=\"token operator\">!&#061;<\/span> START<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span>conn_fd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;Client close&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Client_Init<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><\/p>\n<p>   <span class=\"token keyword\">int<\/span> sock_fd <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">socket<\/span><span class=\"token punctuation\">(<\/span>AF_INET<span class=\"token punctuation\">,<\/span>SOCK_STREAM<span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>sock_fd<span class=\"token operator\">&lt;&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;Client socket Error!&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">exit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token punctuation\">}<\/span><\/p>\n<p>   conn_fd <span class=\"token operator\">&#061;<\/span> sock_fd<span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token function\">Print_Config<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>   <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr_in<\/span> Client_sock_ad<span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token function\">memset<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">&amp;<\/span>Client_sock_ad<span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>Client_sock_ad<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   Client_sock_ad<span class=\"token punctuation\">.<\/span>sin_family <span class=\"token operator\">&#061;<\/span> AF_INET<span class=\"token punctuation\">;<\/span><br \/>\n   Client_sock_ad<span class=\"token punctuation\">.<\/span>sin_addr<span class=\"token punctuation\">.<\/span>s_addr<span class=\"token operator\">&#061;<\/span><span class=\"token function\">inet_addr<\/span><span class=\"token punctuation\">(<\/span>IPADRESS<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   Client_sock_ad<span class=\"token punctuation\">.<\/span>sin_port <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">htons<\/span><span class=\"token punctuation\">(<\/span>PORTADRESS<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>   <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">connect<\/span><span class=\"token punctuation\">(<\/span>sock_fd<span class=\"token punctuation\">,<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">const<\/span> <span class=\"token keyword\">struct<\/span> <span class=\"token class-name\">sockaddr<\/span><span class=\"token operator\">*<\/span> <span class=\"token punctuation\">)<\/span><span class=\"token operator\">&amp;<\/span>Client_sock_ad<span class=\"token punctuation\">,<\/span><span class=\"token keyword\">sizeof<\/span><span class=\"token punctuation\">(<\/span>Client_sock_ad<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">&#061;&#061;<\/span>START<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;connect failed!&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span>sock_fd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">exit<\/span><span class=\"token punctuation\">(<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token punctuation\">}<\/span><\/p>\n<p>   cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;connect succed!&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n   cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;               client start begin                     &#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n   cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><\/p>\n<p>   <span class=\"token function\">Run<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Print_Config<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;IP: &#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>IP<span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;Port: &#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>Port<span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;conn_fd: &#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>conn_fd<span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;this: &#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span><span class=\"token keyword\">this<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Show_Menu<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>Dl_Status<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        cout <span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;&#8212;\u7528\u6237\u540d:\u6e38\u5ba2&#8212;&#8212;&#8212;\u72b6\u6001&#xff1a;\u672a\u767b\u5f55&#8212;&#8211;&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;1 \u767b\u9646   2  \u6ce8\u518c   3  \u9000\u51fa&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n        cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n        cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u9009\u9879\u7f16\u53f7:&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;&#8212;\u7528\u6237\u540d&#xff1a;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> user_name <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;&#8212;&#8212;&#8211;\u72b6\u6001&#xff1a;\u5df2\u767b\u9646&#8212;&#8212;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n        cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;1 \u67e5\u770b\u9884\u7ea6      2  \u9884\u5b9a &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n        cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;3 \u67e5\u770b\u6211\u7684\u9884\u7ea6   4 \u53d6\u6d88\u9884\u5b9a &#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n        cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034; 5 \u9000\u51fa&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n        cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n        cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u9009\u9879\u7f16\u53f7:&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n        cout <span class=\"token operator\">&lt;&lt;<\/span> <span class=\"token string\">&#034;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#034;<\/span> <span class=\"token operator\">&lt;&lt;<\/span> endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">User_Register<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u624b\u673a\u53f7\u7801&#xff1a;&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    cin<span class=\"token operator\">&gt;&gt;<\/span>user_tel<span class=\"token punctuation\">;<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u7528\u6237\u540d&#xff1a;&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    cin<span class=\"token operator\">&gt;&gt;<\/span>user_name<span class=\"token punctuation\">;<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u5bc6\u7801&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    string passwd<span class=\"token punctuation\">;<\/span><br \/>\n    cin<span class=\"token operator\">&gt;&gt;<\/span>passwd<span class=\"token punctuation\">;<\/span><\/p>\n<p>    Json<span class=\"token double-colon punctuation\">::<\/span>Value mess<span class=\"token punctuation\">;<\/span><br \/>\n    mess<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> Register<span class=\"token punctuation\">;<\/span><br \/>\n    mess<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> user_tel<span class=\"token punctuation\">;<\/span><\/p>\n<p>    mess<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_name&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> user_name<span class=\"token punctuation\">;<\/span><br \/>\n    mess<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;passwd&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> passwd<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span>conn_fd<span class=\"token punctuation\">,<\/span>mess<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><span class=\"token function\">strlen<\/span><span class=\"token punctuation\">(<\/span>mess<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">char<\/span> buff_status<span class=\"token punctuation\">[<\/span>Length<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> n <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">recv<\/span><span class=\"token punctuation\">(<\/span>conn_fd<span class=\"token punctuation\">,<\/span>buff_status<span class=\"token punctuation\">,<\/span>Length<span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>n<span class=\"token operator\">&lt;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;ser err&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    Json<span class=\"token double-colon punctuation\">::<\/span>Value Acmess<span class=\"token punctuation\">;<\/span><br \/>\n    Json<span class=\"token double-colon punctuation\">::<\/span>Reader Read<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>Read<span class=\"token punctuation\">.<\/span><span class=\"token function\">parse<\/span><span class=\"token punctuation\">(<\/span>buff_status<span class=\"token punctuation\">,<\/span>Acmess<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;Json Read error!&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    string st <span class=\"token operator\">&#061;<\/span> Acmess<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>st <span class=\"token operator\">&#061;&#061;<\/span> BUSY<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u670d\u52a1\u5668\u7e41\u5fd9&#xff0c;\u8bf7\u7a0d\u540e\u91cd\u8bd5&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>st<span class=\"token punctuation\">.<\/span><span class=\"token function\">compare<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">)<\/span><span class=\"token operator\">!&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;Register false!&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;Register success!&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    Dl_Status <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">User_login<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u624b\u673a\u53f7\u7801&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    cin<span class=\"token operator\">&gt;&gt;<\/span>user_tel<span class=\"token punctuation\">;<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u7528\u6237\u540d&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    cin<span class=\"token operator\">&gt;&gt;<\/span>user_name<span class=\"token punctuation\">;<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u5bc6\u7801&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    string passwd<span class=\"token punctuation\">;<\/span><br \/>\n    cin<span class=\"token operator\">&gt;&gt;<\/span>passwd<span class=\"token punctuation\">;<\/span><\/p>\n<p>    Json<span class=\"token double-colon punctuation\">::<\/span>Value val<span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> Login<span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> user_tel<span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;passwd&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> passwd<span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_name&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> user_name<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span>conn_fd<span class=\"token punctuation\">,<\/span>val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><span class=\"token function\">strlen<\/span><span class=\"token punctuation\">(<\/span>val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>   <span class=\"token keyword\">char<\/span> buff_status<span class=\"token punctuation\">[<\/span>Length<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> n <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">recv<\/span><span class=\"token punctuation\">(<\/span>conn_fd<span class=\"token punctuation\">,<\/span>buff_status<span class=\"token punctuation\">,<\/span>Length<span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>n<span class=\"token operator\">&lt;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;ser err&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    Json<span class=\"token double-colon punctuation\">::<\/span>Value Acmess<span class=\"token punctuation\">;<\/span><br \/>\n    Json<span class=\"token double-colon punctuation\">::<\/span>Reader Read<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>Read<span class=\"token punctuation\">.<\/span><span class=\"token function\">parse<\/span><span class=\"token punctuation\">(<\/span>buff_status<span class=\"token punctuation\">,<\/span>Acmess<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;Json Read error!&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    string st <span class=\"token operator\">&#061;<\/span> Acmess<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>st <span class=\"token operator\">&#061;&#061;<\/span> BUSY<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u670d\u52a1\u5668\u7e41\u5fd9&#xff0c;\u8bf7\u7a0d\u540e\u91cd\u8bd5&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>st<span class=\"token punctuation\">.<\/span><span class=\"token function\">compare<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">)<\/span><span class=\"token operator\">!&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;Login false!&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;Login success!&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    Dl_Status <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Show_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n   Json<span class=\"token double-colon punctuation\">::<\/span>Value val<span class=\"token punctuation\">;<\/span><br \/>\n   val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> CheckApoint<span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span>conn_fd<span class=\"token punctuation\">,<\/span>val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><span class=\"token function\">strlen<\/span><span class=\"token punctuation\">(<\/span>val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>   <span class=\"token keyword\">char<\/span> buff<span class=\"token punctuation\">[<\/span>Length<span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">{<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token keyword\">int<\/span> n <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">recv<\/span><span class=\"token punctuation\">(<\/span>conn_fd<span class=\"token punctuation\">,<\/span>buff<span class=\"token punctuation\">,<\/span>Length<span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>n<span class=\"token operator\">&lt;&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;ser close&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token punctuation\">}<\/span><\/p>\n<p>   Json<span class=\"token double-colon punctuation\">::<\/span>Value res_val<span class=\"token punctuation\">;<\/span><br \/>\n   Json<span class=\"token double-colon punctuation\">::<\/span>Reader Read<span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>Read<span class=\"token punctuation\">.<\/span><span class=\"token function\">parse<\/span><span class=\"token punctuation\">(<\/span>buff<span class=\"token punctuation\">,<\/span>res_val<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n     cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;Json \u89e3\u6790\u5931\u8d25&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token punctuation\">}<\/span><\/p>\n<p>   string s <span class=\"token operator\">&#061;<\/span> res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>s <span class=\"token operator\">&#061;&#061;<\/span> BUSY<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n      cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u670d\u52a1\u5668\u7e41\u5fd9&#xff0c;\u8bf7\u7a0d\u540e\u91cd\u8bd5&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token punctuation\">}<\/span><br \/>\n   <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>s<span class=\"token punctuation\">.<\/span><span class=\"token function\">compare<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">)<\/span><span class=\"token operator\">!&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n      cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u67e5\u770b\u9884\u7ea6\u4fe1\u606f\u5931\u8d25&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token punctuation\">}<\/span><\/p>\n<p>   <span class=\"token keyword\">int<\/span> num <span class=\"token operator\">&#061;<\/span> res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;num&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asInt<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>num<span class=\"token operator\">&lt;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u6682\u65f6\u6ca1\u6709\u53ef\u4ee5\u9884\u7ea6\u7684\u4fe1\u606f&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token punctuation\">}<\/span><\/p>\n<p>   cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;|&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8211;|&#8212;&#8212;&#8211;|&#8212;&#8212;&#8211;|&#8212;&#8212;&#8212;&#8212;|&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n   cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;|   \u5e8f\u53f7   |     \u540d\u79f0     | \u603b\u7968\u6570 | \u5df2\u9884\u5b9a |    \u65f6\u95f4    |&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n   cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;|&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8211;|&#8212;&#8212;&#8211;|&#8212;&#8212;&#8211;|&#8212;&#8212;&#8212;&#8212;|&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><\/p>\n<p>   <span class=\"token keyword\">for<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>i<span class=\"token operator\">&lt;<\/span>num<span class=\"token punctuation\">;<\/span>i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;| %8s | %12s | %6s | %6s | %10s |\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n           res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_arr&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_id&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n           res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_arr&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_name&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n           res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_arr&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_max&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n           res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_arr&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_count&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n           res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_arr&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;day_time&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token punctuation\">}<\/span><br \/>\n   cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;|&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8211;|&#8212;&#8212;&#8211;|&#8212;&#8212;&#8211;|&#8212;&#8212;&#8212;&#8212;|&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Yd_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">Show_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u9700\u8981\u9884\u8ba2\u7684\u5e8f\u53f7&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> index<span class=\"token punctuation\">;<\/span><br \/>\n    cin<span class=\"token operator\">&gt;&gt;<\/span>index<span class=\"token punctuation\">;<\/span><br \/>\n    Json<span class=\"token double-colon punctuation\">::<\/span>Value val<span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> Appointment<span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> user_tel<span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_id&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">to_string<\/span><span class=\"token punctuation\">(<\/span>index<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span>conn_fd<span class=\"token punctuation\">,<\/span>val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><span class=\"token function\">strlen<\/span><span class=\"token punctuation\">(<\/span>val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">char<\/span> buff<span class=\"token punctuation\">[<\/span>Length<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">int<\/span> n <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">recv<\/span><span class=\"token punctuation\">(<\/span>conn_fd<span class=\"token punctuation\">,<\/span>buff<span class=\"token punctuation\">,<\/span>Length<span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>n<span class=\"token operator\">&lt;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;ser close&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    Json<span class=\"token double-colon punctuation\">::<\/span>Value res_val<span class=\"token punctuation\">;<\/span><br \/>\n    Json<span class=\"token double-colon punctuation\">::<\/span>Reader Read<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>Read<span class=\"token punctuation\">.<\/span><span class=\"token function\">parse<\/span><span class=\"token punctuation\">(<\/span>buff<span class=\"token punctuation\">,<\/span>res_val<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;Json \u89e3\u6790\u5931\u8d25&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    string s <span class=\"token operator\">&#061;<\/span> res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>s <span class=\"token operator\">&#061;&#061;<\/span> BUSY<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u670d\u52a1\u5668\u7e41\u5fd9&#xff0c;\u8bf7\u7a0d\u540e\u91cd\u8bd5&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>s<span class=\"token punctuation\">.<\/span><span class=\"token function\">compare<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">)<\/span><span class=\"token operator\">!&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u9884\u8ba2\u5931\u8d25&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u9884\u8ba2\u6210\u529f&#xff01;&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Show_My_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n  Json<span class=\"token double-colon punctuation\">::<\/span>Value val<span class=\"token punctuation\">;<\/span><br \/>\n  val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> AppoinMessage<span class=\"token punctuation\">;<\/span><br \/>\n  val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> user_tel<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span>conn_fd<span class=\"token punctuation\">,<\/span>val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><span class=\"token function\">strlen<\/span><span class=\"token punctuation\">(<\/span>val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token keyword\">char<\/span> buff<span class=\"token punctuation\">[<\/span>Length<span class=\"token punctuation\">]<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">{<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">int<\/span> n <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">recv<\/span><span class=\"token punctuation\">(<\/span>conn_fd<span class=\"token punctuation\">,<\/span>buff<span class=\"token punctuation\">,<\/span>Length<span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>n<span class=\"token operator\">&lt;&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;ser close&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  Json<span class=\"token double-colon punctuation\">::<\/span>Value res_val<span class=\"token punctuation\">;<\/span><br \/>\n  Json<span class=\"token double-colon punctuation\">::<\/span>Reader Read<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>Read<span class=\"token punctuation\">.<\/span><span class=\"token function\">parse<\/span><span class=\"token punctuation\">(<\/span>buff<span class=\"token punctuation\">,<\/span>res_val<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n      cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;Json \u89e3\u6790\u5931\u8d25&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n     <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  string s <span class=\"token operator\">&#061;<\/span> res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>s <span class=\"token operator\">&#061;&#061;<\/span> BUSY<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u670d\u52a1\u5668\u7e41\u5fd9&#xff0c;\u8bf7\u7a0d\u540e\u91cd\u8bd5&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>s<span class=\"token punctuation\">.<\/span><span class=\"token function\">compare<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">)<\/span><span class=\"token operator\">!&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u67e5\u770b\u6211\u7684\u9884\u7ea6\u5931\u8d25&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">int<\/span> num <span class=\"token operator\">&#061;<\/span> res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;num&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asInt<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>num <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u60a8\u8fd8\u6ca1\u6709\u9884\u7ea6\u4efb\u4f55\u4fe1\u606f&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p>   cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;|&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8211;|&#8212;&#8212;&#8211;|&#8212;&#8212;&#8211;|&#8212;&#8212;&#8212;&#8212;|&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n   cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;|  \u9884\u7ea6ID  |     \u540d\u79f0     | \u603b\u7968\u6570 | \u5df2\u9884\u5b9a |    \u65f6\u95f4    |&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n   cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;|&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8211;|&#8212;&#8212;&#8211;|&#8212;&#8212;&#8211;|&#8212;&#8212;&#8212;&#8212;|&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><\/p>\n<p>   <span class=\"token keyword\">for<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">int<\/span> i<span class=\"token operator\">&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span>i<span class=\"token operator\">&lt;<\/span>num<span class=\"token punctuation\">;<\/span>i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">printf<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;| %8s | %12s | %6s | %6s | %10s |\\\\n&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n           res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;my_ticket_arr&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;yd_id&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n           res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;my_ticket_arr&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_name&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n           res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;my_ticket_arr&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_max&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n           res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;my_ticket_arr&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;ticket_count&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n           res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;my_ticket_arr&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;day_time&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token punctuation\">}<\/span><br \/>\n   cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;|&#8212;&#8212;&#8212;-|&#8212;&#8212;&#8212;&#8212;&#8211;|&#8212;&#8212;&#8211;|&#8212;&#8212;&#8211;|&#8212;&#8212;&#8212;&#8212;|&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Qx_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">Show_My_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u8bf7\u8f93\u5165\u9700\u8981\u53d6\u6d88\u7684\u9884\u7ea6ID:&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    string yd_id<span class=\"token punctuation\">;<\/span><br \/>\n    cin<span class=\"token operator\">&gt;&gt;<\/span>yd_id<span class=\"token punctuation\">;<\/span><\/p>\n<p>    Json<span class=\"token double-colon punctuation\">::<\/span>Value val<span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> CancelAppoin<span class=\"token punctuation\">;<\/span><br \/>\n    val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> user_tel<span class=\"token punctuation\">;<\/span><br \/>\n   val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;yd_id&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> yd_id<span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token function\">send<\/span><span class=\"token punctuation\">(<\/span>conn_fd<span class=\"token punctuation\">,<\/span>val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><span class=\"token function\">strlen<\/span><span class=\"token punctuation\">(<\/span>val<span class=\"token punctuation\">.<\/span><span class=\"token function\">toStyledString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">c_str<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>   <span class=\"token keyword\">char<\/span> buff<span class=\"token punctuation\">[<\/span>Length<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token keyword\">int<\/span> n <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">recv<\/span><span class=\"token punctuation\">(<\/span>conn_fd<span class=\"token punctuation\">,<\/span>buff<span class=\"token punctuation\">,<\/span>Length<span class=\"token operator\">&#8211;<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>n <span class=\"token operator\">&lt;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;ser close&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token punctuation\">}<\/span><\/p>\n<p>   Json<span class=\"token double-colon punctuation\">::<\/span>Value res_val<span class=\"token punctuation\">;<\/span><br \/>\n   Json<span class=\"token double-colon punctuation\">::<\/span>Reader Read<span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>Read<span class=\"token punctuation\">.<\/span><span class=\"token function\">parse<\/span><span class=\"token punctuation\">(<\/span>buff<span class=\"token punctuation\">,<\/span>res_val<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;Json\u89e3\u6790\u5931\u8d25&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token punctuation\">}<\/span><\/p>\n<p>   string s <span class=\"token operator\">&#061;<\/span> res_val<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">asString<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>s <span class=\"token operator\">&#061;&#061;<\/span> BUSY<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u670d\u52a1\u5668\u7e41\u5fd9&#xff0c;\u8bf7\u7a0d\u540e\u91cd\u8bd5&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token punctuation\">}<\/span><br \/>\n   <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>s<span class=\"token punctuation\">.<\/span><span class=\"token function\">compare<\/span><span class=\"token punctuation\">(<\/span>k<span class=\"token punctuation\">)<\/span><span class=\"token operator\">!&#061;<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u53d6\u6d88\u9884\u7ea6\u5931\u8d25&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">;<\/span><br \/>\n   <span class=\"token punctuation\">}<\/span><\/p>\n<p>   cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u53d6\u6d88\u9884\u7ea6\u6210\u529f&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">void<\/span> <span class=\"token class-name\">Client<\/span><span class=\"token double-colon punctuation\">::<\/span><span class=\"token function\">Run<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">while<\/span><span class=\"token punctuation\">(<\/span>Running<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">Show_Menu<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">int<\/span> tmp<span class=\"token punctuation\">;<\/span><br \/>\n        cin<span class=\"token operator\">&gt;&gt;<\/span>tmp<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>tmp <span class=\"token operator\">&lt;<\/span> Login <span class=\"token operator\">||<\/span> tmp <span class=\"token operator\">&gt;<\/span> Exit<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n            cout<span class=\"token operator\">&lt;&lt;<\/span><span class=\"token string\">&#034;\u8f93\u5165\u9519\u8bef&#034;<\/span><span class=\"token operator\">&lt;&lt;<\/span>endl<span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">continue<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>Dl_Status<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n            tmp <span class=\"token operator\">&#061;<\/span> tmp<span class=\"token operator\">&#043;<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">if<\/span><span class=\"token punctuation\">(<\/span>tmp<span class=\"token operator\">&#061;&#061;<\/span><span class=\"token number\">3<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n            tmp <span class=\"token operator\">&#061;<\/span> Exit<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token keyword\">switch<\/span><span class=\"token punctuation\">(<\/span>tmp<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">case<\/span> Login<span class=\"token operator\">:<\/span><br \/>\n                <span class=\"token function\">User_login<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">case<\/span> Register<span class=\"token operator\">:<\/span><br \/>\n                <span class=\"token function\">User_Register<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">case<\/span> CheckApoint<span class=\"token operator\">:<\/span><br \/>\n                <span class=\"token function\">Show_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">case<\/span> Appointment<span class=\"token operator\">:<\/span><br \/>\n                <span class=\"token function\">Yd_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">case<\/span> AppoinMessage<span class=\"token operator\">:<\/span><br \/>\n                <span class=\"token function\">Show_My_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">case<\/span> CancelAppoin<span class=\"token operator\">:<\/span><br \/>\n                <span class=\"token function\">Qx_Ticket<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token keyword\">case<\/span> Exit<span class=\"token operator\">:<\/span><br \/>\n                Running <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n                <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token keyword\">int<\/span> <span class=\"token function\">main<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">{<\/span><br \/>\n    Client client<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h5>\u6587\u4ef6\u4f5c\u7528<\/h5>\n<p>\u5b9e\u73b0 Client \u7c7b\u6240\u6709\u65b9\u6cd5 &#043; main&#xff08;\u7ea6 410 \u884c&#xff09;\u3002<\/p>\n<h5>\u901a\u4fe1\u534f\u8bae&#xff08;JSON&#xff09;<\/h5>\n<p>\u5ba2\u6237\u7aef\u53d1\u9001&#xff1a;<\/p>\n<p><span class=\"token punctuation\">{<\/span> <span class=\"token string-property property\">&#034;type&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string-property property\">&#034;user_tel&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;&#8230;&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string-property property\">&#034;passwd&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;&#8230;&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string-property property\">&#034;user_name&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;&#8230;&#034;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p>\u670d\u52a1\u7aef\u8fd4\u56de&#xff08;\u6210\u529f&#xff09;&#xff1a;<\/p>\n<p><span class=\"token punctuation\">{<\/span> <span class=\"token string-property property\">&#034;status&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;ok&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string-property property\">&#034;num&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">3<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string-property property\">&#034;ticket_arr&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token operator\">&#8230;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p>\u670d\u52a1\u7aef\u8fd4\u56de&#xff08;\u5931\u8d25&#xff09;&#xff1a;<\/p>\n<p><span class=\"token punctuation\">{<\/span> <span class=\"token string-property property\">&#034;status&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;false&#034;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p>\u670d\u52a1\u7aef\u8fd4\u56de&#xff08;\u6c60\u6ee1&#xff09;&#xff1a;<\/p>\n<p><span class=\"token punctuation\">{<\/span> <span class=\"token string-property property\">&#034;status&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;MYSQL CLIENT BUSSY&#034;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<h5>6 \u4e2a\u4e1a\u52a1\u65b9\u6cd5<\/h5>\n<table>\n<tr>\u65b9\u6cd5type\u6d41\u7a0b<\/tr>\n<tbody>\n<tr>\n<td>User_Register<\/td>\n<td>2<\/td>\n<td>\u8f93\u5165 tel\/name\/passwd \u2192 send \u2192 recv \u2192 BUSY?\/ok?<\/td>\n<\/tr>\n<tr>\n<td>User_login<\/td>\n<td>1<\/td>\n<td>\u540c\u4e0a<\/td>\n<\/tr>\n<tr>\n<td>Show_Ticket<\/td>\n<td>3<\/td>\n<td>\u4e0d\u5e26\u53c2\u6570 \u2192 recv \u5217\u8868 \u2192 \u8868\u683c\u6253\u5370<\/td>\n<\/tr>\n<tr>\n<td>Yd_Ticket<\/td>\n<td>4<\/td>\n<td>\u5148 Show_Ticket \u2192 \u8f93\u5165\u5e8f\u53f7 \u2192 send \u2192 recv<\/td>\n<\/tr>\n<tr>\n<td>Show_My_Ticket<\/td>\n<td>5<\/td>\n<td>\u5e26 user_tel \u2192 recv \u2192 \u8868\u683c<\/td>\n<\/tr>\n<tr>\n<td>Qx_Ticket<\/td>\n<td>6<\/td>\n<td>\u5148 Show_My_Ticket \u2192 \u8f93\u5165 yd_id \u2192 send \u2192 recv<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5>\u83dc\u5355\u903b\u8f91<\/h5>\n<p><span class=\"token keyword\">switch<\/span><span class=\"token punctuation\">(<\/span>tmp<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">case<\/span> Login<span class=\"token operator\">:<\/span> <span class=\"token function\">User_login<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">case<\/span> Register<span class=\"token operator\">:<\/span> <span class=\"token function\">User_Register<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><span class=\"token punctuation\">.<\/span><br \/>\n  <span class=\"token keyword\">case<\/span> Exit<span class=\"token operator\">:<\/span> Running <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">break<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h5>\u8bbe\u8ba1\u4eae\u70b9<\/h5>\n<ul>\n<li>\u7edf\u4e00 BUSY \u68c0\u67e5\u6a21\u677f&#xff1a;6 \u4e2a\u65b9\u6cd5\u90fd\u5148\u5224\u65ad s &#061;&#061; BUSY \u63d0\u793a&#034;\u670d\u52a1\u5668\u7e41\u5fd9&#034;&#xff0c;\u518d\u5224\u65ad s !&#061; k \u63d0\u793a\u5177\u4f53\u5931\u8d25<\/li>\n<li>\u4e1a\u52a1\u65b9\u6cd5\u53ef\u7ec4\u5408&#xff08;Yd_Ticket \u590d\u7528 Show_Ticket&#xff0c;Qx_Ticket \u590d\u7528 Show_My_Ticket&#xff09;<\/li>\n<\/ul>\n<h5>\u4e0d\u8db3<\/h5>\n<ul>\n<li>recv \u963b\u585e&#xff0c;\u65e0\u8d85\u65f6&#xff08;\u670d\u52a1\u7aef\u6302\u8d77\u5ba2\u6237\u7aef\u4f1a\u4e00\u76f4\u7b49&#xff09;<\/li>\n<li>cin &gt;&gt; tmp \u6ca1\u68c0\u67e5\u5931\u8d25\u72b6\u6001&#xff08;\u8f93\u5165\u975e\u6570\u5b57\u4f1a\u9677\u5165\u6b7b\u5faa\u73af&#xff09;<\/li>\n<li>\u8868\u683c\u7528 printf \u786c\u7f16\u7801\u5217\u5bbd&#xff0c;\u957f\u540d\u4f1a\u9519\u4f4d<\/li>\n<li>\u5168\u5c40 enum OP_TYPE \u4e0e\u670d\u52a1\u7aef\u91cd\u590d\u5b9a\u4e49&#xff08;\u5e94\u653e\u5171\u4eab\u5934&#xff09;<\/li>\n<\/ul>\n<hr \/>\n<h4>4.5 Makefile \u2014 \u6784\u5efa\u811a\u672c<\/h4>\n<h5>\u5b8c\u6574\u4ee3\u7801<\/h5>\n<p>all:service client<\/p>\n<p>service:service.cpp<br \/>\ng&#043;&#043; -g -O0 -o service service.cpp -lpthread -lmysqlclient -ljsoncpp<\/p>\n<p>client:client.cpp<br \/>\ng&#043;&#043; -g -O0 -o client client.cpp -lpthread -lmysqlclient -ljsoncpp<\/p>\n<p>clean:<br \/>\nrm -f *.o service client<\/p>\n<h5>\u4f9d\u8d56\u8bf4\u660e<\/h5>\n<table>\n<tr>\u5e93\u7528\u9014<\/tr>\n<tbody>\n<tr>\n<td>-lpthread<\/td>\n<td>pthread_t \/ mutex \/ cond<\/td>\n<\/tr>\n<tr>\n<td>-lmysqlclient<\/td>\n<td>MySQL C API<\/td>\n<\/tr>\n<tr>\n<td>-ljsoncpp<\/td>\n<td>JSON \u89e3\u6790<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5>\u6539\u8fdb\u5efa\u8bae<\/h5>\n<ul>\n<li>\u52a0 -Wall -Wextra \u5f00\u542f\u8b66\u544a<\/li>\n<li>\u52a0 -std&#061;c&#043;&#043;11&#xff08;\u7528\u4e86 auto\u3001nullptr&#xff09;<\/li>\n<li>\u62c6\u5206\u5934\u6587\u4ef6\u540e\u6539\u7528 .o \u4e2d\u95f4\u4ea7\u7269 &#043; \u81ea\u52a8\u4f9d\u8d56<\/li>\n<\/ul>\n<hr \/>\n<h4>4.6 ser_start.sh \u2014 \u542f\u52a8\u811a\u672c<\/h4>\n<h5>\u5b8c\u6574\u4ee3\u7801<\/h5>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-f<\/span> Makefile <span class=\"token punctuation\">]<\/span><br \/>\n<span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token function\">make<\/span> clean<br \/>\n    <span class=\"token function\">make<\/span> all<br \/>\n<span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token function\">service<\/span> <span class=\"token punctuation\">]<\/span><br \/>\n<span class=\"token keyword\">then<\/span><br \/>\n    .\/service service.conf<br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<h5>\u4e0d\u8db3<\/h5>\n<ul>\n<li>\u6ca1\u52a0 set -e&#xff0c;make \u5931\u8d25\u4ecd\u4f1a\u542f\u52a8\u65e7 service<\/li>\n<li>\u6ca1\u4f20 service.conf \u8def\u5f84\u7ed9\u7a0b\u5e8f\u8bfb&#xff08;\u4ee3\u7801\u91cc\u4e5f\u786c\u7f16\u7801\u4e86&#xff09;<\/li>\n<li>\u6ca1\u7528 nohup \u540e\u53f0\u8fd0\u884c &#043; \u65e5\u5fd7\u91cd\u5b9a\u5411<\/li>\n<\/ul>\n<hr \/>\n<h4>4.7 service.conf \u2014 \u670d\u52a1\u7aef\u914d\u7f6e<\/h4>\n<h5>\u5b8c\u6574\u5185\u5bb9<\/h5>\n<p>ip&#061;127.0.0.1<\/p>\n<p>port&#061;8888<\/p>\n<p>lismax&#061;1024<\/p>\n<p>service_conf_path&#061;\/home\/xiaoc\/mycode\/csproject\/service.conf<\/p>\n<h5>\u6ce8\u610f<\/h5>\n<ul>\n<li>service_conf_path \u5b57\u6bb5\u5728\u4ee3\u7801\u91cc\u8d4b\u503c\u7ed9\u5c40\u90e8\u53c2\u6570&#xff0c;\u65e0\u5b9e\u9645\u4f5c\u7528<\/li>\n<li>\u4fee\u6539\u540e\u5fc5\u987b Ctrl&#043;S \u4fdd\u5b58\u78c1\u76d8\u624d\u751f\u6548&#xff08;\u4e4b\u524d IDE \u7f13\u51b2\u533a\u4e0e\u78c1\u76d8\u4e0d\u4e00\u81f4\u95ee\u9898&#xff09;<\/li>\n<\/ul>\n<hr \/>\n<h4>4.8 mysql.conf \u2014 \u6570\u636e\u5e93\u914d\u7f6e<\/h4>\n<h5>\u5b8c\u6574\u5185\u5bb9<\/h5>\n<p>dp_ip&#061;127.0.0.1<\/p>\n<p>dp_port&#061;3306<\/p>\n<p>dp_name&#061;c2411db<\/p>\n<p>dp_mysql_path&#061;\/home\/xiaoc\/mycode\/csproject\/mysql.conf<\/p>\n<h5>\u6ce8\u610f<\/h5>\n<ul>\n<li>dp_mysql_path \u8def\u5f84\u5199\u9519&#xff08;\u5c11\u4e86 \u201c2\u201d&#xff09;&#xff0c;\u4f46\u4ee3\u7801\u91cc\u8d4b\u503c\u7ed9\u5c40\u90e8\u53c2\u6570&#xff0c;\u65e0\u5b9e\u9645\u4f5c\u7528<\/li>\n<li>\u7f3a\u5c11 dp_user \/ dp_password \u5b57\u6bb5&#xff0c;\u5bc6\u7801\u786c\u7f16\u7801\u5728 service.cpp#L787<\/li>\n<\/ul>\n<hr \/>\n<h4>4.9 web\/cp_client.py \u2014 C&#043;&#043; TCP \u670d\u52a1 Python \u5ba2\u6237\u7aef\u5c01\u88c5<\/h4>\n<p>\u5c01\u88c5\u4e0e C&#043;&#043; \u670d\u52a1\u7aef&#xff08;127.0.0.1:9999&#xff09;\u7684 TCP \u901a\u4fe1&#xff0c;\u4e25\u683c\u5bf9\u9f50 C&#043;&#043; JSON \u534f\u8bae\u3002\u6bcf\u4e2a\u4e1a\u52a1\u65b9\u6cd5\u65b0\u5efa\u4e00\u6761 TCP \u8fde\u63a5&#xff1a;\u53d1\u9001\u8bf7\u6c42 \u2192 \u7b49\u5f85\u54cd\u5e94 \u2192 \u5173\u95ed\u8fde\u63a5&#xff0c;\u4e0e\u539f C&#043;&#043; \u5ba2\u6237\u7aef\u884c\u4e3a\u4e00\u81f4\u3002<\/p>\n<h5>\u5b8c\u6574\u4ee3\u7801<\/h5>\n<p><span class=\"token comment\"># -*- coding: utf-8 -*-<\/span><br \/>\n<span class=\"token triple-quoted-string string\">&#034;&#034;&#034;<br \/>\n\u4e0e C&#043;&#043; \u9884\u7ea6\u7cfb\u7edf\u670d\u52a1\u7aef (127.0.0.1:9999) \u901a\u4fe1\u7684\u5ba2\u6237\u7aef\u5c01\u88c5\u3002<\/p>\n<p>C&#043;&#043; \u670d\u52a1\u7aef\u534f\u8bae (JSON over TCP)&#xff1a;<br \/>\n    \u8bf7\u6c42\u5b57\u6bb5&#xff1a;<br \/>\n        &#8211; type:        \u64cd\u4f5c\u7c7b\u578b (1&#061;Login,2&#061;Register,3&#061;CheckApoint,<br \/>\n                                  4&#061;Appointment,5&#061;AppoinMessage,6&#061;CancelAppoin)<br \/>\n        &#8211; user_tel:    \u624b\u673a\u53f7<br \/>\n        &#8211; user_name:   \u7528\u6237\u540d<br \/>\n        &#8211; passwd:      \u5bc6\u7801<br \/>\n        &#8211; ticket_id:   \u7968 id (\u5b57\u7b26\u4e32)<br \/>\n        &#8211; yd_id:       \u9884\u7ea6 id (\u5b57\u7b26\u4e32)<br \/>\n    \u54cd\u5e94\u5b57\u6bb5&#xff1a;<br \/>\n        &#8211; status:      &#034;ok&#034; \/ &#034;false&#034; \/ &#034;MYSQL CLIENT BUSSY&#034;<br \/>\n        &#8211; num:         \u8bb0\u5f55\u6570 (\u67e5\u8be2\u7c7b)<br \/>\n        &#8211; ticket_arr:  \u7968\u6570\u7ec4 (\u67e5\u770b\u53ef\u9884\u7ea6)<br \/>\n        &#8211; my_ticket_arr: \u6211\u7684\u9884\u7ea6\u6570\u7ec4<br \/>\n&#034;&#034;&#034;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> socket<br \/>\n<span class=\"token keyword\">import<\/span> json<br \/>\n<span class=\"token keyword\">import<\/span> time<\/p>\n<p><span class=\"token comment\"># \u4e0e C&#043;&#043; \u7aef enum OP_TYPE \u5b8c\u5168\u4e00\u81f4<\/span><br \/>\nOP_LOGIN <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">1<\/span><br \/>\nOP_REGISTER <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">2<\/span><br \/>\nOP_CHECK_APOINT <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">3<\/span><br \/>\nOP_APPOINTMENT <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">4<\/span><br \/>\nOP_APPOIN_MESSAGE <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">5<\/span><br \/>\nOP_CANCEL_APPOIN <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">6<\/span><\/p>\n<p><span class=\"token comment\"># \u72b6\u6001\u7801\u5e38\u91cf<\/span><br \/>\nSTATUS_OK <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;ok&#034;<\/span><br \/>\nSTATUS_FALSE <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;false&#034;<\/span><br \/>\nSTATUS_BUSY <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;MYSQL CLIENT BUSSY&#034;<\/span><\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">CPClientError<\/span><span class=\"token punctuation\">(<\/span>Exception<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u4e0e C&#043;&#043; \u670d\u52a1\u901a\u4fe1\u76f8\u5173\u7684\u5f02\u5e38&#034;&#034;&#034;<\/span><\/p>\n<p><span class=\"token keyword\">class<\/span> <span class=\"token class-name\">CPClient<\/span><span class=\"token punctuation\">(<\/span><span class=\"token builtin\">object<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u5bf9 C&#043;&#043; \u9884\u7ea6\u7cfb\u7edf\u670d\u52a1\u7aef\u7684\u8f7b\u91cf TCP \u5ba2\u6237\u7aef\u3002<\/p>\n<p>    \u6bcf\u4e2a\u4e1a\u52a1\u65b9\u6cd5\u90fd\u4f1a\u65b0\u5efa\u4e00\u6761 TCP \u8fde\u63a5&#xff1a;\u53d1\u9001\u8bf7\u6c42 -&gt; \u7b49\u5f85\u54cd\u5e94 -&gt; \u5173\u95ed\u8fde\u63a5\u3002<br \/>\n    \u8fd9\u4e0e\u539f C&#043;&#043; \u5ba2\u6237\u7aef\u884c\u4e3a\u4e00\u81f4&#xff0c;\u4e5f\u907f\u514d\u957f\u8fde\u63a5\u72b6\u6001\u7ba1\u7406\u95ee\u9898\u3002<br \/>\n    &#034;&#034;&#034;<\/span><\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">__init__<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> host<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;127.0.0.1&#034;<\/span><span class=\"token punctuation\">,<\/span> port<span class=\"token operator\">&#061;<\/span><span class=\"token number\">9999<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                 connect_timeout<span class=\"token operator\">&#061;<\/span><span class=\"token number\">3.0<\/span><span class=\"token punctuation\">,<\/span> recv_timeout<span class=\"token operator\">&#061;<\/span><span class=\"token number\">5.0<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        self<span class=\"token punctuation\">.<\/span>host <span class=\"token operator\">&#061;<\/span> host<br \/>\n        self<span class=\"token punctuation\">.<\/span>port <span class=\"token operator\">&#061;<\/span> port<br \/>\n        self<span class=\"token punctuation\">.<\/span>connect_timeout <span class=\"token operator\">&#061;<\/span> connect_timeout<br \/>\n        self<span class=\"token punctuation\">.<\/span>recv_timeout <span class=\"token operator\">&#061;<\/span> recv_timeout<\/p>\n<p>    <span class=\"token comment\"># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; \u5e95\u5c42<\/span><br \/>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">_round_trip<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> req_obj<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u53d1\u9001\u4e00\u4e2a JSON \u8bf7\u6c42\u5e76\u63a5\u6536\u5b8c\u6574 JSON \u54cd\u5e94\u3002<\/p>\n<p>        \u8fd4\u56de\u89e3\u6790\u540e\u7684 dict\u3002\u82e5\u8fde\u63a5\u5931\u8d25\u3001\u8d85\u65f6\u6216 JSON \u89e3\u6790\u5931\u8d25&#xff0c;\u629b CPClientError\u3002<br \/>\n        &#034;&#034;&#034;<\/span><br \/>\n        payload <span class=\"token operator\">&#061;<\/span> json<span class=\"token punctuation\">.<\/span>dumps<span class=\"token punctuation\">(<\/span>req_obj<span class=\"token punctuation\">,<\/span> ensure_ascii<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        data <span class=\"token operator\">&#061;<\/span> payload<span class=\"token punctuation\">.<\/span>encode<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;utf-8&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token comment\"># C&#043;&#043; \u670d\u52a1\u7aef\u7528 buff[MAXLINE&#061;256] recv&#xff0c;\u8bf7\u6c42\u8d85\u957f\u4f1a\u88ab\u622a\u65ad\u5bfc\u81f4\u89e3\u6790\u5931\u8d25<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&gt;&#061;<\/span> <span class=\"token number\">256<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">raise<\/span> CPClientError<span class=\"token punctuation\">(<\/span><br \/>\n                <span class=\"token string\">&#034;\u8bf7\u6c42\u8fc7\u957f (%d \u5b57\u8282)&#xff0c;C&#043;&#043; \u670d\u52a1\u7aef MAXLINE&#061;256&#xff0c;\u8bf7\u7f29\u77ed\u8f93\u5165&#034;<\/span> <span class=\"token operator\">%<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            sock <span class=\"token operator\">&#061;<\/span> socket<span class=\"token punctuation\">.<\/span>socket<span class=\"token punctuation\">(<\/span>socket<span class=\"token punctuation\">.<\/span>AF_INET<span class=\"token punctuation\">,<\/span> socket<span class=\"token punctuation\">.<\/span>SOCK_STREAM<span class=\"token punctuation\">)<\/span><br \/>\n            sock<span class=\"token punctuation\">.<\/span>settimeout<span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">.<\/span>connect_timeout<span class=\"token punctuation\">)<\/span><br \/>\n            sock<span class=\"token punctuation\">.<\/span>connect<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">.<\/span>host<span class=\"token punctuation\">,<\/span> self<span class=\"token punctuation\">.<\/span>port<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">except<\/span> socket<span class=\"token punctuation\">.<\/span>error <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">raise<\/span> CPClientError<span class=\"token punctuation\">(<\/span><br \/>\n                <span class=\"token string\">&#034;\u65e0\u6cd5\u8fde\u63a5 C&#043;&#043; \u670d\u52a1 %s:%d&#xff0c;\u8bf7\u786e\u8ba4 .\/service \u5df2\u542f\u52a8 (%s)&#034;<\/span><br \/>\n                <span class=\"token operator\">%<\/span> <span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">.<\/span>host<span class=\"token punctuation\">,<\/span> self<span class=\"token punctuation\">.<\/span>port<span class=\"token punctuation\">,<\/span> e<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            sock<span class=\"token punctuation\">.<\/span>settimeout<span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">.<\/span>recv_timeout<span class=\"token punctuation\">)<\/span><br \/>\n            sock<span class=\"token punctuation\">.<\/span>sendall<span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">)<\/span><\/p>\n<p>            chunks <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n            total <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><br \/>\n            <span class=\"token comment\"># \u5faa\u73af recv&#xff0c;\u76f4\u5230\u62ff\u5230\u5b8c\u6574 JSON \u6216\u8fde\u63a5\u5173\u95ed\/\u8d85\u65f6<\/span><br \/>\n            <span class=\"token comment\"># \u670d\u52a1\u7aef\u54cd\u5e94\u662f toStyledString&#xff0c;\u53ef\u80fd\u5927\u4e8e\u4e00\u4e2a TCP \u62a5\u6587<\/span><br \/>\n            <span class=\"token keyword\">while<\/span> <span class=\"token boolean\">True<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                    chunk <span class=\"token operator\">&#061;<\/span> sock<span class=\"token punctuation\">.<\/span>recv<span class=\"token punctuation\">(<\/span><span class=\"token number\">4096<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">except<\/span> socket<span class=\"token punctuation\">.<\/span>timeout<span class=\"token punctuation\">:<\/span><br \/>\n                    <span class=\"token comment\"># \u63a5\u6536\u7a7a\u95f2&#xff0c;\u5c1d\u8bd5\u89e3\u6790\u5df2\u6536\u5230\u7684\u6570\u636e<\/span><br \/>\n                    <span class=\"token keyword\">break<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> chunk<span class=\"token punctuation\">:<\/span><br \/>\n                    <span class=\"token comment\"># \u5bf9\u7aef\u5173\u95ed&#xff0c;\u7ed3\u675f\u63a5\u6536<\/span><br \/>\n                    <span class=\"token keyword\">break<\/span><br \/>\n                chunks<span class=\"token punctuation\">.<\/span>append<span class=\"token punctuation\">(<\/span>chunk<span class=\"token punctuation\">)<\/span><br \/>\n                total <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>chunk<span class=\"token punctuation\">)<\/span><\/p>\n<p>                <span class=\"token comment\"># \u5c1d\u8bd5\u89e3\u6790&#xff0c;\u6210\u529f\u5219\u63d0\u524d\u7ed3\u675f<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> self<span class=\"token punctuation\">.<\/span>_try_parse<span class=\"token punctuation\">(<\/span>chunks<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">is<\/span> <span class=\"token keyword\">not<\/span> <span class=\"token boolean\">None<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                    <span class=\"token keyword\">break<\/span><\/p>\n<p>                <span class=\"token comment\"># \u9632\u5fa1\u6027\u4e0a\u9650&#xff0c;\u907f\u514d\u5f02\u5e38\u60c5\u51b5\u4e0b\u65e0\u9650\u589e\u957f<\/span><br \/>\n                <span class=\"token keyword\">if<\/span> total <span class=\"token operator\">&gt;&#061;<\/span> <span class=\"token number\">64<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">1024<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                    <span class=\"token keyword\">break<\/span><\/p>\n<p>            raw <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">b&#034;&#034;<\/span><span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>chunks<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> raw<span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">raise<\/span> CPClientError<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;C&#043;&#043; \u670d\u52a1\u672a\u8fd4\u56de\u4efb\u4f55\u6570\u636e&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>            parsed <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>_try_parse<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span>raw<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> parsed <span class=\"token keyword\">is<\/span> <span class=\"token boolean\">None<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">raise<\/span> CPClientError<span class=\"token punctuation\">(<\/span><br \/>\n                    <span class=\"token string\">&#034;C&#043;&#043; \u670d\u52a1\u8fd4\u56de\u7684\u4e0d\u662f\u6709\u6548 JSON&#xff1a;%r&#034;<\/span> <span class=\"token operator\">%<\/span> raw<span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">:<\/span><span class=\"token number\">200<\/span><span class=\"token punctuation\">]<\/span><br \/>\n                <span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> parsed<br \/>\n        <span class=\"token keyword\">finally<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                sock<span class=\"token punctuation\">.<\/span>close<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">except<\/span> Exception<span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">pass<\/span><\/p>\n<p>    <span class=\"token decorator annotation punctuation\">&#064;staticmethod<\/span><br \/>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">_try_parse<\/span><span class=\"token punctuation\">(<\/span>chunks<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            text <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">b&#034;&#034;<\/span><span class=\"token punctuation\">.<\/span>join<span class=\"token punctuation\">(<\/span>chunks<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>decode<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;utf-8&#034;<\/span><span class=\"token punctuation\">,<\/span> errors<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;strict&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> json<span class=\"token punctuation\">.<\/span>loads<span class=\"token punctuation\">(<\/span>text<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">except<\/span> <span class=\"token punctuation\">(<\/span>ValueError<span class=\"token punctuation\">,<\/span> UnicodeDecodeError<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">None<\/span><\/p>\n<p>    <span class=\"token comment\"># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; \u4e1a\u52a1\u65b9\u6cd5<\/span><br \/>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">register<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> user_tel<span class=\"token punctuation\">,<\/span> user_name<span class=\"token punctuation\">,<\/span> passwd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u7528\u6237\u6ce8\u518c&#034;&#034;&#034;<\/span><br \/>\n        resp <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>_round_trip<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">:<\/span> OP_REGISTER<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">:<\/span> user_tel<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;user_name&#034;<\/span><span class=\"token punctuation\">:<\/span> user_name<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;passwd&#034;<\/span><span class=\"token punctuation\">:<\/span> passwd<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> self<span class=\"token punctuation\">.<\/span>_normalize_status<span class=\"token punctuation\">(<\/span>resp<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> resp<\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">login<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> user_tel<span class=\"token punctuation\">,<\/span> user_name<span class=\"token punctuation\">,<\/span> passwd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u7528\u6237\u767b\u5f55&#034;&#034;&#034;<\/span><br \/>\n        resp <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>_round_trip<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">:<\/span> OP_LOGIN<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">:<\/span> user_tel<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;user_name&#034;<\/span><span class=\"token punctuation\">:<\/span> user_name<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;passwd&#034;<\/span><span class=\"token punctuation\">:<\/span> passwd<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> self<span class=\"token punctuation\">.<\/span>_normalize_status<span class=\"token punctuation\">(<\/span>resp<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> resp<\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">show_tickets<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u67e5\u770b\u53ef\u9884\u7ea6\u7684\u7968\u5217\u8868&#034;&#034;&#034;<\/span><br \/>\n        resp <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>_round_trip<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">:<\/span> OP_CHECK_APOINT<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> self<span class=\"token punctuation\">.<\/span>_normalize_status<span class=\"token punctuation\">(<\/span>resp<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> resp<\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">appoint<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> user_tel<span class=\"token punctuation\">,<\/span> ticket_id<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u9884\u5b9a\u4e00\u5f20\u7968&#034;&#034;&#034;<\/span><br \/>\n        resp <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>_round_trip<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">:<\/span> OP_APPOINTMENT<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">:<\/span> user_tel<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;ticket_id&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>ticket_id<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> self<span class=\"token punctuation\">.<\/span>_normalize_status<span class=\"token punctuation\">(<\/span>resp<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> resp<\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">show_my_tickets<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> user_tel<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u67e5\u770b\u6211\u7684\u9884\u7ea6&#034;&#034;&#034;<\/span><br \/>\n        resp <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>_round_trip<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">:<\/span> OP_APPOIN_MESSAGE<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">:<\/span> user_tel<span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> self<span class=\"token punctuation\">.<\/span>_normalize_status<span class=\"token punctuation\">(<\/span>resp<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> resp<\/p>\n<p>    <span class=\"token keyword\">def<\/span> <span class=\"token function\">cancel<\/span><span class=\"token punctuation\">(<\/span>self<span class=\"token punctuation\">,<\/span> user_tel<span class=\"token punctuation\">,<\/span> yd_id<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u53d6\u6d88\u9884\u7ea6&#034;&#034;&#034;<\/span><br \/>\n        resp <span class=\"token operator\">&#061;<\/span> self<span class=\"token punctuation\">.<\/span>_round_trip<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;type&#034;<\/span><span class=\"token punctuation\">:<\/span> OP_CANCEL_APPOIN<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">:<\/span> user_tel<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;yd_id&#034;<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>yd_id<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> self<span class=\"token punctuation\">.<\/span>_normalize_status<span class=\"token punctuation\">(<\/span>resp<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> resp<\/p>\n<p>    <span class=\"token comment\"># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; \u8f85\u52a9<\/span><br \/>\n    <span class=\"token decorator annotation punctuation\">&#064;staticmethod<\/span><br \/>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">_normalize_status<\/span><span class=\"token punctuation\">(<\/span>resp<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u628a\u670d\u52a1\u7aef status \u5b57\u6bb5\u5f52\u4e00\u5316\u4e3a (ok\/false\/busy) \u5b57\u7b26\u4e32&#034;&#034;&#034;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> <span class=\"token builtin\">isinstance<\/span><span class=\"token punctuation\">(<\/span>resp<span class=\"token punctuation\">,<\/span> <span class=\"token builtin\">dict<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> STATUS_FALSE<br \/>\n        status <span class=\"token operator\">&#061;<\/span> resp<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> status <span class=\"token operator\">&#061;&#061;<\/span> STATUS_OK<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> STATUS_OK<br \/>\n        <span class=\"token keyword\">if<\/span> status <span class=\"token operator\">&#061;&#061;<\/span> STATUS_BUSY<span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> STATUS_BUSY<br \/>\n        <span class=\"token comment\"># false \u6216\u5176\u5b83\u90fd\u89c6\u4e3a\u5931\u8d25<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> STATUS_FALSE<\/p>\n<p><span class=\"token keyword\">if<\/span> __name__ <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;__main__&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token comment\"># \u81ea\u6d4b&#xff1a;\u76f4\u63a5\u8fd0\u884c\u4f1a\u5c1d\u8bd5\u8fde\u670d\u52a1<\/span><br \/>\n    c <span class=\"token operator\">&#061;<\/span> CPClient<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        ok<span class=\"token punctuation\">,<\/span> resp <span class=\"token operator\">&#061;<\/span> c<span class=\"token punctuation\">.<\/span>show_tickets<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;show_tickets -&gt;&#034;<\/span><span class=\"token punctuation\">,<\/span> ok<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span>json<span class=\"token punctuation\">.<\/span>dumps<span class=\"token punctuation\">(<\/span>resp<span class=\"token punctuation\">,<\/span> ensure_ascii<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> indent<span class=\"token operator\">&#061;<\/span><span class=\"token number\">2<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">except<\/span> CPClientError <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ERR:&#034;<\/span><span class=\"token punctuation\">,<\/span> e<span class=\"token punctuation\">)<\/span><\/p>\n<h5>\u6587\u4ef6\u4f5c\u7528<\/h5>\n<p>\u6865\u63a5 Flask \u540e\u7aef\u4e0e C&#043;&#043; TCP \u670d\u52a1\u3002\u628a Web \u5c42\u7684 HTTP \u8bf7\u6c42\u7ffb\u8bd1\u6210 C&#043;&#043; \u670d\u52a1\u7aef\u80fd\u7406\u89e3\u7684 JSON-over-TCP \u534f\u8bae&#xff0c;\u5e76\u628a C&#043;&#043; \u8fd4\u56de\u7684 status \u5b57\u6bb5\u5f52\u4e00\u5316\u4e3a ok\/false\/busy\u3002<\/p>\n<h5>\u5173\u952e\u8bbe\u8ba1<\/h5>\n<ul>\n<li>type \u6574\u6570\u5e38\u91cf&#xff1a;\u4e0e C&#043;&#043; enum OP_TYPE \u4e00\u4e00\u5bf9\u5e94<\/li>\n<li>\u5faa\u73af recv &#043; \u5373\u65f6\u89e3\u6790&#xff1a;\u89e3\u51b3 C&#043;&#043; toStyledString \u54cd\u5e94\u53ef\u80fd\u8de8\u591a\u4e2a TCP \u62a5\u6587\u7684\u95ee\u9898&#xff08;\u6bd4\u539f C&#043;&#043; \u5ba2\u6237\u7aef\u5355\u6b21 recv \u66f4\u5065\u58ee&#xff09;<\/li>\n<li>\u8bf7\u6c42\u957f\u5ea6\u68c0\u67e5&#xff1a;C&#043;&#043; \u7aef MAXLINE&#061;256&#xff0c;\u8d85\u957f\u8bf7\u6c42\u4f1a\u5728 Python \u7aef\u76f4\u63a5\u62d2\u7edd&#xff0c;\u907f\u514d C&#043;&#043; \u7aef\u622a\u65ad\u540e parse \u5931\u8d25<\/li>\n<li>finally \u5173\u95ed socket&#xff1a;\u4fdd\u8bc1\u8fde\u63a5\u4e0d\u6cc4\u6f0f<\/li>\n<\/ul>\n<hr \/>\n<h4>4.10 web\/app.py \u2014 Flask Web \u540e\u7aef<\/h4>\n<p>\u63d0\u4f9b 9 \u4e2a\u8def\u7531&#xff1a;2 \u4e2a\u9875\u9762&#xff08;\u767b\u5f55\u9875\u3001\u4e3b\u9875&#xff09;&#043; 1 \u4e2a\u767b\u51fa &#043; 6 \u4e2a JSON API\u3002\u7528 Flask session \u7ef4\u6301\u767b\u5f55\u6001&#xff0c;\u901a\u8fc7 CPClient \u8f6c\u53d1\u8bf7\u6c42\u5230 C&#043;&#043; \u670d\u52a1\u3002<\/p>\n<h5>\u5b8c\u6574\u4ee3\u7801<\/h5>\n<p><span class=\"token comment\"># -*- coding: utf-8 -*-<\/span><br \/>\n<span class=\"token triple-quoted-string string\">&#034;&#034;&#034;<br \/>\n\u9884\u7ea6\u7cfb\u7edf Web \u53ef\u89c6\u5316\u754c\u9762 &#8211; Flask \u540e\u7aef<\/p>\n<p>\u804c\u8d23&#xff1a;<br \/>\n  1. \u63d0\u4f9b\u7f51\u9875 (templates\/&#8230;)<br \/>\n  2. \u63d0\u4f9b JSON API&#xff0c;\u8f6c\u53d1\u5230 C&#043;&#043; TCP \u670d\u52a1 (127.0.0.1:9999)<br \/>\n  3. \u7528 Flask session \u7ef4\u6301\u767b\u5f55\u6001<\/p>\n<p>\u542f\u52a8&#xff1a;<br \/>\n    python3 app.py<br \/>\n    \u6216: .\/start.sh<br \/>\n\u9ed8\u8ba4\u76d1\u542c 0.0.0.0:5000&#xff0c;\u6d4f\u89c8\u5668\u8bbf\u95ee http:\/\/localhost:5000<br \/>\n&#034;&#034;&#034;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> os<br \/>\n<span class=\"token keyword\">import<\/span> functools<\/p>\n<p><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> <span class=\"token punctuation\">(<\/span>Flask<span class=\"token punctuation\">,<\/span> render_template<span class=\"token punctuation\">,<\/span> request<span class=\"token punctuation\">,<\/span> session<span class=\"token punctuation\">,<\/span><br \/>\n                   jsonify<span class=\"token punctuation\">,<\/span> redirect<span class=\"token punctuation\">,<\/span> url_for<span class=\"token punctuation\">,<\/span> abort<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">from<\/span> cp_client <span class=\"token keyword\">import<\/span> CPClient<span class=\"token punctuation\">,<\/span> CPClientError<span class=\"token punctuation\">,<\/span> STATUS_OK<span class=\"token punctuation\">,<\/span> STATUS_BUSY<\/p>\n<p>app <span class=\"token operator\">&#061;<\/span> Flask<span class=\"token punctuation\">(<\/span>__name__<span class=\"token punctuation\">)<\/span><br \/>\napp<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;SECRET_KEY&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> os<span class=\"token punctuation\">.<\/span>environ<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><br \/>\n    <span class=\"token string\">&#034;APPOINT_SECRET_KEY&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;dev-secret-please-change-in-prod&#034;<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># C&#043;&#043; \u670d\u52a1\u5730\u5740&#xff0c;\u53ef\u6309\u9700\u901a\u8fc7\u73af\u5883\u53d8\u91cf\u8986\u76d6<\/span><br \/>\nCP_HOST <span class=\"token operator\">&#061;<\/span> os<span class=\"token punctuation\">.<\/span>environ<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;CP_HOST&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;127.0.0.1&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\nCP_PORT <span class=\"token operator\">&#061;<\/span> <span class=\"token builtin\">int<\/span><span class=\"token punctuation\">(<\/span>os<span class=\"token punctuation\">.<\/span>environ<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;CP_PORT&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;9999&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>cp <span class=\"token operator\">&#061;<\/span> CPClient<span class=\"token punctuation\">(<\/span>host<span class=\"token operator\">&#061;<\/span>CP_HOST<span class=\"token punctuation\">,<\/span> port<span class=\"token operator\">&#061;<\/span>CP_PORT<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; \u5de5\u5177<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">login_required<\/span><span class=\"token punctuation\">(<\/span>view<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u8981\u6c42\u5df2\u767b\u5f55\u624d\u80fd\u8bbf\u95ee\u7684\u89c6\u56fe\u88c5\u9970\u5668&#034;&#034;&#034;<\/span><br \/>\n    <span class=\"token decorator annotation punctuation\">&#064;functools<span class=\"token punctuation\">.<\/span>wraps<\/span><span class=\"token punctuation\">(<\/span>view<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">def<\/span> <span class=\"token function\">wrapped<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">*<\/span>args<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">**<\/span>kwargs<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> session<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n            <span class=\"token comment\"># AJAX \u8bf7\u6c42\u8fd4\u56de 401&#xff0c;\u6d4f\u89c8\u5668\u8bf7\u6c42\u91cd\u5b9a\u5411\u5230\u767b\u5f55\u9875<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> request<span class=\"token punctuation\">.<\/span>path<span class=\"token punctuation\">.<\/span>startswith<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/api\/&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n                <span class=\"token keyword\">return<\/span> jsonify<span class=\"token punctuation\">(<\/span>ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> msg<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u8bf7\u5148\u767b\u5f55&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">401<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> redirect<span class=\"token punctuation\">(<\/span>url_for<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;login&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> view<span class=\"token punctuation\">(<\/span><span class=\"token operator\">*<\/span>args<span class=\"token punctuation\">,<\/span> <span class=\"token operator\">**<\/span>kwargs<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> wrapped<\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">api_err<\/span><span class=\"token punctuation\">(<\/span>msg<span class=\"token punctuation\">,<\/span> status<span class=\"token operator\">&#061;<\/span><span class=\"token number\">400<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> jsonify<span class=\"token punctuation\">(<\/span>ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> msg<span class=\"token operator\">&#061;<\/span>msg<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> status<\/p>\n<p><span class=\"token keyword\">def<\/span> <span class=\"token function\">api_busy<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> jsonify<span class=\"token punctuation\">(<\/span>ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> msg<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u670d\u52a1\u5668\u7e41\u5fd9&#xff0c;\u8bf7\u7a0d\u540e\u91cd\u8bd5&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">503<\/span><\/p>\n<p><span class=\"token comment\"># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; \u9875\u9762<\/span><br \/>\n<span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">index<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u4e3b\u9875&#xff1a;\u672a\u767b\u5f55\u8df3\u767b\u5f55\u9875&#xff1b;\u5df2\u767b\u5f55\u6e32\u67d3\u4e3b\u754c\u9762&#034;&#034;&#034;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> session<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> redirect<span class=\"token punctuation\">(<\/span>url_for<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;login&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> render_template<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;index.html&#034;<\/span><span class=\"token punctuation\">,<\/span> user_name<span class=\"token operator\">&#061;<\/span>session<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;user_name&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/login&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">login<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u767b\u5f55 \/ \u6ce8\u518c\u9875&#034;&#034;&#034;<\/span><br \/>\n    <span class=\"token comment\"># \u5df2\u767b\u5f55\u76f4\u63a5\u8fdb\u4e3b\u9875<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> session<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> redirect<span class=\"token punctuation\">(<\/span>url_for<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;index&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> render_template<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;login.html&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/logout&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;POST&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">logout<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    session<span class=\"token punctuation\">.<\/span>clear<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> jsonify<span class=\"token punctuation\">(<\/span>ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; API<\/span><br \/>\n<span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/api\/register&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;POST&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">api_register<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    data <span class=\"token operator\">&#061;<\/span> request<span class=\"token punctuation\">.<\/span>get_json<span class=\"token punctuation\">(<\/span>silent<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    tel <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>strip<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    name <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;user_name&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>strip<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    passwd <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;passwd&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>strip<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> <span class=\"token punctuation\">(<\/span>tel <span class=\"token keyword\">and<\/span> name <span class=\"token keyword\">and<\/span> passwd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u624b\u673a\u53f7\u3001\u7528\u6237\u540d\u3001\u5bc6\u7801\u90fd\u4e0d\u80fd\u4e3a\u7a7a&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token builtin\">len<\/span><span class=\"token punctuation\">(<\/span>passwd<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">4<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5bc6\u7801\u81f3\u5c11 4 \u4f4d&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        status<span class=\"token punctuation\">,<\/span> resp <span class=\"token operator\">&#061;<\/span> cp<span class=\"token punctuation\">.<\/span>register<span class=\"token punctuation\">(<\/span>tel<span class=\"token punctuation\">,<\/span> name<span class=\"token punctuation\">,<\/span> passwd<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">except<\/span> CPClientError <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">502<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> status <span class=\"token operator\">&#061;&#061;<\/span> STATUS_BUSY<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_busy<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> status <span class=\"token operator\">!&#061;<\/span> STATUS_OK<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6ce8\u518c\u5931\u8d25&#xff0c;\u8be5\u624b\u673a\u53f7\u53ef\u80fd\u5df2\u5b58\u5728&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token comment\"># \u6ce8\u518c\u6210\u529f\u540e\u89c6\u4f5c\u5df2\u767b\u5f55&#xff08;\u4e0e C&#043;&#043; \u5ba2\u6237\u7aef\u884c\u4e3a\u4e00\u81f4&#xff09;<\/span><br \/>\n    session<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> tel<br \/>\n    session<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_name&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> name<br \/>\n    <span class=\"token keyword\">return<\/span> jsonify<span class=\"token punctuation\">(<\/span>ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> msg<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u6ce8\u518c\u6210\u529f&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/api\/login&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;POST&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">api_login<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    data <span class=\"token operator\">&#061;<\/span> request<span class=\"token punctuation\">.<\/span>get_json<span class=\"token punctuation\">(<\/span>silent<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    tel <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>strip<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    name <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;user_name&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>strip<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    passwd <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;passwd&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>strip<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> <span class=\"token punctuation\">(<\/span>tel <span class=\"token keyword\">and<\/span> name <span class=\"token keyword\">and<\/span> passwd<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u624b\u673a\u53f7\u3001\u7528\u6237\u540d\u3001\u5bc6\u7801\u90fd\u4e0d\u80fd\u4e3a\u7a7a&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        status<span class=\"token punctuation\">,<\/span> resp <span class=\"token operator\">&#061;<\/span> cp<span class=\"token punctuation\">.<\/span>login<span class=\"token punctuation\">(<\/span>tel<span class=\"token punctuation\">,<\/span> name<span class=\"token punctuation\">,<\/span> passwd<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">except<\/span> CPClientError <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">502<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> status <span class=\"token operator\">&#061;&#061;<\/span> STATUS_BUSY<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_busy<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> status <span class=\"token operator\">!&#061;<\/span> STATUS_OK<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7528\u6237\u540d\u6216\u5bc6\u7801\u9519\u8bef&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    session<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> tel<br \/>\n    session<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_name&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> name<br \/>\n    <span class=\"token keyword\">return<\/span> jsonify<span class=\"token punctuation\">(<\/span>ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> msg<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u767b\u5f55\u6210\u529f&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/api\/tickets&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;GET&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token decorator annotation punctuation\">&#064;login_required<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">api_tickets<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u67e5\u770b\u53ef\u9884\u7ea6\u7684\u7968&#034;&#034;&#034;<\/span><br \/>\n    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        status<span class=\"token punctuation\">,<\/span> resp <span class=\"token operator\">&#061;<\/span> cp<span class=\"token punctuation\">.<\/span>show_tickets<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">except<\/span> CPClientError <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">502<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> status <span class=\"token operator\">&#061;&#061;<\/span> STATUS_BUSY<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_busy<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> status <span class=\"token operator\">!&#061;<\/span> STATUS_OK<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u67e5\u770b\u9884\u7ea6\u4fe1\u606f\u5931\u8d25&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    num <span class=\"token operator\">&#061;<\/span> resp<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;num&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    arr <span class=\"token operator\">&#061;<\/span> resp<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ticket_arr&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> jsonify<span class=\"token punctuation\">(<\/span>ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> num<span class=\"token operator\">&#061;<\/span>num<span class=\"token punctuation\">,<\/span> tickets<span class=\"token operator\">&#061;<\/span>arr<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/api\/appoint&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;POST&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token decorator annotation punctuation\">&#064;login_required<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">api_appoint<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u9884\u5b9a\u4e00\u5f20\u7968&#034;&#034;&#034;<\/span><br \/>\n    data <span class=\"token operator\">&#061;<\/span> request<span class=\"token punctuation\">.<\/span>get_json<span class=\"token punctuation\">(<\/span>silent<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    ticket_id <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;ticket_id&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>strip<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> ticket_id<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7f3a\u5c11 ticket_id&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        status<span class=\"token punctuation\">,<\/span> resp <span class=\"token operator\">&#061;<\/span> cp<span class=\"token punctuation\">.<\/span>appoint<span class=\"token punctuation\">(<\/span>session<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> ticket_id<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">except<\/span> CPClientError <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">502<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> status <span class=\"token operator\">&#061;&#061;<\/span> STATUS_BUSY<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_busy<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> status <span class=\"token operator\">!&#061;<\/span> STATUS_OK<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u9884\u5b9a\u5931\u8d25&#xff0c;\u7968\u6570\u53ef\u80fd\u5df2\u6ee1&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> jsonify<span class=\"token punctuation\">(<\/span>ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> msg<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u9884\u5b9a\u6210\u529f&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/api\/my_tickets&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;GET&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token decorator annotation punctuation\">&#064;login_required<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">api_my_tickets<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u67e5\u770b\u6211\u7684\u9884\u7ea6&#034;&#034;&#034;<\/span><br \/>\n    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        status<span class=\"token punctuation\">,<\/span> resp <span class=\"token operator\">&#061;<\/span> cp<span class=\"token punctuation\">.<\/span>show_my_tickets<span class=\"token punctuation\">(<\/span>session<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">except<\/span> CPClientError <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">502<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> status <span class=\"token operator\">&#061;&#061;<\/span> STATUS_BUSY<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_busy<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> status <span class=\"token operator\">!&#061;<\/span> STATUS_OK<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u67e5\u770b\u6211\u7684\u9884\u7ea6\u5931\u8d25&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    num <span class=\"token operator\">&#061;<\/span> resp<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;num&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    arr <span class=\"token operator\">&#061;<\/span> resp<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;my_ticket_arr&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> jsonify<span class=\"token punctuation\">(<\/span>ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> num<span class=\"token operator\">&#061;<\/span>num<span class=\"token punctuation\">,<\/span> tickets<span class=\"token operator\">&#061;<\/span>arr<span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/api\/cancel&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;POST&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token decorator annotation punctuation\">&#064;login_required<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">api_cancel<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token triple-quoted-string string\">&#034;&#034;&#034;\u53d6\u6d88\u9884\u5b9a&#034;&#034;&#034;<\/span><br \/>\n    data <span class=\"token operator\">&#061;<\/span> request<span class=\"token punctuation\">.<\/span>get_json<span class=\"token punctuation\">(<\/span>silent<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><br \/>\n    yd_id <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;yd_id&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">or<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>strip<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token keyword\">not<\/span> yd_id<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u7f3a\u5c11 yd_id&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">try<\/span><span class=\"token punctuation\">:<\/span><br \/>\n        status<span class=\"token punctuation\">,<\/span> resp <span class=\"token operator\">&#061;<\/span> cp<span class=\"token punctuation\">.<\/span>cancel<span class=\"token punctuation\">(<\/span>session<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> yd_id<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">except<\/span> CPClientError <span class=\"token keyword\">as<\/span> e<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token builtin\">str<\/span><span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">502<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> status <span class=\"token operator\">&#061;&#061;<\/span> STATUS_BUSY<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_busy<span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> status <span class=\"token operator\">!&#061;<\/span> STATUS_OK<span class=\"token punctuation\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> api_err<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u53d6\u6d88\u9884\u7ea6\u5931\u8d25&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> jsonify<span class=\"token punctuation\">(<\/span>ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span> msg<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u53d6\u6d88\u9884\u7ea6\u6210\u529f&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token comment\"># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; \u5165\u53e3<\/span><br \/>\n<span class=\"token decorator annotation punctuation\">&#064;app<span class=\"token punctuation\">.<\/span>route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/api\/me&#034;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;GET&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token decorator annotation punctuation\">&#064;login_required<\/span><br \/>\n<span class=\"token keyword\">def<\/span> <span class=\"token function\">api_me<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> jsonify<span class=\"token punctuation\">(<\/span>ok<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                   user_tel<span class=\"token operator\">&#061;<\/span>session<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;user_tel&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                   user_name<span class=\"token operator\">&#061;<\/span>session<span class=\"token punctuation\">.<\/span>get<span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;user_name&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p><span class=\"token keyword\">if<\/span> __name__ <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;__main__&#034;<\/span><span class=\"token punctuation\">:<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">60<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u9884\u7ea6\u7cfb\u7edf Web \u754c\u9762\u542f\u52a8\u4e2d&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;C&#043;&#043; \u670d\u52a1\u5730\u5740: %s:%d&#034;<\/span> <span class=\"token operator\">%<\/span> <span class=\"token punctuation\">(<\/span>CP_HOST<span class=\"token punctuation\">,<\/span> CP_PORT<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;Web \u76d1\u542c: http:\/\/0.0.0.0:5000&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6d4f\u89c8\u5668\u8bf7\u8bbf\u95ee: http:\/\/localhost:5000&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#061;&#034;<\/span> <span class=\"token operator\">*<\/span> <span class=\"token number\">60<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token comment\"># debug&#061;False \u907f\u514d\u591a\u8fdb\u7a0b\u5bfc\u81f4 C&#043;&#043; \u8fde\u63a5\u88ab\u5e76\u53d1\u6253\u5f00<\/span><br \/>\n    app<span class=\"token punctuation\">.<\/span>run<span class=\"token punctuation\">(<\/span>host<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;0.0.0.0&#034;<\/span><span class=\"token punctuation\">,<\/span> port<span class=\"token operator\">&#061;<\/span><span class=\"token number\">5000<\/span><span class=\"token punctuation\">,<\/span> debug<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">False<\/span><span class=\"token punctuation\">,<\/span> threaded<span class=\"token operator\">&#061;<\/span><span class=\"token boolean\">True<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<h5>\u8def\u7531\u4e00\u89c8<\/h5>\n<table>\n<tr>\u65b9\u6cd5\u8def\u5f84\u9274\u6743\u8bf4\u660e<\/tr>\n<tbody>\n<tr>\n<td>GET<\/td>\n<td>\/<\/td>\n<td>\u2014<\/td>\n<td>\u4e3b\u9875&#xff08;\u672a\u767b\u5f55\u8df3 \/login&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>GET<\/td>\n<td>\/login<\/td>\n<td>\u2014<\/td>\n<td>\u767b\u5f55\/\u6ce8\u518c\u9875&#xff08;\u5df2\u767b\u5f55\u8df3 \/&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>POST<\/td>\n<td>\/logout<\/td>\n<td>\u2014<\/td>\n<td>\u6e05\u9664 session<\/td>\n<\/tr>\n<tr>\n<td>POST<\/td>\n<td>\/api\/register<\/td>\n<td>\u2014<\/td>\n<td>\u6ce8\u518c&#xff08;\u6210\u529f\u540e\u81ea\u52a8\u767b\u5f55&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>POST<\/td>\n<td>\/api\/login<\/td>\n<td>\u2014<\/td>\n<td>\u767b\u5f55&#xff08;\u5199\u5165 session&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>GET<\/td>\n<td>\/api\/tickets<\/td>\n<td>\u2713<\/td>\n<td>\u67e5\u770b\u53ef\u9884\u7ea6\u7968<\/td>\n<\/tr>\n<tr>\n<td>POST<\/td>\n<td>\/api\/appoint<\/td>\n<td>\u2713<\/td>\n<td>\u9884\u5b9a\u7968<\/td>\n<\/tr>\n<tr>\n<td>GET<\/td>\n<td>\/api\/my_tickets<\/td>\n<td>\u2713<\/td>\n<td>\u67e5\u770b\u6211\u7684\u9884\u7ea6<\/td>\n<\/tr>\n<tr>\n<td>POST<\/td>\n<td>\/api\/cancel<\/td>\n<td>\u2713<\/td>\n<td>\u53d6\u6d88\u9884\u7ea6<\/td>\n<\/tr>\n<tr>\n<td>GET<\/td>\n<td>\/api\/me<\/td>\n<td>\u2713<\/td>\n<td>\u83b7\u53d6\u5f53\u524d\u7528\u6237<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5>\u5173\u952e\u8bbe\u8ba1<\/h5>\n<ul>\n<li>session \u767b\u5f55\u6001&#xff1a;\u767b\u5f55\/\u6ce8\u518c\u6210\u529f\u540e session[&#034;user_tel&#034;] \u5199\u5165\u624b\u673a\u53f7&#xff0c;&#064;login_required \u88c5\u9970\u5668\u6821\u9a8c<\/li>\n<li>\u9274\u6743\u5206\u6d41&#xff1a;AJAX \u8bf7\u6c42\u672a\u767b\u5f55\u8fd4\u56de 401 JSON&#xff0c;\u6d4f\u89c8\u5668\u8bf7\u6c42\u672a\u767b\u5f55 302 \u91cd\u5b9a\u5411<\/li>\n<li>C&#043;&#043; \u7e41\u5fd9\u5904\u7406&#xff1a;status &#061;&#061; STATUS_BUSY \u8fd4\u56de HTTP 503&#xff0c;\u524d\u7aef\u63d0\u793a\u7a0d\u540e\u91cd\u8bd5<\/li>\n<li>C&#043;&#043; \u8fde\u63a5\u5931\u8d25\u5904\u7406&#xff1a;CPClientError \u8fd4\u56de HTTP 502&#xff0c;\u524d\u7aef\u63d0\u793a\u670d\u52a1\u672a\u542f\u52a8<\/li>\n<\/ul>\n<hr \/>\n<h4>4.11 web\/templates\/login.html \u2014 \u767b\u5f55 \/ \u6ce8\u518c\u9875<\/h4>\n<p>\u5c45\u4e2d\u5361\u7247\u5f0f\u8868\u5355&#xff0c;\u53cc Tab \u5207\u6362\u767b\u5f55\/\u6ce8\u518c&#xff0c;\u4e09\u5b57\u6bb5&#xff08;\u624b\u673a\u53f7 &#043; \u7528\u6237\u540d &#043; \u5bc6\u7801&#xff09;\u3002<\/p>\n<h5>\u5b8c\u6574\u4ee3\u7801<\/h5>\n<p><span class=\"token doctype\"><span class=\"token punctuation\">&lt;!<\/span><span class=\"token doctype-tag\">DOCTYPE<\/span> <span class=\"token name\">html<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>html<\/span> <span class=\"token attr-name\">lang<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>zh-CN<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>head<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>meta<\/span> <span class=\"token attr-name\">charset<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>UTF-8<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>meta<\/span> <span class=\"token attr-name\">name<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>viewport<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">content<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>width&#061;device-width, initial-scale&#061;1.0<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>title<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u9884\u7ea6\u7cfb\u7edf \u00b7 \u767b\u5f55<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>title<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>link<\/span> <span class=\"token attr-name\">rel<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>stylesheet<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>{{ url_for(&#039;static&#039;, filename&#061;&#039;style.css&#039;) }}<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>head<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>body<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>auth-page<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>auth-card<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>auth-header<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>h1<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u9884\u7ea6\u7cfb\u7edf<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>h1<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>p<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u8bf7\u767b\u5f55\u6216\u6ce8\u518c\u540e\u8fdb\u5165<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>p<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/p>\n<p>    <span class=\"token comment\">&lt;!&#8211; \u6807\u7b7e\u5207\u6362 &#8211;&gt;<\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>tabs<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>button<\/span> <span class=\"token attr-name\">type<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>button<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>tab-btn active<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">data-tab<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>login<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u767b\u5f55<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>button<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>button<\/span> <span class=\"token attr-name\">type<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>button<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>tab-btn<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">data-tab<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>register<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u6ce8\u518c<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>button<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/p>\n<p>    <span class=\"token comment\">&lt;!&#8211; \u767b\u5f55\u8868\u5355 &#8211;&gt;<\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>form<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>login-form<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>auth-form active<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">autocomplete<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>off<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>label<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u624b\u673a\u53f7<br \/>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>input<\/span> <span class=\"token attr-name\">type<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>text<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">name<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>user_tel<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">placeholder<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>11 \u4f4d\u624b\u673a\u53f7<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">required<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>label<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>label<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u7528\u6237\u540d<br \/>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>input<\/span> <span class=\"token attr-name\">type<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>text<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">name<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>user_name<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">placeholder<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>\u7528\u6237\u540d<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">required<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>label<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>label<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u5bc6\u7801<br \/>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>input<\/span> <span class=\"token attr-name\">type<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>password<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">name<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>passwd<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">placeholder<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>\u5bc6\u7801<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">required<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>label<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>button<\/span> <span class=\"token attr-name\">type<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>submit<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>btn-primary<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u767b\u5f55<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>button<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>form<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/p>\n<p>    <span class=\"token comment\">&lt;!&#8211; \u6ce8\u518c\u8868\u5355 &#8211;&gt;<\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>form<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>register-form<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>auth-form<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">autocomplete<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>off<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>label<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u624b\u673a\u53f7<br \/>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>input<\/span> <span class=\"token attr-name\">type<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>text<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">name<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>user_tel<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">placeholder<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>11 \u4f4d\u624b\u673a\u53f7<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">required<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>label<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>label<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u7528\u6237\u540d<br \/>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>input<\/span> <span class=\"token attr-name\">type<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>text<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">name<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>user_name<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">placeholder<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>\u7528\u6237\u540d<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">required<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>label<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>label<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u5bc6\u7801<br \/>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>input<\/span> <span class=\"token attr-name\">type<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>password<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">name<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>passwd<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">placeholder<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>\u5bc6\u7801&#xff08;\u22654 \u4f4d&#xff09;<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">required<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>label<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>button<\/span> <span class=\"token attr-name\">type<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>submit<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>btn-primary<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u6ce8\u518c<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>button<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>form<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/p>\n<p>    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>auth-msg<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>auth-msg<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/p>\n<p>  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>script<\/span> <span class=\"token attr-name\">src<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>{{ url_for(&#039;static&#039;, filename&#061;&#039;app.js&#039;) }}<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token script\"><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>script<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>body<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>html<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/p>\n<h5>\u5173\u952e\u5143\u7d20<\/h5>\n<ul>\n<li>.tab-btn[data-tab]&#xff1a;Tab \u5207\u6362\u6309\u94ae&#xff0c;data-tab \u503c\u4e3a login \/ register<\/li>\n<li>#login-form \/ #register-form&#xff1a;\u4e24\u4e2a\u8868\u5355&#xff0c;\u901a\u8fc7 .active class \u5207\u6362\u663e\u793a<\/li>\n<li>#auth-msg&#xff1a;\u8868\u5355\u4e0b\u65b9\u63d0\u793a\u533a&#xff08;\u6210\u529f\u7eff\u8272 \/ \u5931\u8d25\u7ea2\u8272&#xff09;<\/li>\n<li>\u8868\u5355\u5b57\u6bb5 name \u4e0e\u540e\u7aef API \u5b8c\u5168\u4e00\u81f4&#xff1a;user_tel \/ user_name \/ passwd<\/li>\n<\/ul>\n<hr \/>\n<h4>4.12 web\/templates\/index.html \u2014 \u4e3b\u64cd\u4f5c\u9875<\/h4>\n<p>\u9876\u90e8\u5bfc\u822a\u680f &#043; \u5de6\u4fa7\u680f &#043; \u53f3\u4fa7\u5185\u5bb9\u533a&#xff0c;\u542b\u53ef\u9884\u7ea6\u7968\u8868\u548c\u6211\u7684\u9884\u7ea6\u8868\u3002<\/p>\n<h5>\u5b8c\u6574\u4ee3\u7801<\/h5>\n<p><span class=\"token doctype\"><span class=\"token punctuation\">&lt;!<\/span><span class=\"token doctype-tag\">DOCTYPE<\/span> <span class=\"token name\">html<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>html<\/span> <span class=\"token attr-name\">lang<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>zh-CN<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>head<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>meta<\/span> <span class=\"token attr-name\">charset<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>UTF-8<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>meta<\/span> <span class=\"token attr-name\">name<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>viewport<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">content<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>width&#061;device-width, initial-scale&#061;1.0<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>title<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u9884\u7ea6\u7cfb\u7edf \u00b7 \u4e3b\u9875<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>title<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>link<\/span> <span class=\"token attr-name\">rel<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>stylesheet<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">href<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>{{ url_for(&#039;static&#039;, filename&#061;&#039;style.css&#039;) }}<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>head<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>body<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>app-page<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>header<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>app-header<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>brand<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>span<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>logo<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u9884\u7ea6<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>span<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>span<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>brand-text<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u9884\u7ea6\u7cfb\u7edf<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>span<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>user-area<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>span<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>user-tag<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u7528\u6237\u540d&#xff1a;<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>b<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>nav-user-name<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>{{ user_name }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>b<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>span<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>span<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>user-tag<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u624b\u673a\u53f7&#xff1a;<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>b<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>nav-user-tel<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>b<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>span<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>button<\/span> <span class=\"token attr-name\">type<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>button<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>btn-ghost<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>btn-logout<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u9000\u51fa<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>button<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>header<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/p>\n<p>  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>main<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>app-body<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token comment\">&lt;!&#8211; \u4fa7\u680f &#8211;&gt;<\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>nav<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>sidebar<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>button<\/span> <span class=\"token attr-name\">type<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>button<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>nav-item active<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">data-view<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>tickets<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n        \u67e5\u770b\u53ef\u9884\u7ea6<br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>button<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>button<\/span> <span class=\"token attr-name\">type<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>button<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>nav-item<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">data-view<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>mine<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n        \u6211\u7684\u9884\u7ea6<br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>button<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>nav<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/p>\n<p>    <span class=\"token comment\">&lt;!&#8211; \u5185\u5bb9\u533a &#8211;&gt;<\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>section<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>content<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>content-head<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>h2<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>view-title<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u53ef\u9884\u7ea6\u7684\u7968<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>h2<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>button<\/span> <span class=\"token attr-name\">type<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>button<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>btn-primary<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>btn-refresh<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u5237\u65b0<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>button<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/p>\n<p>      <span class=\"token comment\">&lt;!&#8211; \u901a\u7528\u63d0\u793a &#8211;&gt;<\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>global-msg<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>toast<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/p>\n<p>      <span class=\"token comment\">&lt;!&#8211; \u53ef\u9884\u7ea6\u8868 &#8211;&gt;<\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>view-tickets<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>view active<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>table<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>data-table<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n          <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>thead<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>tr<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n              <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u5e8f\u53f7<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u540d\u79f0<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u603b\u7968\u6570<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n              <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u5df2\u9884\u5b9a<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u5269\u4f59<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u65f6\u95f4<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u64cd\u4f5c<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>tr<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n          <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>thead<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n          <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>tbody<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>tb-tickets<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>tbody<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>table<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/p>\n<p>      <span class=\"token comment\">&lt;!&#8211; \u6211\u7684\u9884\u7ea6\u8868 &#8211;&gt;<\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>div<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>view-mine<span class=\"token punctuation\">&#034;<\/span><\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>view<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>table<\/span> <span class=\"token attr-name\">class<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>data-table<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n          <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>thead<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>tr<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n              <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u9884\u7ea6ID<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u540d\u79f0<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u603b\u7968\u6570<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n              <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u5df2\u9884\u5b9a<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u65f6\u95f4<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span>\u64cd\u4f5c<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>th<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n            <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>tr<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n          <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>thead<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n          <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>tbody<\/span> <span class=\"token attr-name\">id<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>tb-mine<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>tbody<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>table<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>div<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>section<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>main<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/p>\n<p>  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;<\/span>script<\/span> <span class=\"token attr-name\">src<\/span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">&#061;<\/span><span class=\"token punctuation\">&#034;<\/span>{{ url_for(&#039;static&#039;, filename&#061;&#039;app.js&#039;) }}<span class=\"token punctuation\">&#034;<\/span><\/span><span class=\"token punctuation\">&gt;<\/span><\/span><span class=\"token script\"><\/span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>script<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>body<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><br \/>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;\/<\/span>html<\/span><span class=\"token punctuation\">&gt;<\/span><\/span><\/p>\n<h5>\u5173\u952e\u5143\u7d20<\/h5>\n<ul>\n<li>.app-header&#xff1a;\u9876\u90e8\u5bfc\u822a\u680f&#xff08;\u54c1\u724c &#043; \u7528\u6237\u540d\/\u624b\u673a\u53f7 &#043; \u9000\u51fa\u6309\u94ae&#xff09;<\/li>\n<li>.nav-item[data-view]&#xff1a;\u4fa7\u680f\u5bfc\u822a\u9879&#xff0c;data-view \u503c\u4e3a tickets \/ mine<\/li>\n<li>#view-tickets \/ #view-mine&#xff1a;\u4e24\u4e2a\u89c6\u56fe\u5bb9\u5668&#xff0c;\u901a\u8fc7 .active class \u5207\u6362<\/li>\n<li>#tb-tickets \/ #tb-mine&#xff1a;\u8868\u683c tbody&#xff0c;\u7531 JS \u52a8\u6001\u6e32\u67d3<\/li>\n<li>#btn-refresh&#xff1a;\u5237\u65b0\u6309\u94ae&#xff0c;\u91cd\u65b0\u52a0\u8f7d\u5f53\u524d\u89c6\u56fe<\/li>\n<li>{{ user_name }}&#xff1a;Flask \u6a21\u677f\u53d8\u91cf&#xff0c;\u540e\u7aef\u76f4\u63a5\u6e32\u67d3\u7528\u6237\u540d<\/li>\n<\/ul>\n<hr \/>\n<h4>4.13 web\/static\/style.css \u2014 \u9875\u9762\u6837\u5f0f<\/h4>\n<p>\u73b0\u4ee3\u5316\u5361\u7247\u5f0f UI&#xff0c;\u542b CSS \u53d8\u91cf\u4e3b\u9898\u8272\u3001\u9634\u5f71\u3001\u54cd\u5e94\u5f0f\u5e03\u5c40&#xff08;\u79fb\u52a8\u7aef\u4fa7\u680f\u6536\u7a84&#xff09;\u3002<\/p>\n<h5>\u5b8c\u6574\u4ee3\u7801<\/h5>\n<p><span class=\"token comment\">\/* &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n   \u9884\u7ea6\u7cfb\u7edf Web \u754c\u9762 &#8211; \u6837\u5f0f<br \/>\n   &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; *\/<\/span><\/p>\n<p><span class=\"token selector\">:root<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">&#8211;primary<\/span><span class=\"token punctuation\">:<\/span> #4f7cff<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">&#8211;primary-dark<\/span><span class=\"token punctuation\">:<\/span> #3a63d8<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">&#8211;danger<\/span><span class=\"token punctuation\">:<\/span> #e2536b<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">&#8211;bg<\/span><span class=\"token punctuation\">:<\/span> #f5f7fb<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">&#8211;card<\/span><span class=\"token punctuation\">:<\/span> #ffffff<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">&#8211;border<\/span><span class=\"token punctuation\">:<\/span> #e3e8f0<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">&#8211;text<\/span><span class=\"token punctuation\">:<\/span> #1f2a44<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">&#8211;text-sub<\/span><span class=\"token punctuation\">:<\/span> #6b7896<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">&#8211;shadow<\/span><span class=\"token punctuation\">:<\/span> 0 6px 24px <span class=\"token function\">rgba<\/span><span class=\"token punctuation\">(<\/span>31<span class=\"token punctuation\">,<\/span> 42<span class=\"token punctuation\">,<\/span> 68<span class=\"token punctuation\">,<\/span> .08<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">*<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">box-sizing<\/span><span class=\"token punctuation\">:<\/span> border-box<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">html, body<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">margin<\/span><span class=\"token punctuation\">:<\/span> 0<span class=\"token punctuation\">;<\/span> <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 0<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">body<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">font-family<\/span><span class=\"token punctuation\">:<\/span> -apple-system<span class=\"token punctuation\">,<\/span> BlinkMacSystemFont<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;Segoe UI&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n               <span class=\"token string\">&#034;PingFang SC&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;Microsoft YaHei&#034;<\/span><span class=\"token punctuation\">,<\/span> sans-serif<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;text<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;bg<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 14px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">line-height<\/span><span class=\"token punctuation\">:<\/span> 1.5<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">button<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">font-family<\/span><span class=\"token punctuation\">:<\/span> inherit<span class=\"token punctuation\">;<\/span> <span class=\"token property\">cursor<\/span><span class=\"token punctuation\">:<\/span> pointer<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/* &#8212;&#8212;&#8212;&#8212;&#8212;- \u767b\u5f55\/\u6ce8\u518c\u9875 &#8212;&#8212;&#8212;&#8212;&#8212;- *\/<\/span><br \/>\n<span class=\"token selector\">.auth-page<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">min-height<\/span><span class=\"token punctuation\">:<\/span> 100vh<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> flex<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">align-items<\/span><span class=\"token punctuation\">:<\/span> center<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">justify-content<\/span><span class=\"token punctuation\">:<\/span> center<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">linear-gradient<\/span><span class=\"token punctuation\">(<\/span>135deg<span class=\"token punctuation\">,<\/span> #6a8dff 0%<span class=\"token punctuation\">,<\/span> #4f7cff 50%<span class=\"token punctuation\">,<\/span> #2a4db8 100%<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">.auth-card<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">width<\/span><span class=\"token punctuation\">:<\/span> 380px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">max-width<\/span><span class=\"token punctuation\">:<\/span> 92vw<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;card<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border-radius<\/span><span class=\"token punctuation\">:<\/span> 14px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">box-shadow<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;shadow<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 28px 28px 24px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">.auth-header<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">text-align<\/span><span class=\"token punctuation\">:<\/span> center<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">margin-bottom<\/span><span class=\"token punctuation\">:<\/span> 18px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.auth-header h1<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">margin<\/span><span class=\"token punctuation\">:<\/span> 0 0 4px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 22px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-weight<\/span><span class=\"token punctuation\">:<\/span> 700<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;text<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.auth-header p<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">margin<\/span><span class=\"token punctuation\">:<\/span> 0<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;text-sub<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 13px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">.tabs<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> flex<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #eef2fb<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border-radius<\/span><span class=\"token punctuation\">:<\/span> 8px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 4px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">margin-bottom<\/span><span class=\"token punctuation\">:<\/span> 18px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.tab-btn<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">flex<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border<\/span><span class=\"token punctuation\">:<\/span> none<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> transparent<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 8px 0<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 14px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;text-sub<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border-radius<\/span><span class=\"token punctuation\">:<\/span> 6px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">transition<\/span><span class=\"token punctuation\">:<\/span> all .2s<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.tab-btn.active<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;card<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;text<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-weight<\/span><span class=\"token punctuation\">:<\/span> 600<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">box-shadow<\/span><span class=\"token punctuation\">:<\/span> 0 2px 8px <span class=\"token function\">rgba<\/span><span class=\"token punctuation\">(<\/span>0<span class=\"token punctuation\">,<\/span> 0<span class=\"token punctuation\">,<\/span> 0<span class=\"token punctuation\">,<\/span> .06<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">.auth-form<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> none<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">flex-direction<\/span><span class=\"token punctuation\">:<\/span> column<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">gap<\/span><span class=\"token punctuation\">:<\/span> 12px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.auth-form.active<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> flex<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">.auth-form label<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> flex<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">flex-direction<\/span><span class=\"token punctuation\">:<\/span> column<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 13px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;text-sub<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">gap<\/span><span class=\"token punctuation\">:<\/span> 4px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.auth-form input<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">height<\/span><span class=\"token punctuation\">:<\/span> 40px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 0 12px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border<\/span><span class=\"token punctuation\">:<\/span> 1px solid <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;border<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border-radius<\/span><span class=\"token punctuation\">:<\/span> 8px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 14px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;text<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #fbfcfe<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">outline<\/span><span class=\"token punctuation\">:<\/span> none<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">transition<\/span><span class=\"token punctuation\">:<\/span> border-color .15s<span class=\"token punctuation\">,<\/span> box-shadow .15s<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.auth-form input:focus<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">border-color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;primary<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">box-shadow<\/span><span class=\"token punctuation\">:<\/span> 0 0 0 3px <span class=\"token function\">rgba<\/span><span class=\"token punctuation\">(<\/span>79<span class=\"token punctuation\">,<\/span> 124<span class=\"token punctuation\">,<\/span> 255<span class=\"token punctuation\">,<\/span> .15<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #fff<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">.btn-primary<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">height<\/span><span class=\"token punctuation\">:<\/span> 40px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border<\/span><span class=\"token punctuation\">:<\/span> none<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border-radius<\/span><span class=\"token punctuation\">:<\/span> 8px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;primary<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> #fff<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 14px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-weight<\/span><span class=\"token punctuation\">:<\/span> 600<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">transition<\/span><span class=\"token punctuation\">:<\/span> background .15s<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.btn-primary:hover<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;primary-dark<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.btn-primary:active<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">transform<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">translateY<\/span><span class=\"token punctuation\">(<\/span>1px<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.btn-primary:disabled<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #aab4cf<span class=\"token punctuation\">;<\/span> <span class=\"token property\">cursor<\/span><span class=\"token punctuation\">:<\/span> not-allowed<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">.btn-ghost<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">height<\/span><span class=\"token punctuation\">:<\/span> 34px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 0 14px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border<\/span><span class=\"token punctuation\">:<\/span> 1px solid <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;border<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border-radius<\/span><span class=\"token punctuation\">:<\/span> 8px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #fff<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;text<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 13px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">transition<\/span><span class=\"token punctuation\">:<\/span> background .15s<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.btn-ghost:hover<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #f0f3fa<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">.auth-msg<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">margin-top<\/span><span class=\"token punctuation\">:<\/span> 12px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 13px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">min-height<\/span><span class=\"token punctuation\">:<\/span> 18px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">text-align<\/span><span class=\"token punctuation\">:<\/span> center<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.auth-msg.ok<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> #1f9d57<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.auth-msg.err<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;danger<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/* &#8212;&#8212;&#8212;&#8212;&#8212;- \u4e3b\u9875 &#8212;&#8212;&#8212;&#8212;&#8212;- *\/<\/span><br \/>\n<span class=\"token selector\">.app-page<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">min-height<\/span><span class=\"token punctuation\">:<\/span> 100vh<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">.app-header<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">height<\/span><span class=\"token punctuation\">:<\/span> 56px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;card<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border-bottom<\/span><span class=\"token punctuation\">:<\/span> 1px solid <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;border<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> flex<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">align-items<\/span><span class=\"token punctuation\">:<\/span> center<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">justify-content<\/span><span class=\"token punctuation\">:<\/span> space-between<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 0 20px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">box-shadow<\/span><span class=\"token punctuation\">:<\/span> 0 1px 4px <span class=\"token function\">rgba<\/span><span class=\"token punctuation\">(<\/span>0<span class=\"token punctuation\">,<\/span> 0<span class=\"token punctuation\">,<\/span> 0<span class=\"token punctuation\">,<\/span> .04<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.brand<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> flex<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">align-items<\/span><span class=\"token punctuation\">:<\/span> center<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">gap<\/span><span class=\"token punctuation\">:<\/span> 10px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.logo<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">width<\/span><span class=\"token punctuation\">:<\/span> 30px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">height<\/span><span class=\"token punctuation\">:<\/span> 30px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;primary<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> #fff<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border-radius<\/span><span class=\"token punctuation\">:<\/span> 8px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> flex<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">align-items<\/span><span class=\"token punctuation\">:<\/span> center<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">justify-content<\/span><span class=\"token punctuation\">:<\/span> center<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 13px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-weight<\/span><span class=\"token punctuation\">:<\/span> 700<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.brand-text<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 16px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-weight<\/span><span class=\"token punctuation\">:<\/span> 700<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.user-area<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> flex<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">align-items<\/span><span class=\"token punctuation\">:<\/span> center<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">gap<\/span><span class=\"token punctuation\">:<\/span> 14px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.user-tag<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 13px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;text-sub<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.user-tag b<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;text<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">.app-body<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> flex<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">min-height<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">calc<\/span><span class=\"token punctuation\">(<\/span>100vh &#8211; 56px<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">.sidebar<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">width<\/span><span class=\"token punctuation\">:<\/span> 200px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;card<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border-right<\/span><span class=\"token punctuation\">:<\/span> 1px solid <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;border<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 12px 10px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> flex<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">flex-direction<\/span><span class=\"token punctuation\">:<\/span> column<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">gap<\/span><span class=\"token punctuation\">:<\/span> 4px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.nav-item<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">text-align<\/span><span class=\"token punctuation\">:<\/span> left<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border<\/span><span class=\"token punctuation\">:<\/span> none<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> transparent<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 10px 14px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 14px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;text-sub<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border-radius<\/span><span class=\"token punctuation\">:<\/span> 8px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">transition<\/span><span class=\"token punctuation\">:<\/span> background .15s<span class=\"token punctuation\">,<\/span> color .15s<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.nav-item:hover<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #f0f3fa<span class=\"token punctuation\">;<\/span> <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;text<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.nav-item.active<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">rgba<\/span><span class=\"token punctuation\">(<\/span>79<span class=\"token punctuation\">,<\/span> 124<span class=\"token punctuation\">,<\/span> 255<span class=\"token punctuation\">,<\/span> .12<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;primary<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-weight<\/span><span class=\"token punctuation\">:<\/span> 600<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">.content<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">flex<\/span><span class=\"token punctuation\">:<\/span> 1<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 20px 24px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">overflow<\/span><span class=\"token punctuation\">:<\/span> auto<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.content-head<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> flex<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">align-items<\/span><span class=\"token punctuation\">:<\/span> center<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">justify-content<\/span><span class=\"token punctuation\">:<\/span> space-between<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">margin-bottom<\/span><span class=\"token punctuation\">:<\/span> 14px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.content-head h2<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">margin<\/span><span class=\"token punctuation\">:<\/span> 0<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 18px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-weight<\/span><span class=\"token punctuation\">:<\/span> 600<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.content-head .btn-primary<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">min-width<\/span><span class=\"token punctuation\">:<\/span> 80px<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/* \u8868\u683c *\/<\/span><br \/>\n<span class=\"token selector\">.data-table<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">width<\/span><span class=\"token punctuation\">:<\/span> 100%<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border-collapse<\/span><span class=\"token punctuation\">:<\/span> collapse<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;card<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border-radius<\/span><span class=\"token punctuation\">:<\/span> 10px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">overflow<\/span><span class=\"token punctuation\">:<\/span> hidden<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">box-shadow<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;shadow<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.data-table th,<br \/>\n.data-table td<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 12px 14px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">text-align<\/span><span class=\"token punctuation\">:<\/span> left<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 14px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border-bottom<\/span><span class=\"token punctuation\">:<\/span> 1px solid <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;border<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.data-table thead th<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #f7f9fd<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;text-sub<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-weight<\/span><span class=\"token punctuation\">:<\/span> 600<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 13px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.data-table tbody tr:last-child td<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">border-bottom<\/span><span class=\"token punctuation\">:<\/span> none<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.data-table tbody tr:hover<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #fafcff<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">.empty-row td<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">text-align<\/span><span class=\"token punctuation\">:<\/span> center<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;text-sub<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 30px 0<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">.row-full<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;danger<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token property\">font-weight<\/span><span class=\"token punctuation\">:<\/span> 600<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.row-available<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> #1f9d57<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token selector\">.btn-action<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">height<\/span><span class=\"token punctuation\">:<\/span> 32px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 0 14px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border<\/span><span class=\"token punctuation\">:<\/span> none<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border-radius<\/span><span class=\"token punctuation\">:<\/span> 6px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 13px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-weight<\/span><span class=\"token punctuation\">:<\/span> 600<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> #fff<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;primary<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">transition<\/span><span class=\"token punctuation\">:<\/span> background .15s<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.btn-action:hover<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;primary-dark<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.btn-action.danger<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> <span class=\"token function\">var<\/span><span class=\"token punctuation\">(<\/span>&#8211;danger<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.btn-action.danger:hover<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #c63f55<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.btn-action:disabled<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #aab4cf<span class=\"token punctuation\">;<\/span> <span class=\"token property\">cursor<\/span><span class=\"token punctuation\">:<\/span> not-allowed<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/* \u89c6\u56fe\u5207\u6362 *\/<\/span><br \/>\n<span class=\"token selector\">.view<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> none<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.view.active<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> block<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\">\/* Toast \u63d0\u793a *\/<\/span><br \/>\n<span class=\"token selector\">.toast<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> none<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">margin-bottom<\/span><span class=\"token punctuation\">:<\/span> 14px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 10px 14px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border-radius<\/span><span class=\"token punctuation\">:<\/span> 8px<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 13px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.toast.show<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> block<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.toast.ok<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #e6f7ee<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> #15703e<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border<\/span><span class=\"token punctuation\">:<\/span> 1px solid #b6e3c6<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token selector\">.toast.err<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token property\">background<\/span><span class=\"token punctuation\">:<\/span> #fdeef1<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">color<\/span><span class=\"token punctuation\">:<\/span> #b03247<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token property\">border<\/span><span class=\"token punctuation\">:<\/span> 1px solid #f6c8d1<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token atrule\"><span class=\"token rule\">&#064;media<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token property\">max-width<\/span><span class=\"token punctuation\">:<\/span> 720px<span class=\"token punctuation\">)<\/span><\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token selector\">.sidebar<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">width<\/span><span class=\"token punctuation\">:<\/span> 64px<span class=\"token punctuation\">;<\/span> <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 8px 6px<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token selector\">.nav-item<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 10px 8px<span class=\"token punctuation\">;<\/span> <span class=\"token property\">font-size<\/span><span class=\"token punctuation\">:<\/span> 12px<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token selector\">.content<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">padding<\/span><span class=\"token punctuation\">:<\/span> 14px<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token selector\">.user-tag<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token property\">display<\/span><span class=\"token punctuation\">:<\/span> none<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<h5>\u5173\u952e\u6837\u5f0f<\/h5>\n<ul>\n<li>CSS \u53d8\u91cf\u4e3b\u9898\u8272&#xff1a;:root \u5b9a\u4e49 &#8211;primary \/ &#8211;danger \u7b49&#xff0c;\u7edf\u4e00\u8272\u8c03<\/li>\n<li>\u767b\u5f55\u9875&#xff1a;\u6e10\u53d8\u80cc\u666f &#043; \u5c45\u4e2d\u5361\u7247&#xff0c;Tab \u5207\u6362\u7528 .active class<\/li>\n<li>\u4e3b\u9875&#xff1a;flex \u5e03\u5c40&#xff08;\u4fa7\u680f &#043; \u5185\u5bb9\u533a&#xff09;&#xff0c;\u8868\u683c\u5706\u89d2\u9634\u5f71<\/li>\n<li>\u54cd\u5e94\u5f0f&#xff1a;&#064;media (max-width: 720px) \u4fa7\u680f\u6536\u7a84\u5230 64px&#xff0c;\u9690\u85cf\u7528\u6237\u6807\u7b7e<\/li>\n<\/ul>\n<hr \/>\n<h4>4.14 web\/static\/app.js \u2014 \u524d\u7aef\u903b\u8f91<\/h4>\n<p>IIFE \u6a21\u5757\u5316\u5c01\u88c5&#xff0c;\u96f6\u5916\u90e8\u4f9d\u8d56\u3002\u542b\u767b\u5f55\/\u6ce8\u518c\u8868\u5355\u63d0\u4ea4\u3001\u8868\u683c\u52a8\u6001\u6e32\u67d3\u3001\u9884\u5b9a\/\u53d6\u6d88\u4ea4\u4e92\u3001AJAX \u8bf7\u6c42\u5c01\u88c5\u3002<\/p>\n<h5>\u5b8c\u6574\u4ee3\u7801<\/h5>\n<p><span class=\"token comment\">\/* &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<br \/>\n   \u9884\u7ea6\u7cfb\u7edf Web \u754c\u9762 &#8211; \u524d\u7aef\u903b\u8f91<br \/>\n   &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; *\/<\/span><\/p>\n<p><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token string\">&#034;use strict&#034;<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token comment\">\/\/ &#8212;&#8212;&#8212; \u5de5\u5177 &#8212;&#8212;&#8212;<\/span><br \/>\n  <span class=\"token keyword\">function<\/span> <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">sel<span class=\"token punctuation\">,<\/span> root<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span>root <span class=\"token operator\">||<\/span> document<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">querySelector<\/span><span class=\"token punctuation\">(<\/span>sel<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token keyword\">function<\/span> <span class=\"token function\">qsa<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">sel<span class=\"token punctuation\">,<\/span> root<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token class-name\">Array<\/span><span class=\"token punctuation\">.<\/span>prototype<span class=\"token punctuation\">.<\/span><span class=\"token function\">slice<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">call<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>root <span class=\"token operator\">||<\/span> document<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">querySelectorAll<\/span><span class=\"token punctuation\">(<\/span>sel<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">function<\/span> <span class=\"token function\">showMessage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">el<span class=\"token punctuation\">,<\/span> text<span class=\"token punctuation\">,<\/span> type<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>el<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    el<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> text <span class=\"token operator\">||<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    el<span class=\"token punctuation\">.<\/span>className <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;auth-msg &#034;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token punctuation\">(<\/span>type <span class=\"token operator\">||<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">function<\/span> <span class=\"token function\">toast<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">text<span class=\"token punctuation\">,<\/span> type<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">var<\/span> el <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#global-msg&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>el<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    el<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> text <span class=\"token operator\">||<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    el<span class=\"token punctuation\">.<\/span>className <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;toast &#034;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token punctuation\">(<\/span>type <span class=\"token operator\">||<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>type<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      el<span class=\"token punctuation\">.<\/span>classList<span class=\"token punctuation\">.<\/span><span class=\"token function\">add<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;show&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token function\">setTimeout<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        el<span class=\"token punctuation\">.<\/span>className <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;toast&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">2500<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">function<\/span> <span class=\"token function\">fetchWithTimeout<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">url<span class=\"token punctuation\">,<\/span> opts<span class=\"token punctuation\">,<\/span> ms<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">var<\/span> ctrl <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">new<\/span> <span class=\"token class-name\">AbortController<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">var<\/span> timer <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">setTimeout<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> ctrl<span class=\"token punctuation\">.<\/span><span class=\"token function\">abort<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> ms <span class=\"token operator\">||<\/span> <span class=\"token number\">10000<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    opts <span class=\"token operator\">&#061;<\/span> opts <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    opts<span class=\"token punctuation\">.<\/span>credentials <span class=\"token operator\">&#061;<\/span> opts<span class=\"token punctuation\">.<\/span>credentials <span class=\"token operator\">||<\/span> <span class=\"token string\">&#034;same-origin&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    opts<span class=\"token punctuation\">.<\/span>signal <span class=\"token operator\">&#061;<\/span> ctrl<span class=\"token punctuation\">.<\/span>signal<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token function\">fetch<\/span><span class=\"token punctuation\">(<\/span>url<span class=\"token punctuation\">,<\/span> opts<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">finally<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token function\">clearTimeout<\/span><span class=\"token punctuation\">(<\/span>timer<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">function<\/span> <span class=\"token function\">postJSON<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">url<span class=\"token punctuation\">,<\/span> body<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token function\">fetchWithTimeout<\/span><span class=\"token punctuation\">(<\/span>url<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token literal-property property\">method<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;POST&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n      <span class=\"token literal-property property\">headers<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token string-property property\">&#034;Content-Type&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;application\/json&#034;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n      <span class=\"token literal-property property\">body<\/span><span class=\"token operator\">:<\/span> <span class=\"token constant\">JSON<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">stringify<\/span><span class=\"token punctuation\">(<\/span>body <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">r<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">return<\/span> r<span class=\"token punctuation\">.<\/span><span class=\"token function\">json<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">d<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token literal-property property\">ok<\/span><span class=\"token operator\">:<\/span> <span class=\"token operator\">!<\/span><span class=\"token operator\">!<\/span>d<span class=\"token punctuation\">.<\/span>ok<span class=\"token punctuation\">,<\/span> <span class=\"token literal-property property\">status<\/span><span class=\"token operator\">:<\/span> r<span class=\"token punctuation\">.<\/span>status<span class=\"token punctuation\">,<\/span> <span class=\"token literal-property property\">data<\/span><span class=\"token operator\">:<\/span> d <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">function<\/span> <span class=\"token function\">getJSON<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">url<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token function\">fetchWithTimeout<\/span><span class=\"token punctuation\">(<\/span>url<span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token literal-property property\">method<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;GET&#034;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">r<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">return<\/span> r<span class=\"token punctuation\">.<\/span><span class=\"token function\">json<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">d<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token literal-property property\">ok<\/span><span class=\"token operator\">:<\/span> <span class=\"token operator\">!<\/span><span class=\"token operator\">!<\/span>d<span class=\"token punctuation\">.<\/span>ok<span class=\"token punctuation\">,<\/span> <span class=\"token literal-property property\">status<\/span><span class=\"token operator\">:<\/span> r<span class=\"token punctuation\">.<\/span>status<span class=\"token punctuation\">,<\/span> <span class=\"token literal-property property\">data<\/span><span class=\"token operator\">:<\/span> d <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">function<\/span> <span class=\"token function\">netErr<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>err <span class=\"token operator\">&amp;&amp;<\/span> err<span class=\"token punctuation\">.<\/span>name <span class=\"token operator\">&#061;&#061;&#061;<\/span> <span class=\"token string\">&#034;AbortError&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#034;\u8bf7\u6c42\u8d85\u65f6&#xff1a;\u670d\u52a1\u672a\u54cd\u5e94&#xff0c;\u8bf7\u786e\u8ba4\u670d\u52a1\u5df2\u542f\u52a8&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#034;\u7f51\u7edc\u9519\u8bef&#xff1a;\u670d\u52a1\u672a\u8fd0\u884c\u6216\u5df2\u65ad\u5f00&#xff0c;\u8bf7\u786e\u8ba4\u670d\u52a1\u5df2\u542f\u52a8\u540e\u5237\u65b0\u9875\u9762\u91cd\u8bd5&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token keyword\">function<\/span> <span class=\"token function\">formData<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">form<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">var<\/span> obj <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">var<\/span> els <span class=\"token operator\">&#061;<\/span> form<span class=\"token punctuation\">.<\/span>elements<span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token keyword\">var<\/span> i <span class=\"token operator\">&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span> i <span class=\"token operator\">&lt;<\/span> els<span class=\"token punctuation\">.<\/span>length<span class=\"token punctuation\">;<\/span> i<span class=\"token operator\">&#043;&#043;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">var<\/span> e <span class=\"token operator\">&#061;<\/span> els<span class=\"token punctuation\">[<\/span>i<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>e<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">)<\/span> obj<span class=\"token punctuation\">[<\/span>e<span class=\"token punctuation\">.<\/span>name<span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> e<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span><span class=\"token function\">trim<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> obj<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token comment\">\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u767b\u5f55 \/ \u6ce8\u518c\u9875 &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n  <span class=\"token keyword\">function<\/span> <span class=\"token function\">initAuthPage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">var<\/span> card <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;.auth-card&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>card<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6807\u7b7e\u5207\u6362<\/span><br \/>\n    <span class=\"token function\">qsa<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;.tab-btn&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">forEach<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">btn<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      btn<span class=\"token punctuation\">.<\/span><span class=\"token function\">addEventListener<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;click&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token function\">qsa<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;.tab-btn&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">forEach<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">b<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> b<span class=\"token punctuation\">.<\/span>classList<span class=\"token punctuation\">.<\/span><span class=\"token function\">remove<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;active&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        btn<span class=\"token punctuation\">.<\/span>classList<span class=\"token punctuation\">.<\/span><span class=\"token function\">add<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;active&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">var<\/span> tab <span class=\"token operator\">&#061;<\/span> btn<span class=\"token punctuation\">.<\/span><span class=\"token function\">getAttribute<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;data-tab&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">qsa<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;.auth-form&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">forEach<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">f<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> f<span class=\"token punctuation\">.<\/span>classList<span class=\"token punctuation\">.<\/span><span class=\"token function\">remove<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;active&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#&#034;<\/span> <span class=\"token operator\">&#043;<\/span> tab <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#034;-form&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>classList<span class=\"token punctuation\">.<\/span><span class=\"token function\">add<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;active&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">showMessage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#auth-msg&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u767b\u5f55\u63d0\u4ea4<\/span><br \/>\n    <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#login-form&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">addEventListener<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;submit&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">e<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      e<span class=\"token punctuation\">.<\/span><span class=\"token function\">preventDefault<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">var<\/span> msg <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#auth-msg&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">var<\/span> data <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">formData<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>data<span class=\"token punctuation\">.<\/span>user_tel <span class=\"token operator\">||<\/span> <span class=\"token operator\">!<\/span>data<span class=\"token punctuation\">.<\/span>user_name <span class=\"token operator\">||<\/span> <span class=\"token operator\">!<\/span>data<span class=\"token punctuation\">.<\/span>passwd<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token function\">showMessage<\/span><span class=\"token punctuation\">(<\/span>msg<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u8bf7\u586b\u5199\u5b8c\u6574\u4fe1\u606f&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;err&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><br \/>\n      <span class=\"token keyword\">var<\/span> btn <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#login-form button[type&#061;submit]&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      btn<span class=\"token punctuation\">.<\/span>disabled <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> btn<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u767b\u5f55\u4e2d&#8230;&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token function\">postJSON<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/api\/login&#034;<\/span><span class=\"token punctuation\">,<\/span> data<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">r<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        btn<span class=\"token punctuation\">.<\/span>disabled <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> btn<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u767b\u5f55&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">.<\/span>ok<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          window<span class=\"token punctuation\">.<\/span>location<span class=\"token punctuation\">.<\/span>href <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\/&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token function\">showMessage<\/span><span class=\"token punctuation\">(<\/span>msg<span class=\"token punctuation\">,<\/span> r<span class=\"token punctuation\">.<\/span>data <span class=\"token operator\">&amp;&amp;<\/span> r<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>msg <span class=\"token operator\">?<\/span> r<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>msg <span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;\u767b\u5f55\u5931\u8d25&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;err&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">catch<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        btn<span class=\"token punctuation\">.<\/span>disabled <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> btn<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u767b\u5f55&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">showMessage<\/span><span class=\"token punctuation\">(<\/span>msg<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u7f51\u7edc\u9519\u8bef&#xff0c;\u8bf7\u7a0d\u540e\u91cd\u8bd5&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;err&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u6ce8\u518c\u63d0\u4ea4<\/span><br \/>\n    <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#register-form&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">addEventListener<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;submit&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">e<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      e<span class=\"token punctuation\">.<\/span><span class=\"token function\">preventDefault<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">var<\/span> msg <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#auth-msg&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">var<\/span> data <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">formData<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">this<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>data<span class=\"token punctuation\">.<\/span>user_tel <span class=\"token operator\">||<\/span> <span class=\"token operator\">!<\/span>data<span class=\"token punctuation\">.<\/span>user_name <span class=\"token operator\">||<\/span> <span class=\"token operator\">!<\/span>data<span class=\"token punctuation\">.<\/span>passwd<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token function\">showMessage<\/span><span class=\"token punctuation\">(<\/span>msg<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u8bf7\u586b\u5199\u5b8c\u6574\u4fe1\u606f&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;err&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><br \/>\n      <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>data<span class=\"token punctuation\">.<\/span>passwd<span class=\"token punctuation\">.<\/span>length <span class=\"token operator\">&lt;<\/span> <span class=\"token number\">4<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token function\">showMessage<\/span><span class=\"token punctuation\">(<\/span>msg<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u5bc6\u7801\u81f3\u5c11 4 \u4f4d&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;err&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><br \/>\n      <span class=\"token keyword\">var<\/span> btn <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#register-form button[type&#061;submit]&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      btn<span class=\"token punctuation\">.<\/span>disabled <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> btn<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u6ce8\u518c\u4e2d&#8230;&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token function\">postJSON<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/api\/register&#034;<\/span><span class=\"token punctuation\">,<\/span> data<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">r<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        btn<span class=\"token punctuation\">.<\/span>disabled <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> btn<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u6ce8\u518c&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">.<\/span>ok<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token function\">showMessage<\/span><span class=\"token punctuation\">(<\/span>msg<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u6ce8\u518c\u6210\u529f&#xff0c;\u6b63\u5728\u8fdb\u5165&#8230;&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;ok&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n          <span class=\"token function\">setTimeout<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> window<span class=\"token punctuation\">.<\/span>location<span class=\"token punctuation\">.<\/span>href <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\/&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">600<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token function\">showMessage<\/span><span class=\"token punctuation\">(<\/span>msg<span class=\"token punctuation\">,<\/span> r<span class=\"token punctuation\">.<\/span>data <span class=\"token operator\">&amp;&amp;<\/span> r<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>msg <span class=\"token operator\">?<\/span> r<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>msg <span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;\u6ce8\u518c\u5931\u8d25&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;err&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">catch<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        btn<span class=\"token punctuation\">.<\/span>disabled <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> btn<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u6ce8\u518c&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">showMessage<\/span><span class=\"token punctuation\">(<\/span>msg<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;\u7f51\u7edc\u9519\u8bef&#xff0c;\u8bf7\u7a0d\u540e\u91cd\u8bd5&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;err&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token comment\">\/\/ &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061; \u4e3b\u9875 &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n  <span class=\"token keyword\">function<\/span> <span class=\"token function\">initAppPage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">var<\/span> page <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;.app-page&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>page<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">var<\/span> currentView <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;tickets&#034;<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u4fa7\u680f\u5207\u6362<\/span><br \/>\n    <span class=\"token function\">qsa<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;.nav-item&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">forEach<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">item<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      item<span class=\"token punctuation\">.<\/span><span class=\"token function\">addEventListener<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;click&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">var<\/span> view <span class=\"token operator\">&#061;<\/span> item<span class=\"token punctuation\">.<\/span><span class=\"token function\">getAttribute<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;data-view&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>view <span class=\"token operator\">&#061;&#061;&#061;<\/span> currentView<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">qsa<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;.nav-item&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">forEach<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">b<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> b<span class=\"token punctuation\">.<\/span>classList<span class=\"token punctuation\">.<\/span><span class=\"token function\">remove<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;active&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        item<span class=\"token punctuation\">.<\/span>classList<span class=\"token punctuation\">.<\/span><span class=\"token function\">add<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;active&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">qsa<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;.view&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">forEach<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">v<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> v<span class=\"token punctuation\">.<\/span>classList<span class=\"token punctuation\">.<\/span><span class=\"token function\">remove<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;active&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#view-&#034;<\/span> <span class=\"token operator\">&#043;<\/span> view<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>classList<span class=\"token punctuation\">.<\/span><span class=\"token function\">add<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;active&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        currentView <span class=\"token operator\">&#061;<\/span> view<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#view-title&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>view <span class=\"token operator\">&#061;&#061;&#061;<\/span> <span class=\"token string\">&#034;tickets&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">?<\/span> <span class=\"token string\">&#034;\u53ef\u9884\u7ea6\u7684\u7968&#034;<\/span> <span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;\u6211\u7684\u9884\u7ea6&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token function\">loadCurrent<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u9000\u51fa<\/span><br \/>\n    <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#btn-logout&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">addEventListener<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;click&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token function\">postJSON<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/logout&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        window<span class=\"token punctuation\">.<\/span>location<span class=\"token punctuation\">.<\/span>href <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\/login&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u5237\u65b0<\/span><br \/>\n    <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#btn-refresh&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">addEventListener<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;click&#034;<\/span><span class=\"token punctuation\">,<\/span> loadCurrent<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u52a0\u8f7d\u5f53\u524d\u89c6\u56fe\u6570\u636e&#xff0c;\u8fd4\u56de promise \u4fbf\u4e8e\u5237\u65b0\u540e\u56de\u8c03<\/span><br \/>\n    <span class=\"token keyword\">function<\/span> <span class=\"token function\">loadCurrent<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>currentView <span class=\"token operator\">&#061;&#061;&#061;<\/span> <span class=\"token string\">&#034;tickets&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token function\">loadTickets<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">else<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token function\">loadMine<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">function<\/span> <span class=\"token function\">loadTickets<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">var<\/span> tbody <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#tb-tickets&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      tbody<span class=\"token punctuation\">.<\/span>innerHTML <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;&lt;tr class&#061;&#034;empty-row&#034;&gt;&lt;td colspan&#061;&#034;7&#034;&gt;\u52a0\u8f7d\u4e2d&#8230;&lt;\/td&gt;&lt;\/tr&gt;&#039;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">return<\/span> <span class=\"token function\">getJSON<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/api\/tickets&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">r<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>r<span class=\"token punctuation\">.<\/span>ok<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          tbody<span class=\"token punctuation\">.<\/span>innerHTML <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;&lt;tr class&#061;&#034;empty-row&#034;&gt;&lt;td colspan&#061;&#034;7&#034;&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n            <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">.<\/span>data <span class=\"token operator\">&amp;&amp;<\/span> r<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>msg<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">||<\/span> <span class=\"token string\">&#034;\u52a0\u8f7d\u5931\u8d25&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#034;&lt;\/td&gt;&lt;\/tr&gt;&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n          <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token function\">renderTickets<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>tickets <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">catch<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        tbody<span class=\"token punctuation\">.<\/span>innerHTML <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;&lt;tr class&#061;&#034;empty-row&#034;&gt;&lt;td colspan&#061;&#034;7&#034;&gt;\u7f51\u7edc\u9519\u8bef&lt;\/td&gt;&lt;\/tr&gt;&#039;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">function<\/span> <span class=\"token function\">renderTickets<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">list<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">var<\/span> tbody <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#tb-tickets&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>list<span class=\"token punctuation\">.<\/span>length<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        tbody<span class=\"token punctuation\">.<\/span>innerHTML <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;&lt;tr class&#061;&#034;empty-row&#034;&gt;&lt;td colspan&#061;&#034;7&#034;&gt;\u6682\u65e0\u53ef\u9884\u7ea6\u7684\u7968&lt;\/td&gt;&lt;\/tr&gt;&#039;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><br \/>\n      tbody<span class=\"token punctuation\">.<\/span>innerHTML <span class=\"token operator\">&#061;<\/span> list<span class=\"token punctuation\">.<\/span><span class=\"token function\">map<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">t<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">var<\/span> id <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">.<\/span>ticket_id <span class=\"token operator\">!&#061;&#061;<\/span> <span class=\"token keyword\">undefined<\/span> <span class=\"token operator\">&amp;&amp;<\/span> t<span class=\"token punctuation\">.<\/span>ticket_id <span class=\"token operator\">!&#061;&#061;<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">?<\/span> t<span class=\"token punctuation\">.<\/span>ticket_id <span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">var<\/span> max <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">parseInt<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">.<\/span>ticket_max<span class=\"token punctuation\">,<\/span> <span class=\"token number\">10<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">||<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">var<\/span> count <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">parseInt<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">.<\/span>ticket_count<span class=\"token punctuation\">,<\/span> <span class=\"token number\">10<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">||<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">var<\/span> left <span class=\"token operator\">&#061;<\/span> max <span class=\"token operator\">&#8211;<\/span> count<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">var<\/span> full <span class=\"token operator\">&#061;<\/span> left <span class=\"token operator\">&lt;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">var<\/span> leftClass <span class=\"token operator\">&#061;<\/span> full <span class=\"token operator\">?<\/span> <span class=\"token string\">&#034;row-full&#034;<\/span> <span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;row-available&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">var<\/span> btn <span class=\"token operator\">&#061;<\/span> full<br \/>\n          <span class=\"token operator\">?<\/span> <span class=\"token string\">&#039;&lt;button class&#061;&#034;btn-action&#034; disabled&gt;\u5df2\u6ee1&lt;\/button&gt;&#039;<\/span><br \/>\n          <span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;&lt;button class&#061;&#034;btn-action&#034; data-appoint&#061;&#034;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> id <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#039;&#034;&gt;\u9884\u5b9a&lt;\/button&gt;&#039;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#039;&lt;tr&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n          <span class=\"token string\">&#039;&lt;td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> id <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#039;&lt;\/td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n          <span class=\"token string\">&#039;&lt;td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">esc<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">.<\/span>ticket_name<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#039;&lt;\/td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n          <span class=\"token string\">&#039;&lt;td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> max <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#039;&lt;\/td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n          <span class=\"token string\">&#039;&lt;td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> count <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#039;&lt;\/td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n          <span class=\"token string\">&#039;&lt;td class&#061;&#034;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> leftClass <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#039;&#034;&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> left <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#039;&lt;\/td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n          <span class=\"token string\">&#039;&lt;td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">esc<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">.<\/span>day_time<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#039;&lt;\/td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n          <span class=\"token string\">&#039;&lt;td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> btn <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#039;&lt;\/td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n          <span class=\"token string\">&#039;&lt;\/tr&gt;&#039;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">join<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>      <span class=\"token comment\">\/\/ \u7ed1\u5b9a\u9884\u5b9a\u6309\u94ae<\/span><br \/>\n      <span class=\"token function\">qsa<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;[data-appoint]&#034;<\/span><span class=\"token punctuation\">,<\/span> tbody<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">forEach<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">b<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        b<span class=\"token punctuation\">.<\/span><span class=\"token function\">addEventListener<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;click&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token keyword\">var<\/span> id <span class=\"token operator\">&#061;<\/span> b<span class=\"token punctuation\">.<\/span><span class=\"token function\">getAttribute<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;data-appoint&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n          b<span class=\"token punctuation\">.<\/span>disabled <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> b<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u9884\u5b9a\u4e2d&#8230;&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n          <span class=\"token function\">postJSON<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/api\/appoint&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token literal-property property\">ticket_id<\/span><span class=\"token operator\">:<\/span> id <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">r<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">.<\/span>ok<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n              <span class=\"token function\">loadCurrent<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token function\">alert<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u9884\u5b9a\u6210\u529f&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n              b<span class=\"token punctuation\">.<\/span>disabled <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> b<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u9884\u5b9a&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n              <span class=\"token function\">alert<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">.<\/span>data <span class=\"token operator\">&amp;&amp;<\/span> r<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>msg<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">||<\/span> <span class=\"token string\">&#034;\u9884\u5b9a\u5931\u8d25&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n          <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">catch<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            b<span class=\"token punctuation\">.<\/span>disabled <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> b<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u9884\u5b9a&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token function\">alert<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">netErr<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n          <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">function<\/span> <span class=\"token function\">loadMine<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">var<\/span> tbody <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#tb-mine&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      tbody<span class=\"token punctuation\">.<\/span>innerHTML <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;&lt;tr class&#061;&#034;empty-row&#034;&gt;&lt;td colspan&#061;&#034;6&#034;&gt;\u52a0\u8f7d\u4e2d&#8230;&lt;\/td&gt;&lt;\/tr&gt;&#039;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">return<\/span> <span class=\"token function\">getJSON<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/api\/my_tickets&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">r<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>r<span class=\"token punctuation\">.<\/span>ok<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          tbody<span class=\"token punctuation\">.<\/span>innerHTML <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;&lt;tr class&#061;&#034;empty-row&#034;&gt;&lt;td colspan&#061;&#034;6&#034;&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n            <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">.<\/span>data <span class=\"token operator\">&amp;&amp;<\/span> r<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>msg<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">||<\/span> <span class=\"token string\">&#034;\u52a0\u8f7d\u5931\u8d25&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#034;&lt;\/td&gt;&lt;\/tr&gt;&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n          <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token function\">renderMine<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>tickets <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">catch<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        tbody<span class=\"token punctuation\">.<\/span>innerHTML <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;&lt;tr class&#061;&#034;empty-row&#034;&gt;&lt;td colspan&#061;&#034;6&#034;&gt;\u670d\u52a1\u672a\u8fd0\u884c\u6216\u5df2\u65ad\u5f00&lt;\/td&gt;&lt;\/tr&gt;&#039;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token keyword\">function<\/span> <span class=\"token function\">renderMine<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">list<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">var<\/span> tbody <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#tb-mine&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>list<span class=\"token punctuation\">.<\/span>length<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        tbody<span class=\"token punctuation\">.<\/span>innerHTML <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;&lt;tr class&#061;&#034;empty-row&#034;&gt;&lt;td colspan&#061;&#034;6&#034;&gt;\u60a8\u8fd8\u6ca1\u6709\u4efb\u4f55\u9884\u7ea6&lt;\/td&gt;&lt;\/tr&gt;&#039;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><br \/>\n      tbody<span class=\"token punctuation\">.<\/span>innerHTML <span class=\"token operator\">&#061;<\/span> list<span class=\"token punctuation\">.<\/span><span class=\"token function\">map<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">t<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">var<\/span> ydId <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">.<\/span>yd_id <span class=\"token operator\">!&#061;&#061;<\/span> <span class=\"token keyword\">undefined<\/span> <span class=\"token operator\">&amp;&amp;<\/span> t<span class=\"token punctuation\">.<\/span>yd_id <span class=\"token operator\">!&#061;&#061;<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">?<\/span> t<span class=\"token punctuation\">.<\/span>yd_id <span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#039;&lt;tr&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n          <span class=\"token string\">&#039;&lt;td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> ydId <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#039;&lt;\/td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n          <span class=\"token string\">&#039;&lt;td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">esc<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">.<\/span>ticket_name<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#039;&lt;\/td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n          <span class=\"token string\">&#039;&lt;td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">esc<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">.<\/span>ticket_max<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#039;&lt;\/td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n          <span class=\"token string\">&#039;&lt;td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">esc<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">.<\/span>ticket_count<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#039;&lt;\/td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n          <span class=\"token string\">&#039;&lt;td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token function\">esc<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">.<\/span>day_time<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#039;&lt;\/td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n          <span class=\"token string\">&#039;&lt;td&gt;&lt;button class&#061;&#034;btn-action danger&#034; data-cancel&#061;&#034;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> ydId <span class=\"token operator\">&#043;<\/span> <span class=\"token string\">&#039;&#034;&gt;\u53d6\u6d88&lt;\/button&gt;&lt;\/td&gt;&#039;<\/span> <span class=\"token operator\">&#043;<\/span><br \/>\n          <span class=\"token string\">&#039;&lt;\/tr&gt;&#039;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">join<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>      <span class=\"token function\">qsa<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;[data-cancel]&#034;<\/span><span class=\"token punctuation\">,<\/span> tbody<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">forEach<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">b<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        b<span class=\"token punctuation\">.<\/span><span class=\"token function\">addEventListener<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;click&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n          <span class=\"token keyword\">var<\/span> id <span class=\"token operator\">&#061;<\/span> b<span class=\"token punctuation\">.<\/span><span class=\"token function\">getAttribute<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;data-cancel&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n          b<span class=\"token punctuation\">.<\/span>disabled <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span> b<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u53d6\u6d88\u4e2d&#8230;&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n          <span class=\"token function\">postJSON<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/api\/cancel&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token literal-property property\">yd_id<\/span><span class=\"token operator\">:<\/span> id <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">r<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">.<\/span>ok<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n              <span class=\"token function\">loadCurrent<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token function\">alert<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u53d6\u6d88\u6210\u529f&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n              b<span class=\"token punctuation\">.<\/span>disabled <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> b<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u53d6\u6d88&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n              <span class=\"token function\">alert<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">.<\/span>data <span class=\"token operator\">&amp;&amp;<\/span> r<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>msg<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">||<\/span> <span class=\"token string\">&#034;\u53d6\u6d88\u5931\u8d25&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n          <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">catch<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">err<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            b<span class=\"token punctuation\">.<\/span>disabled <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span> b<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;\u53d6\u6d88&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n            <span class=\"token function\">alert<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">netErr<\/span><span class=\"token punctuation\">(<\/span>err<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n          <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u62c9\u4e00\u4e0b\u5f53\u524d\u7528\u6237\u4fe1\u606f&#xff08;\u663e\u793a\u624b\u673a\u53f7&#xff09;<\/span><br \/>\n    <span class=\"token function\">getJSON<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\/api\/me&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">then<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">r<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>r<span class=\"token punctuation\">.<\/span>ok <span class=\"token operator\">&amp;&amp;<\/span> r<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token keyword\">var<\/span> tel <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#nav-user-tel&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>tel <span class=\"token operator\">&amp;&amp;<\/span> r<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>user_tel<span class=\"token punctuation\">)<\/span> tel<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> r<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>user_tel<span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">var<\/span> name <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">qs<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;#nav-user-name&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>name <span class=\"token operator\">&amp;&amp;<\/span> r<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>user_name<span class=\"token punctuation\">)<\/span> name<span class=\"token punctuation\">.<\/span>textContent <span class=\"token operator\">&#061;<\/span> r<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>user_name<span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">catch<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token comment\">\/\/ \u9996\u6b21\u52a0\u8f7d<\/span><br \/>\n    <span class=\"token function\">loadCurrent<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token comment\">\/\/ \u7b80\u5355 HTML \u8f6c\u4e49&#xff0c;\u9632\u6b62\u5185\u5bb9\u6ce8\u5165<\/span><br \/>\n  <span class=\"token keyword\">function<\/span> <span class=\"token function\">esc<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\">v<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>v <span class=\"token operator\">&#061;&#061;&#061;<\/span> <span class=\"token keyword\">undefined<\/span> <span class=\"token operator\">||<\/span> v <span class=\"token operator\">&#061;&#061;&#061;<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token function\">String<\/span><span class=\"token punctuation\">(<\/span>v<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">replace<\/span><span class=\"token punctuation\">(<\/span><span class=\"token regex\"><span class=\"token regex-delimiter\">\/<\/span><span class=\"token regex-source language-regex\">[&amp;&lt;&gt;&#034;&#039;]<\/span><span class=\"token regex-delimiter\">\/<\/span><span class=\"token regex-flags\">g<\/span><\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token parameter\">c<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token string-property property\">&#034;&amp;&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;&amp;amp;&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string-property property\">&#034;&lt;&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;&amp;lt;&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string-property property\">&#034;&gt;&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;&amp;gt;&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string-property property\">&#039;&#034;&#039;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;&amp;quot;&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string-property property\">&#034;&#039;&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;&amp;#39;&#034;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span>c<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  document<span class=\"token punctuation\">.<\/span><span class=\"token function\">addEventListener<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;DOMContentLoaded&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token keyword\">function<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token function\">initAuthPage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token function\">initAppPage<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<h5>\u5173\u952e\u903b\u8f91<\/h5>\n<ul>\n<li>fetchWithTimeout&#xff1a;\u57fa\u4e8e AbortController \u7684\u5e26\u8d85\u65f6 fetch \u5c01\u88c5&#xff08;\u9ed8\u8ba4 10 \u79d2&#xff09;<\/li>\n<li>initAuthPage&#xff1a;\u767b\u5f55\/\u6ce8\u518c\u9875 Tab \u5207\u6362 &#043; \u8868\u5355\u63d0\u4ea4&#xff0c;\u6210\u529f\u540e\u8df3\u8f6c \/<\/li>\n<li>initAppPage&#xff1a;\u4e3b\u9875\u4fa7\u680f\u5207\u6362 &#043; \u8868\u683c\u6e32\u67d3 &#043; \u9884\u5b9a\/\u53d6\u6d88\u6309\u94ae\u4ea4\u4e92<\/li>\n<li>loadTickets \/ loadMine&#xff1a;return Promise&#xff0c;\u4fbf\u4e8e\u64cd\u4f5c\u6210\u529f\u540e\u56de\u8c03\u5237\u65b0 &#043; \u5f39\u7a97<\/li>\n<li>renderTickets&#xff1a;\u5269\u4f59 &#061; max &#8211; count&#xff0c;\u6ee1\u5219\u7981\u7528\u6309\u94ae\u663e\u793a\u300c\u5df2\u6ee1\u300d<\/li>\n<li>esc&#xff1a;HTML \u8f6c\u4e49\u9632\u6ce8\u5165<\/li>\n<\/ul>\n<hr \/>\n<h4>4.15 start_all.sh \u2014 \u4e00\u952e\u542f\u52a8\u811a\u672c<\/h4>\n<p>\u68c0\u67e5 MySQL \u2192 \u542f\u52a8 C&#043;&#043; \u670d\u52a1 \u2192 \u88c5 Flask \u2192 \u542f\u52a8 Web \u2192 \u6253\u5f00\u6d4f\u89c8\u5668\u3002\u542f\u52a8\u65f6\u628a\u8fdb\u7a0b PID \u5199\u5165 .service.pid \/ .web.pid\u3002<\/p>\n<h5>\u5b8c\u6574\u4ee3\u7801<\/h5>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token comment\"># \u9884\u7ea6\u7cfb\u7edf\u4e00\u952e\u542f\u52a8\u811a\u672c<\/span><br \/>\n<span class=\"token comment\"># \u7528\u6cd5:  .\/start_all.sh<\/span><br \/>\n<span class=\"token comment\"># \u505a\u7684\u4e8b: \u68c0\u67e5 MySQL -&gt; \u542f\u52a8 C&#043;&#043; \u670d\u52a1 -&gt; \u542f\u52a8 Web \u670d\u52a1 -&gt; \u6253\u5f00\u6d4f\u89c8\u5668<\/span><br \/>\n<span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token builtin class-name\">set<\/span> <span class=\"token parameter variable\">-e<\/span><\/p>\n<p><span class=\"token assign-left variable\">ROOT<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">cd<\/span> <span class=\"token string\">&#034;<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">dirname<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$0<\/span>&#034;<\/span><span class=\"token variable\">)<\/span><\/span>&#034;<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token builtin class-name\">pwd<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token assign-left variable\">WEB_DIR<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">$ROOT<\/span>\/web&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">LOG_DIR<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\/tmp&#034;<\/span><\/p>\n<p><span class=\"token comment\"># \u989c\u8272\u8f93\u51fa<\/span><br \/>\n<span class=\"token assign-left variable\">GREEN<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;\\\\033[0;32m&#039;<\/span><br \/>\n<span class=\"token assign-left variable\">RED<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;\\\\033[0;31m&#039;<\/span><br \/>\n<span class=\"token assign-left variable\">YELLOW<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;\\\\033[0;33m&#039;<\/span><br \/>\n<span class=\"token assign-left variable\">NC<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;\\\\033[0m&#039;<\/span> <span class=\"token comment\"># No Color<\/span><\/p>\n<p><span class=\"token function-name function\">ok<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>   <span class=\"token punctuation\">{<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${GREEN}<\/span>[OK]<span class=\"token variable\">${NC}<\/span>   <span class=\"token variable\">$1<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token function-name function\">fail<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${RED}<\/span>[FAIL]<span class=\"token variable\">${NC}<\/span> <span class=\"token variable\">$1<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token function-name function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${YELLOW}<\/span>[..]<span class=\"token variable\">${NC}<\/span>  <span class=\"token variable\">$1<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u68c0\u67e5\u67d0\u7aef\u53e3\u662f\u5426\u5728\u76d1\u542c<\/span><br \/>\n<span class=\"token function-name function\">port_listening<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> ss <span class=\"token parameter variable\">-ltn<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-q<\/span> <span class=\"token string\">&#034;:<span class=\"token variable\">$1<\/span> &#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- 1. \u68c0\u67e5 MySQL<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token operator\">!<\/span> port_listening <span class=\"token number\">3306<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    fail <span class=\"token string\">&#034;MySQL \u672a\u542f\u52a8&#xff08;3306 \u672a\u76d1\u542c&#xff09;&#xff0c;\u8bf7\u5148\u542f\u52a8 MySQL \u518d\u8fd0\u884c\u672c\u811a\u672c&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><br \/>\nok <span class=\"token string\">&#034;MySQL \u5df2\u5c31\u7eea (3306)&#034;<\/span><\/p>\n<p><span class=\"token comment\"># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- 2. \u542f\u52a8 C&#043;&#043; \u670d\u52a1<\/span><br \/>\n<span class=\"token keyword\">if<\/span> port_listening <span class=\"token number\">9999<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    ok <span class=\"token string\">&#034;C&#043;&#043; \u670d\u52a1\u5df2\u5728\u8fd0\u884c (9999)&#xff0c;\u8df3\u8fc7&#034;<\/span><br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token operator\">!<\/span> <span class=\"token parameter variable\">-x<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$ROOT<\/span>\/service&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        fail <span class=\"token string\">&#034;\u672a\u627e\u5230\u53ef\u6267\u884c\u6587\u4ef6 <span class=\"token variable\">$ROOT<\/span>\/service&#xff0c;\u8bf7\u5148\u5728\u9879\u76ee\u6839\u76ee\u5f55\u6267\u884c: make&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n    info <span class=\"token string\">&#034;\u542f\u52a8 C&#043;&#043; \u670d\u52a1&#8230;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">cd<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$ROOT<\/span>&#034;<\/span><br \/>\n    <span class=\"token function\">nohup<\/span> .\/service service.conf <span class=\"token operator\">&gt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_DIR<\/span>\/cs_service.log&#034;<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span><span class=\"token file-descriptor important\">&amp;1<\/span> <span class=\"token operator\">&amp;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$!<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$ROOT<\/span>\/.service.pid&#034;<\/span><br \/>\n    <span class=\"token function\">sleep<\/span> <span class=\"token number\">2<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> port_listening <span class=\"token number\">9999<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        ok <span class=\"token string\">&#034;C&#043;&#043; \u670d\u52a1\u542f\u52a8\u6210\u529f (9999)&#034;<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n        fail <span class=\"token string\">&#034;C&#043;&#043; \u670d\u52a1\u542f\u52a8\u5931\u8d25&#xff0c;\u65e5\u5fd7: <span class=\"token variable\">$LOG_DIR<\/span>\/cs_service.log&#034;<\/span><br \/>\n        <span class=\"token function\">tail<\/span> <span class=\"token parameter variable\">-n<\/span> <span class=\"token number\">10<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_DIR<\/span>\/cs_service.log&#034;<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null<br \/>\n        <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- 3. \u542f\u52a8 Web \u670d\u52a1<\/span><br \/>\n<span class=\"token keyword\">if<\/span> port_listening <span class=\"token number\">5000<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    ok <span class=\"token string\">&#034;Web \u670d\u52a1\u5df2\u5728\u8fd0\u884c (5000)&#xff0c;\u8df3\u8fc7&#034;<\/span><br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token operator\">!<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$WEB_DIR<\/span>\/app.py&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        fail <span class=\"token string\">&#034;\u672a\u627e\u5230 <span class=\"token variable\">$WEB_DIR<\/span>\/app.py&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n    info <span class=\"token string\">&#034;\u68c0\u67e5 Flask \u4f9d\u8d56&#8230;&#034;<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token operator\">!<\/span> python3 <span class=\"token parameter variable\">-c<\/span> <span class=\"token string\">&#034;import flask&#034;<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        info <span class=\"token string\">&#034;Flask \u672a\u5b89\u88c5&#xff0c;\u6b63\u5728\u5b89\u88c5&#8230;&#034;<\/span><br \/>\n        pip3 <span class=\"token function\">install<\/span> flask <span class=\"token operator\">&gt;<\/span>\/dev\/null <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span><span class=\"token file-descriptor important\">&amp;1<\/span> <span class=\"token operator\">||<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            fail <span class=\"token string\">&#034;Flask \u5b89\u88c5\u5931\u8d25&#xff0c;\u8bf7\u624b\u52a8\u6267\u884c: pip3 install flask&#034;<\/span><br \/>\n            <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><br \/>\n        ok <span class=\"token string\">&#034;Flask \u5b89\u88c5\u5b8c\u6210&#034;<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n    info <span class=\"token string\">&#034;\u542f\u52a8 Web \u670d\u52a1&#8230;&#034;<\/span><br \/>\n    <span class=\"token builtin class-name\">cd<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$WEB_DIR<\/span>&#034;<\/span><br \/>\n    <span class=\"token function\">nohup<\/span> python3 app.py <span class=\"token operator\">&gt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_DIR<\/span>\/cs_web.log&#034;<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span><span class=\"token file-descriptor important\">&amp;1<\/span> <span class=\"token operator\">&amp;<\/span><br \/>\n    <span class=\"token builtin class-name\">echo<\/span> <span class=\"token variable\">$!<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$ROOT<\/span>\/.web.pid&#034;<\/span><br \/>\n    <span class=\"token function\">sleep<\/span> <span class=\"token number\">2<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> port_listening <span class=\"token number\">5000<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        ok <span class=\"token string\">&#034;Web \u670d\u52a1\u542f\u52a8\u6210\u529f (5000)&#034;<\/span><br \/>\n    <span class=\"token keyword\">else<\/span><br \/>\n        fail <span class=\"token string\">&#034;Web \u670d\u52a1\u542f\u52a8\u5931\u8d25&#xff0c;\u65e5\u5fd7: <span class=\"token variable\">$LOG_DIR<\/span>\/cs_web.log&#034;<\/span><br \/>\n        <span class=\"token function\">tail<\/span> <span class=\"token parameter variable\">-n<\/span> <span class=\"token number\">10<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$LOG_DIR<\/span>\/cs_web.log&#034;<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null<br \/>\n        <span class=\"token builtin class-name\">exit<\/span> <span class=\"token number\">1<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token comment\"># &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- 4. \u6253\u5f00\u6d4f\u89c8\u5668<\/span><br \/>\n<span class=\"token assign-left variable\">URL<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;http:\/\/localhost:5000&#034;<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token builtin class-name\">command<\/span> <span class=\"token parameter variable\">-v<\/span> <span class=\"token function\">xdg-open<\/span> <span class=\"token operator\">&gt;<\/span>\/dev\/null <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span><span class=\"token file-descriptor important\">&amp;1<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token function\">xdg-open<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$URL<\/span>&#034;<\/span> <span class=\"token operator\">&gt;<\/span>\/dev\/null <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span><span class=\"token file-descriptor important\">&amp;1<\/span> <span class=\"token operator\">||<\/span> <span class=\"token boolean\">true<\/span><br \/>\n<span class=\"token keyword\">elif<\/span> <span class=\"token builtin class-name\">command<\/span> <span class=\"token parameter variable\">-v<\/span> sensible-browser <span class=\"token operator\">&gt;<\/span>\/dev\/null <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span><span class=\"token file-descriptor important\">&amp;1<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    sensible-browser <span class=\"token string\">&#034;<span class=\"token variable\">$URL<\/span>&#034;<\/span> <span class=\"token operator\">&gt;<\/span>\/dev\/null <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span><span class=\"token file-descriptor important\">&amp;1<\/span> <span class=\"token operator\">||<\/span> <span class=\"token boolean\">true<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<p><span class=\"token builtin class-name\">echo<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${GREEN}<\/span> \u9884\u7ea6\u7cfb\u7edf\u5df2\u542f\u52a8<span class=\"token variable\">${NC}<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034; \u6d4f\u89c8\u5668\u8bbf\u95ee: <span class=\"token variable\">$URL<\/span>&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034; C&#043;&#043; \u670d\u52a1\u65e5\u5fd7: <span class=\"token variable\">$LOG_DIR<\/span>\/cs_service.log&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034; Web   \u670d\u52a1\u65e5\u5fd7: <span class=\"token variable\">$LOG_DIR<\/span>\/cs_web.log&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034; \u505c\u6b62\u670d\u52a1:  .\/stop_all.sh&#034;<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span> <span class=\"token string\">&#034;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#034;<\/span><\/p>\n<h5>\u5173\u952e\u903b\u8f91<\/h5>\n<ul>\n<li>set -e&#xff1a;\u4efb\u4f55\u6b65\u9aa4\u5931\u8d25\u7acb\u5373\u9000\u51fa<\/li>\n<li>PID \u6587\u4ef6&#xff1a;echo $! &gt; .service.pid \/ .web.pid&#xff0c;\u4f9b stop_all.sh \u7cbe\u786e\u505c\u6b62<\/li>\n<li>\u5e42\u7b49&#xff1a;\u7aef\u53e3\u5df2\u76d1\u542c\u5219\u8df3\u8fc7&#xff0c;\u53ef\u91cd\u590d\u6267\u884c<\/li>\n<li>\u81ea\u52a8\u88c5 Flask&#xff1a;\u68c0\u6d4b import flask \u5931\u8d25\u5219 pip3 install<\/li>\n<\/ul>\n<hr \/>\n<h4>4.16 stop_all.sh \u2014 \u4e00\u952e\u505c\u6b62\u811a\u672c<\/h4>\n<p>\u4f18\u5148\u7528 PID \u6587\u4ef6\u7cbe\u786e kill&#xff1b;PID \u6587\u4ef6\u4e0d\u5b58\u5728\u65f6\u6309\u7aef\u53e3 9999\/5000 \u515c\u5e95\u3002\u7edd\u4e0d\u8bef\u6740\u5176\u4ed6\u9879\u76ee&#xff08;\u5982 csproject2 \u7684 8888 \u670d\u52a1&#xff09;\u3002<\/p>\n<h5>\u5b8c\u6574\u4ee3\u7801<\/h5>\n<p><span class=\"token shebang important\">#!\/bin\/bash<\/span><br \/>\n<span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><br \/>\n<span class=\"token comment\"># \u9884\u7ea6\u7cfb\u7edf\u4e00\u952e\u505c\u6b62\u811a\u672c&#xff08;\u53ea\u505c\u672c\u9879\u76ee&#xff0c;\u4e0d\u8bef\u6740\u5176\u4ed6\u9879\u76ee&#xff09;<\/span><br \/>\n<span class=\"token comment\"># \u7528\u6cd5:  .\/stop_all.sh<\/span><br \/>\n<span class=\"token comment\"># \u539f\u7406:  \u4f18\u5148\u7528 start_all.sh \u5199\u7684 PID \u6587\u4ef6\u7cbe\u786e kill&#xff1b;<\/span><br \/>\n<span class=\"token comment\">#        PID \u6587\u4ef6\u4e0d\u5b58\u5728\u65f6\u6309\u7aef\u53e3 9999\/5000 \u515c\u5e95&#xff0c;\u7edd\u4e0d\u8bef\u6740\u5176\u4ed6\u9879\u76ee\u3002<\/span><br \/>\n<span class=\"token comment\"># &#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;&#061;<\/span><\/p>\n<p><span class=\"token assign-left variable\">ROOT<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token builtin class-name\">cd<\/span> <span class=\"token string\">&#034;<span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">dirname<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$0<\/span>&#034;<\/span><span class=\"token variable\">)<\/span><\/span>&#034;<\/span> <span class=\"token operator\">&amp;&amp;<\/span> <span class=\"token builtin class-name\">pwd<\/span><span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token assign-left variable\">SVC_PID_FILE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">$ROOT<\/span>\/.service.pid&#034;<\/span><br \/>\n<span class=\"token assign-left variable\">WEB_PID_FILE<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;<span class=\"token variable\">$ROOT<\/span>\/.web.pid&#034;<\/span><\/p>\n<p><span class=\"token assign-left variable\">GREEN<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;\\\\033[0;32m&#039;<\/span><br \/>\n<span class=\"token assign-left variable\">YELLOW<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;\\\\033[0;33m&#039;<\/span><br \/>\n<span class=\"token assign-left variable\">NC<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;\\\\033[0m&#039;<\/span><br \/>\n<span class=\"token function-name function\">ok<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span>   <span class=\"token punctuation\">{<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${GREEN}<\/span>[OK]<span class=\"token variable\">${NC}<\/span>   <span class=\"token variable\">$1<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token function-name function\">info<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> <span class=\"token builtin class-name\">echo<\/span> <span class=\"token parameter variable\">-e<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">${YELLOW}<\/span>[..]<span class=\"token variable\">${NC}<\/span>  <span class=\"token variable\">$1<\/span>&#034;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># \u6309\u7aef\u53e3\u627e\u8fdb\u7a0b PID&#xff08;\u4ec5\u5360\u7528 9999\/5000 \u7684\u8fdb\u7a0b&#xff0c;\u4e0d\u4f1a\u78b0 8888&#xff09;<\/span><br \/>\n<span class=\"token function-name function\">port_pid<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span> ss <span class=\"token parameter variable\">-ltnp<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token string\">&#034;:<span class=\"token variable\">$1<\/span> &#034;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-oP<\/span> <span class=\"token string\">&#039;pid&#061;\\\\K[0-9]&#043;&#039;<\/span> <span class=\"token operator\">|<\/span> <span class=\"token function\">head<\/span> -1<span class=\"token punctuation\">;<\/span> <span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># kill \u4e00\u4e2a PID&#xff08;\u5148 TERM \u540e KILL&#xff09;<\/span><br \/>\n<span class=\"token function-name function\">kill_pid<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token builtin class-name\">local<\/span> <span class=\"token assign-left variable\">pid<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$1<\/span> <span class=\"token assign-left variable\">name<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\">$2<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-z<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$pid<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        ok <span class=\"token string\">&#034;<span class=\"token variable\">$name<\/span> \u672a\u8fd0\u884c&#xff0c;\u8df3\u8fc7&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">return<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token operator\">!<\/span> <span class=\"token function\">kill<\/span> <span class=\"token parameter variable\">-0<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$pid<\/span>&#034;<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        ok <span class=\"token string\">&#034;<span class=\"token variable\">$name<\/span> PID <span class=\"token variable\">$pid<\/span> \u5df2\u4e0d\u5b58\u5728&#034;<\/span><br \/>\n        <span class=\"token builtin class-name\">return<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n    info <span class=\"token string\">&#034;\u505c\u6b62 <span class=\"token variable\">$name<\/span>: PID <span class=\"token variable\">$pid<\/span>&#034;<\/span><br \/>\n    <span class=\"token function\">kill<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$pid<\/span>&#034;<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null<br \/>\n    <span class=\"token function\">sleep<\/span> <span class=\"token number\">1<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token function\">kill<\/span> <span class=\"token parameter variable\">-0<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$pid<\/span>&#034;<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null<span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n        <span class=\"token function\">kill<\/span> <span class=\"token parameter variable\">-9<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$pid<\/span>&#034;<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null <span class=\"token operator\">||<\/span> <span class=\"token boolean\">true<\/span><br \/>\n    <span class=\"token keyword\">fi<\/span><br \/>\n    ok <span class=\"token string\">&#034;<span class=\"token variable\">$name<\/span> \u5df2\u505c\u6b62&#034;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token comment\"># &#8212;- \u505c\u6b62 Web \u670d\u52a1 &#8212;-<\/span><br \/>\n<span class=\"token assign-left variable\">WEB_PID<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;&#034;<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$WEB_PID_FILE<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token assign-left variable\">WEB_PID<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">cat<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$WEB_PID_FILE<\/span>&#034;<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null<span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-z<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$WEB_PID<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token assign-left variable\">WEB_PID<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span>port_pid <span class=\"token number\">5000<\/span><span class=\"token variable\">)<\/span><\/span>   <span class=\"token comment\"># PID \u6587\u4ef6\u4e0d\u5b58\u5728\u65f6\u6309\u7aef\u53e3\u515c\u5e95<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><br \/>\nkill_pid <span class=\"token string\">&#034;<span class=\"token variable\">$WEB_PID<\/span>&#034;<\/span> <span class=\"token string\">&#034;Web \u670d\u52a1&#034;<\/span><br \/>\n<span class=\"token function\">rm<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$WEB_PID_FILE<\/span>&#034;<\/span><\/p>\n<p><span class=\"token comment\"># &#8212;- \u505c\u6b62 C&#043;&#043; \u670d\u52a1 &#8212;-<\/span><br \/>\n<span class=\"token assign-left variable\">SVC_PID<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;&#034;<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$SVC_PID_FILE<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token assign-left variable\">SVC_PID<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span><span class=\"token function\">cat<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$SVC_PID_FILE<\/span>&#034;<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null<span class=\"token variable\">)<\/span><\/span><br \/>\n<span class=\"token keyword\">fi<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">[<\/span> <span class=\"token parameter variable\">-z<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$SVC_PID<\/span>&#034;<\/span> <span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    <span class=\"token assign-left variable\">SVC_PID<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token variable\"><span class=\"token variable\">$(<\/span>port_pid <span class=\"token number\">9999<\/span><span class=\"token variable\">)<\/span><\/span>   <span class=\"token comment\"># PID \u6587\u4ef6\u4e0d\u5b58\u5728\u65f6\u6309\u7aef\u53e3\u515c\u5e95<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><br \/>\nkill_pid <span class=\"token string\">&#034;<span class=\"token variable\">$SVC_PID<\/span>&#034;<\/span> <span class=\"token string\">&#034;C&#043;&#043; \u670d\u52a1&#034;<\/span><br \/>\n<span class=\"token function\">rm<\/span> <span class=\"token parameter variable\">-f<\/span> <span class=\"token string\">&#034;<span class=\"token variable\">$SVC_PID_FILE<\/span>&#034;<\/span><\/p>\n<p><span class=\"token comment\"># &#8212;- \u786e\u8ba4\u7aef\u53e3\u5df2\u91ca\u653e &#8212;-<\/span><br \/>\n<span class=\"token function\">sleep<\/span> <span class=\"token number\">1<\/span><br \/>\n<span class=\"token builtin class-name\">echo<\/span><br \/>\n<span class=\"token keyword\">if<\/span> <span class=\"token operator\">!<\/span> ss <span class=\"token parameter variable\">-ltn<\/span> <span class=\"token operator\"><span class=\"token file-descriptor important\">2<\/span>&gt;<\/span>\/dev\/null <span class=\"token operator\">|<\/span> <span class=\"token function\">grep<\/span> <span class=\"token parameter variable\">-qE<\/span> <span class=\"token string\">&#039;:9999|:5000&#039;<\/span><span class=\"token punctuation\">;<\/span> <span class=\"token keyword\">then<\/span><br \/>\n    ok <span class=\"token string\">&#034;\u7aef\u53e3 9999 \/ 5000 \u5df2\u5168\u90e8\u91ca\u653e&#034;<\/span><br \/>\n<span class=\"token keyword\">else<\/span><br \/>\n    info <span class=\"token string\">&#034;\u4ecd\u6709\u7aef\u53e3\u5360\u7528&#xff0c;\u8bf7\u68c0\u67e5: ss -ltn | grep -E &#039;:9999|:5000&#039;&#034;<\/span><br \/>\n<span class=\"token keyword\">fi<\/span><\/p>\n<h5>\u5173\u952e\u903b\u8f91<\/h5>\n<ul>\n<li>PID \u6587\u4ef6\u4f18\u5148&#xff1a;\u8bfb .service.pid \/ .web.pid \u7cbe\u786e kill&#xff0c;\u907f\u514d\u8bef\u6740<\/li>\n<li>\u7aef\u53e3\u515c\u5e95&#xff1a;ss -ltnp \u6309 9999\/5000 \u627e PID&#xff0c;\u53ea\u9488\u5bf9\u672c\u9879\u76ee\u7aef\u53e3<\/li>\n<li>\u4e0d\u78b0 8888&#xff1a;csproject2 \u7684\u670d\u52a1\u5728 8888&#xff0c;\u672c\u811a\u672c\u5b8c\u5168\u4e0d\u6d89\u53ca\u8be5\u7aef\u53e3<\/li>\n<li>\u5148 TERM \u540e KILL&#xff1a;kill \u4f18\u96c5\u505c\u6b62&#xff0c;1 \u79d2\u540e\u4ecd\u5b58\u6d3b\u5219 kill -9<\/li>\n<\/ul>\n<hr \/>\n<h4>4.17 web\/requirements.txt \u2014 Python \u4f9d\u8d56<\/h4>\n<h5>\u5b8c\u6574\u5185\u5bb9<\/h5>\n<p>flask&gt;&#061;2.0<\/p>\n<h5>\u8bf4\u660e<\/h5>\n<ul>\n<li>flask&gt;&#061;2.0&#xff1a;Web \u6846\u67b6&#xff0c;\u7528\u4e8e\u8def\u7531\u3001session\u3001JSON \u54cd\u5e94<\/li>\n<li>\u65e0\u5176\u4ed6\u4f9d\u8d56&#xff1a;cp_client.py \u4ec5\u7528\u6807\u51c6\u5e93 socket \/ json \/ time&#xff0c;\u524d\u7aef\u7eaf\u539f\u751f JS \u65e0\u6846\u67b6<\/li>\n<li>\u5b89\u88c5&#xff1a;pip3 install -r requirements.txt&#xff08;start_all.sh \u5df2\u81ea\u52a8\u68c0\u6d4b\u5e76\u5b89\u88c5&#xff09;<\/li>\n<\/ul>\n<hr \/>\n<h3>\u4e94\u3001Bug \u4fee\u590d\u8bb0\u5f55&#xff08;\u672c\u6b21\u7248\u672c&#xff09;<\/h3>\n<table>\n<tr>Bug\u63cf\u8ff0\u72b6\u6001<\/tr>\n<tbody>\n<tr>\n<td>1<\/td>\n<td>Connect_Mysql_Server \u4e2d i \u4e0d\u9012\u5f52\u5bfc\u81f4\u6b7b\u5faa\u73af<\/td>\n<td>\u2705 \u5df2\u4fee<\/td>\n<\/tr>\n<tr>\n<td>2<\/td>\n<td>Run() \u6ca1\u628a mysql \u4fdd\u5b58\u5230 C_P_array[i].mysql_con<\/td>\n<td>\u2705 \u5df2\u4fee<\/td>\n<\/tr>\n<tr>\n<td>3<\/td>\n<td>status \u8bed\u4e49\u53cd&#xff08;true \u5e94\u8868\u793a\u53ef\u7528&#xff09;<\/td>\n<td>\u2705 \u5df2\u4fee<\/td>\n<\/tr>\n<tr>\n<td>4<\/td>\n<td>\u501f\u51fa\u540e\u6ca1\u8bbe status&#061;false<\/td>\n<td>\u2705 \u5df2\u4fee<\/td>\n<\/tr>\n<tr>\n<td>5<\/td>\n<td>Mysql_Client \u6784\u9020\u5931\u8d25\u4ecd\u6267\u884c SQL<\/td>\n<td>\u2705 \u5df2\u4fee<\/td>\n<\/tr>\n<tr>\n<td>6<\/td>\n<td>Thread_Pool \u6784\u9020 delete this<\/td>\n<td>\u2705 \u5df2\u4fee<\/td>\n<\/tr>\n<tr>\n<td>7<\/td>\n<td>\u501f\/\u8fd8\u4e0d\u52a0\u9501<\/td>\n<td>\u2705 \u5df2\u4fee<\/td>\n<\/tr>\n<tr>\n<td>A<\/td>\n<td>Mysql_Client::mysql_con \u6784\u9020\u65f6\u672a\u521d\u59cb\u5316\u4e3a nullptr<\/td>\n<td>\u2705 \u5df2\u4fee<\/td>\n<\/tr>\n<tr>\n<td>B<\/td>\n<td>day-time vs day_time \u5b57\u6bb5\u540d\u4e0d\u5339\u914d<\/td>\n<td>\u2705 \u5df2\u4fee<\/td>\n<\/tr>\n<tr>\n<td>C<\/td>\n<td>Connect_Pool::Run \u5931\u8d25\u65f6\u5c40\u90e8 mysql \u6307\u9488\u4e22\u5931<\/td>\n<td>\u26a0\ufe0f \u4e0d\u4fee&#xff08;OS \u515c\u5e95&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>D<\/td>\n<td>Tcp_Service::Init \u5c40\u90e8 file \u906e\u853d\u5168\u5c40<\/td>\n<td>\u2705 \u5df2\u4fee<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Web \u7248\u672c\u65b0\u589e\u4fee\u590d&#xff08;\u652f\u6491 Web \u754c\u9762\u7a33\u5b9a\u8fd0\u884c&#xff09;&#xff1a;<\/p>\n<table>\n<tr>Bug\u63cf\u8ff0\u72b6\u6001<\/tr>\n<tbody>\n<tr>\n<td>E<\/td>\n<td>main() \u672a\u5ffd\u7565 SIGPIPE&#xff0c;\u5ba2\u6237\u7aef\u63d0\u524d\u5173\u95ed\u8fde\u63a5\u65f6 send() \u89e6\u53d1 SIGPIPE \u6740\u6b7b service \u8fdb\u7a0b&#xff08;service \u53cd\u590d\u5d29\u6e83\u6839\u56e0&#xff09;<\/td>\n<td>\u2705 \u5df2\u4fee&#xff08;signal(SIGPIPE, SIG_IGN)&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>F<\/td>\n<td>val[&#034;type&#034;].asInt() \u5b57\u6bb5\u7f3a\u5931\/\u7c7b\u578b\u4e0d\u5339\u914d\u65f6\u629b Json::LogicError \u5bfc\u81f4 service terminate<\/td>\n<td>\u2705 \u5df2\u4fee&#xff08;try-catch \u5305\u4f4f JSON \u5904\u7406\u5757&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>G<\/td>\n<td>C_P_array &#061; new Mysql_cli[thread_num] \u672a\u503c\u521d\u59cb\u5316&#xff0c;mysql_con \u4e3a\u91ce\u503c\u5bfc\u81f4 Reset() \u6bb5\u9519\u8bef<\/td>\n<td>\u2705 \u5df2\u4fee&#xff08;\u52a0 () \u503c\u521d\u59cb\u5316&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>H<\/td>\n<td>service.h \u7684 Conf_path\/Sql_Conf_path \u786c\u7f16\u7801\u5230 csproject2\/ \u76ee\u5f55&#xff0c;service \u8bfb\u9519\u914d\u7f6e\u6587\u4ef6<\/td>\n<td>\u2705 \u5df2\u4fee&#xff08;\u6539\u6307\u5411 csproject2view\/&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>I<\/td>\n<td>Db_Show_My_Ticket \u8fd4\u56de\u7968\u56fa\u5b9a\u65e5\u671f t.DateTime \u800c\u975e\u9884\u5b9a\u65f6\u95f4 y.ctime<\/td>\n<td>\u2705 \u5df2\u4fee&#xff08;SQL \u6539\u7528 y.ctime&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>J<\/td>\n<td>stop_all.sh \u7528 pgrep -f &#039;python3 app.py&#039; \/ pgrep -x service \u5168\u5c40\u5339\u914d&#xff0c;\u8bef\u6740 csproject2 \u7684\u670d\u52a1<\/td>\n<td>\u2705 \u5df2\u4fee&#xff08;PID \u6587\u4ef6\u65b9\u5f0f&#xff0c;\u53ea kill \u672c\u9879\u76ee PID&#xff09;<\/td>\n<\/tr>\n<tr>\n<td>K<\/td>\n<td>\u524d\u7aef loadTickets()\/loadMine() \u7f3a return&#xff0c;loadCurrent().then() \u62ff\u5230 undefined \u629b TypeError&#xff0c;\u9884\u5b9a\u6210\u529f\u5374\u5f39&#034;\u7f51\u7edc\u9519\u8bef&#034;<\/td>\n<td>\u2705 \u5df2\u4fee&#xff08;\u52a0 return \u8fd4\u56de Promise&#xff09;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<hr \/>\n<h3>\u516d\u3001\u6539\u8fdb\u8def\u7ebf\u56fe&#xff08;\u6309\u4f18\u5148\u7ea7&#xff09;<\/h3>\n<table>\n<tr>\u4f18\u5148\u7ea7\u6539\u8fdb\u9879\u5f71\u54cd<\/tr>\n<tbody>\n<tr>\n<td>P0<\/td>\n<td>SQL \u6ce8\u5165\u4fee\u590d&#xff08;prepared statement&#xff09;<\/td>\n<td>\u5b89\u5168<\/td>\n<\/tr>\n<tr>\n<td>P0<\/td>\n<td>\u5bc6\u7801\u54c8\u5e0c\u5b58\u50a8<\/td>\n<td>\u5b89\u5168<\/td>\n<\/tr>\n<tr>\n<td>P1<\/td>\n<td>\u8fde\u63a5\u6c60\u52a0\u6761\u4ef6\u53d8\u91cf<\/td>\n<td>\u6027\u80fd\/\u4f53\u9a8c<\/td>\n<\/tr>\n<tr>\n<td>P1<\/td>\n<td>signal handler \u4f18\u96c5\u9000\u51fa<\/td>\n<td>\u5065\u58ee\u6027<\/td>\n<\/tr>\n<tr>\n<td>P1<\/td>\n<td>\u914d\u7f6e\u6587\u4ef6\u8def\u5f84\u53ef\u914d\u7f6e<\/td>\n<td>\u53ef\u79fb\u690d<\/td>\n<\/tr>\n<tr>\n<td>P2<\/td>\n<td>\u5934\u6587\u4ef6\u62c6\u5206<\/td>\n<td>\u53ef\u7ef4\u62a4\u6027<\/td>\n<\/tr>\n<tr>\n<td>P2<\/td>\n<td>\u5168\u5c40\u53d8\u91cf\u6539\u5355\u4f8b<\/td>\n<td>\u53ef\u7ef4\u62a4\u6027<\/td>\n<\/tr>\n<tr>\n<td>P2<\/td>\n<td>\u65e5\u5fd7\u5206\u7ea7<\/td>\n<td>\u8fd0\u7ef4<\/td>\n<\/tr>\n<tr>\n<td>P3<\/td>\n<td>\u5ba2\u6237\u7aef recv \u8d85\u65f6<\/td>\n<td>\u5065\u58ee\u6027<\/td>\n<\/tr>\n<tr>\n<td>P3<\/td>\n<td>\u7ba1\u7406\u5458\u540e\u53f0<\/td>\n<td>\u529f\u80fd\u6269\u5c55<\/td>\n<\/tr>\n<tr>\n<td>P3<\/td>\n<td>send\/recv \u6539 ET \u6a21\u5f0f<\/td>\n<td>\u6027\u80fd<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>\u9884\u7ea6\u7cfb\u7edf\u7248\u672c2 \u57fa\u4e8e C  epoll  pthread  MySQL \u7684\u591a\u7ebf\u7a0b\u5e76\u53d1\u9884\u7ea6\u7cfb\u7edf \u5305\u542b\u8fde\u63a5\u6c60\u3001\u7ebf\u7a0b\u6c60\u3001epoll I\/O \u591a\u8def\u590d\u7528\u3001JSON \u534f\u8bae\u3001SQL \u4e8b\u52a1 \u4e00\u3001\u9879\u76ee\u6982\u8ff0<br \/>\n1.1 \u9879\u76ee\u5b9a\u4f4d<br \/>\n\u4e00\u4e2a\u652f\u6301\u591a\u5ba2\u6237\u7aef\u540c\u65f6\u5728\u7ebf\u7684\u7968\u52a1\u9884\u7ea6\u7cfb\u7edf&#xff0c;\u5ba2\u6237\u7aef\u901a\u8fc7 TCP \u957f\u8fde\u63a5\u4e0e\u670d\u52a1\u7aef\u4ea4\u4e92&#xff0c;\u670d\u52a1\u7aef\u4f7f\u7528 epoll \u76d1\u542c I\/O \u4e8b\u4ef6&#xff0c;\u5e76\u901a\u8fc7\u7ebf\u7a0b\u6c60\u628a\u4efb\u52a1\u4ea4\u7ed9 worker \u7ebf\u7a0b\u5904\u7406&#xff0c;worker \u7ebf\u7a0b\u901a\u8fc7\u8fde\u63a5\u6c60\u501f\u7528 MySQ<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[55,153,81,100,43],"topic":[],"class_list":["post-97855","post","type-post","status-publish","format-standard","hentry","category-server","tag-c","tag-flask","tag-python","tag-100","tag-43"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u9884\u7ea6\u7cfb\u7edf\u7248\u672c2\uff08pyhton+flask\u53ef\u89c6\u5316\u7248\u672c\uff09 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/97855.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u9884\u7ea6\u7cfb\u7edf\u7248\u672c2\uff08pyhton+flask\u53ef\u89c6\u5316\u7248\u672c\uff09 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u9884\u7ea6\u7cfb\u7edf\u7248\u672c2 \u57fa\u4e8e C epoll pthread MySQL \u7684\u591a\u7ebf\u7a0b\u5e76\u53d1\u9884\u7ea6\u7cfb\u7edf \u5305\u542b\u8fde\u63a5\u6c60\u3001\u7ebf\u7a0b\u6c60\u3001epoll I\/O \u591a\u8def\u590d\u7528\u3001JSON \u534f\u8bae\u3001SQL \u4e8b\u52a1 \u4e00\u3001\u9879\u76ee\u6982\u8ff0 1.1 \u9879\u76ee\u5b9a\u4f4d \u4e00\u4e2a\u652f\u6301\u591a\u5ba2\u6237\u7aef\u540c\u65f6\u5728\u7ebf\u7684\u7968\u52a1\u9884\u7ea6\u7cfb\u7edf&#xff0c;\u5ba2\u6237\u7aef\u901a\u8fc7 TCP \u957f\u8fde\u63a5\u4e0e\u670d\u52a1\u7aef\u4ea4\u4e92&#xff0c;\u670d\u52a1\u7aef\u4f7f\u7528 epoll \u76d1\u542c I\/O \u4e8b\u4ef6&#xff0c;\u5e76\u901a\u8fc7\u7ebf\u7a0b\u6c60\u628a\u4efb\u52a1\u4ea4\u7ed9 worker \u7ebf\u7a0b\u5904\u7406&#xff0c;worker \u7ebf\u7a0b\u901a\u8fc7\u8fde\u63a5\u6c60\u501f\u7528 MySQ\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/97855.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2026-08-30T05:32:43+00:00\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"61 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/97855.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/97855.html\",\"name\":\"\u9884\u7ea6\u7cfb\u7edf\u7248\u672c2\uff08pyhton+flask\u53ef\u89c6\u5316\u7248\u672c\uff09 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2026-08-30T05:32:43+00:00\",\"dateModified\":\"2026-08-30T05:32:43+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/97855.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/97855.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/97855.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u9884\u7ea6\u7cfb\u7edf\u7248\u672c2\uff08pyhton+flask\u53ef\u89c6\u5316\u7248\u672c\uff09\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u9884\u7ea6\u7cfb\u7edf\u7248\u672c2\uff08pyhton+flask\u53ef\u89c6\u5316\u7248\u672c\uff09 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/97855.html","og_locale":"zh_CN","og_type":"article","og_title":"\u9884\u7ea6\u7cfb\u7edf\u7248\u672c2\uff08pyhton+flask\u53ef\u89c6\u5316\u7248\u672c\uff09 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u9884\u7ea6\u7cfb\u7edf\u7248\u672c2 \u57fa\u4e8e C epoll pthread MySQL \u7684\u591a\u7ebf\u7a0b\u5e76\u53d1\u9884\u7ea6\u7cfb\u7edf \u5305\u542b\u8fde\u63a5\u6c60\u3001\u7ebf\u7a0b\u6c60\u3001epoll I\/O \u591a\u8def\u590d\u7528\u3001JSON \u534f\u8bae\u3001SQL \u4e8b\u52a1 \u4e00\u3001\u9879\u76ee\u6982\u8ff0 1.1 \u9879\u76ee\u5b9a\u4f4d \u4e00\u4e2a\u652f\u6301\u591a\u5ba2\u6237\u7aef\u540c\u65f6\u5728\u7ebf\u7684\u7968\u52a1\u9884\u7ea6\u7cfb\u7edf&#xff0c;\u5ba2\u6237\u7aef\u901a\u8fc7 TCP \u957f\u8fde\u63a5\u4e0e\u670d\u52a1\u7aef\u4ea4\u4e92&#xff0c;\u670d\u52a1\u7aef\u4f7f\u7528 epoll \u76d1\u542c I\/O \u4e8b\u4ef6&#xff0c;\u5e76\u901a\u8fc7\u7ebf\u7a0b\u6c60\u628a\u4efb\u52a1\u4ea4\u7ed9 worker \u7ebf\u7a0b\u5904\u7406&#xff0c;worker \u7ebf\u7a0b\u901a\u8fc7\u8fde\u63a5\u6c60\u501f\u7528 MySQ","og_url":"https:\/\/www.wsisp.com\/helps\/97855.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2026-08-30T05:32:43+00:00","author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"61 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/97855.html","url":"https:\/\/www.wsisp.com\/helps\/97855.html","name":"\u9884\u7ea6\u7cfb\u7edf\u7248\u672c2\uff08pyhton+flask\u53ef\u89c6\u5316\u7248\u672c\uff09 - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2026-08-30T05:32:43+00:00","dateModified":"2026-08-30T05:32:43+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/97855.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/97855.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/97855.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"\u9884\u7ea6\u7cfb\u7edf\u7248\u672c2\uff08pyhton+flask\u53ef\u89c6\u5316\u7248\u672c\uff09"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/97855","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=97855"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/97855\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=97855"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=97855"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=97855"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=97855"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}