-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.py
71 lines (60 loc) · 2.16 KB
/
server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import time, socket
import mock_machine as machine
DEBUG = False
DEBUG = True
pins = [machine.Pin(i, machine.Pin.IN) for i in (0, 2, 4, 5, 12, 13, 14, 15)]
#here are some mocked test settings
pins[0].value = True #sets pin "0" to high
pins[3].value = True #sets pin "5" to high
doc_template = """
<!DOCTYPE html>
<html>
<head> <title>ESP8266 Pins</title> </head>
<body> <h1>ESP8266 Pins</h1>
<table border="1"> <tr><th>Pin</th><th>Value</th></tr> %s </table>
</body>
</html>
"""
doc_template = doc_template.strip() #remove troublesome leading (and trailing) whitespace
current_date = time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime())
headers = ["HTTP/1.1 200 OK",
"Date: %s" % current_date,
"Server: Simple-Python-HTTP-Server",
"Content-Length: {content_length}", #hold this place with a formatter
"Content-Type: text/html",
"Connection: close",
"" #NOTE blank line needed!
]
headers = "\r\n".join(headers)
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
try:
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # MIGHT NOT WORK IN UPYTHON
s.bind(addr)
s.listen(1)
print('listening on', addr)
while True:
cl, addr = s.accept()
print('client connected from', addr)
cl_file = cl.makefile('rwb', 0)
while True:
line = cl_file.readline()
if DEBUG:
print("CLIENT: %s" % line)
if not line or line == b'\r\n':
break
rows = ['<tr><td>%s</td><td>%d</td></tr>' % (str(p), p.value()) for p in pins]
table_content = ' '.join(rows) #empty line cause row to indent properly
doc = doc_template % table_content
doc_bytes = bytes(doc,'utf8')
headers = headers.format(content_length = len(doc_bytes)) #now assign the content's length
if DEBUG:
print(repr(headers))
print(repr(doc))
cl.send(bytes(headers,'utf8'))
cl.send(bytes("\r\n",'utf8')) #IMPORTANT must have a blank line here
cl.send(doc_bytes)
cl_file.close()
cl.close()
finally:
s.close()