|
6 | 6 | """ |
7 | 7 |
|
8 | 8 | from sqlite3 import connect, OperationalError |
9 | | -from socket import socket, timeout |
10 | 9 | from time import localtime |
11 | 10 | from os import path, system |
12 | 11 | from sys import exit as sysexit |
13 | 12 | from myMod import mbox |
| 13 | +from websocket_server import WebsocketServer |
| 14 | +from urllib.parse import unquote |
14 | 15 |
|
15 | | -system("mode con cols=72 lines=50") |
16 | | -sock = socket(2, 1) #socket.AF_INET=2, socket.SOCK_STREAM=1 |
17 | | -sock.bind(('0.0.0.0', 8001)) |
18 | | -sock.listen(5) |
| 16 | +system("mode con cols=72 lines=30") |
| 17 | +server = WebsocketServer(8001,'0.0.0.0') |
19 | 18 | if localtime().tm_mon < 8: |
20 | 19 | dbpath = "./hwmy"+str(localtime().tm_year-2)[-2:]+".db" |
21 | 20 | else: |
|
24 | 23 | print('No database file in exe path, check please!') |
25 | 24 | mbox('错误','未能在程序目录下找到数据库文件{}!\n请查验后重试!'.format(dbpath[2:]),'error') |
26 | 25 | sysexit(0) |
27 | | -conn = connect(dbpath) |
28 | | -curs = conn.cursor() |
29 | | -while True: |
30 | | - connection,address = sock.accept() |
31 | | - try: |
32 | | - connection.settimeout(5) |
33 | | - sql = connection.recv(1024).decode('utf-8') |
34 | | - if len(sql)>0 and sql[:6]!='UPDATE': |
35 | | - try: |
36 | | - curs.execute(sql) |
37 | | - conn.commit() |
38 | | - datas = curs.fetchall() |
39 | | - connection.send(str(datas).encode('gbk')) |
40 | | - except OperationalError as e: |
41 | | - connection.send(str(e).encode('gbk')) |
42 | | - elif len(sql)>0 and sql[:6]=='UPDATE': |
43 | | - print(sql[7:11]) |
44 | | - if sql[7:11] =='list': # 批量更新成绩 |
45 | | - scores = eval(sql[11:]) |
46 | | - #print(scores) |
47 | | - for i in range(len(scores)): |
48 | | - curs.execute('UPDATE students SET score = '+str(scores[i][1])+' WHERE ID = "'+scores[i][0]+'"') |
49 | | - else: |
50 | | - curs.execute(sql) |
| 26 | + |
| 27 | +def message_received(client, server, sqlcmd): |
| 28 | + global dbpath |
| 29 | + sqlcmd = unquote(sqlcmd) |
| 30 | + print('SQL command:',sqlcmd) |
| 31 | + conn = connect(dbpath) |
| 32 | + curs = conn.cursor() |
| 33 | + if len(sqlcmd)>0 and sqlcmd[:6].upper()=='SELECT': |
| 34 | + try: |
| 35 | + curs.execute(sqlcmd) |
51 | 36 | conn.commit() |
52 | | - connection.send('"OK"'.encode('gbk')) |
| 37 | + datas = list(map(list,curs.fetchall())) |
| 38 | + except OperationalError as e: |
| 39 | + datas = str(e) |
| 40 | + elif len(sqlcmd)>0 and sqlcmd[:6].upper()=='UPDATE': |
| 41 | + if sqlcmd[7:11].lower() =='list': # 批量更新成绩 |
| 42 | + scores = eval(sqlcmd[11:]) |
| 43 | + #print(scores) |
| 44 | + for i in range(len(scores)): |
| 45 | + curs.execute('UPDATE students SET score = '+str(scores[i][1])+' WHERE ID = "'+scores[i][0]+'"') |
| 46 | + print('更新{}条记录!'.format(str(len(scores)))) |
53 | 47 | else: |
54 | | - connection.send('"Sql command format error!"'.encode('gbk')) |
55 | | - except timeout: |
56 | | - print('time out') |
57 | | - connection.close() |
| 48 | + curs.execute(sqlcmd) |
| 49 | + conn.commit() |
| 50 | + datas = '"OK"' |
| 51 | + else: |
| 52 | + datas = '"Sql command format error!"' |
| 53 | + server.send_message(client,str(datas)) |
| 54 | + conn.close() |
| 55 | + |
| 56 | +server.set_fn_message_received(message_received) |
| 57 | +server.run_forever() |
0 commit comments