| OLD | NEW |
| (Empty) |
| 1 import BaseHTTPServer | |
| 2 import base64 | |
| 3 import json | |
| 4 import logging | |
| 5 import string | |
| 6 import subprocess | |
| 7 | |
| 8 HOST_NAME = 'localhost' | |
| 9 PORT_NUMBER = 8765 | |
| 10 | |
| 11 def runCode(usercode): | |
| 12 f = open('template.cpp', 'rb') | |
| 13 template = string.Template(f.read()) | |
| 14 f.close() | |
| 15 | |
| 16 code = template.substitute(usercode=usercode) | |
| 17 | |
| 18 f = open('result.cpp', 'wb') | |
| 19 f.write(code) | |
| 20 f.close() | |
| 21 | |
| 22 msg = "" | |
| 23 img = "" | |
| 24 try: | |
| 25 logging.info("compiling") | |
| 26 msg = subprocess.check_output('ninja -C ../../out/Debug webtry'.split()) | |
| 27 try: | |
| 28 logging.info("running") | |
| 29 msg = subprocess.check_output('../../out/Debug/webtry'.split()) | |
| 30 f = open('foo.png', 'rb') | |
| 31 img = base64.b64encode(f.read()) | |
| 32 f.close() | |
| 33 except subprocess.CalledProcessError as e: | |
| 34 logging.info(e) | |
| 35 msg = e.output | |
| 36 except subprocess.CalledProcessError as e: | |
| 37 logging.info(e) | |
| 38 msg = e.output | |
| 39 | |
| 40 retval = { | |
| 41 'message': msg | |
| 42 } | |
| 43 if img: | |
| 44 retval['img'] = img | |
| 45 return retval | |
| 46 | |
| 47 class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler): | |
| 48 def do_POST(self): | |
| 49 logging.info("POST") | |
| 50 body = "" | |
| 51 l = self.rfile.readline() | |
| 52 while l.strip() != "EOF": | |
| 53 body += l | |
| 54 l = self.rfile.readline() | |
| 55 self.send_response(200) | |
| 56 self.send_header("Content-type", "application/json") | |
| 57 self.end_headers() | |
| 58 resp = runCode(body) | |
| 59 self.wfile.write(json.dumps(resp)) | |
| 60 self.end_headers() | |
| 61 | |
| 62 def do_GET(self): | |
| 63 """Respond to a GET request.""" | |
| 64 self.send_response(200) | |
| 65 self.send_header("Content-type", "text/html") | |
| 66 self.end_headers() | |
| 67 f = open('index.html', 'rb') | |
| 68 self.wfile.write(f.read()) | |
| 69 f.close() | |
| 70 | |
| 71 if __name__ == '__main__': | |
| 72 server_class = BaseHTTPServer.HTTPServer | |
| 73 httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler) | |
| 74 logging.info("Server Start: %s:%s" % (HOST_NAME, PORT_NUMBER)) | |
| 75 try: | |
| 76 httpd.serve_forever() | |
| 77 except KeyboardInterrupt: | |
| 78 pass | |
| 79 httpd.server_close() | |
| OLD | NEW |