-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest-server.py
More file actions
80 lines (63 loc) · 2.69 KB
/
Copy pathtest-server.py
File metadata and controls
80 lines (63 loc) · 2.69 KB
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
72
73
74
75
76
77
78
79
80
from scion.SCXML import urlToModel,createInterpreter
from BaseHTTPServer import HTTPServer,BaseHTTPRequestHandler
import json
import sys
import traceback
import pdb
sessionCounter = 0
sessions = {}
timeouts = {}
timeoutMs = 5000
class SCIONTestHandler(BaseHTTPRequestHandler):
def do_POST(self):
global sessionCounter, sessions, timeouts, timeoutMs
try:
s = self.rfile.read(int(self.headers['Content-Length']))
reqJson = json.loads(s)
if reqJson.has_key("load"):
print "Loading new statechart"
model = urlToModel(reqJson["load"].encode("utf8"))
interpreter = createInterpreter(model)
sessionToken = sessionCounter
sessionCounter = sessionCounter + 1
sessions[sessionToken] = interpreter
conf = interpreter.start()
self.send_response(200)
self.end_headers()
json.dump({
"sessionToken" : sessionToken,
"nextConfiguration" : list(conf)
},self.wfile)
self.wfile.close()
#TODO: deal with timeouts
#timeouts[sessionToken] = setTimeout(function(){cleanUp(sessionToken)},timeoutMs)
elif reqJson.has_key("event") and reqJson.has_key("sessionToken") and type(reqJson["sessionToken"]) is int:
print "sending event to statechart",reqJson["event"]
sessionToken = reqJson["sessionToken"]
nextConfiguration = sessions[sessionToken].gen(reqJson["event"])
print 'nextConfiguration',nextConfiguration
self.send_response(200)
self.end_headers()
json.dump({ "nextConfiguration" : list(nextConfiguration) },self.wfile)
self.wfile.close()
#TODO: deal with timeouts
#clearTimeout(timeouts[sessionToken])
#timeouts[sessionToken] = setTimeout(function(){cleanUp(sessionToken)},timeoutMs)
else:
#unrecognized. send back an error
self.send_response(400)
self.end_headers()
self.wfile.write("Unrecognized request.")
self.wfile.close()
except:
e = sys.exc_info()[0]
print "Unexpected error:", e
print sys.exc_info()
traceback.print_tb(sys.exc_info()[2],file=sys.stdout)
self.send_response(500)
self.end_headers()
self.wfile.write(e)
self.wfile.close()
server_address = ('', 42000)
httpd = HTTPServer(server_address, SCIONTestHandler)
httpd.serve_forever()