Last active
July 14, 2019 22:14
-
-
Save le717/bf4b05fe862dc86be4d29e63d4fab8fa to your computer and use it in GitHub Desktop.
LEGO Backlot dummy server. Used to save/load player progress.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
""" | |
LEGO Backlot dummy server. | |
Used to save/load player progress. | |
Original PHP code by JrMasterModelBuilder. | |
Ported to Python by le717. | |
""" | |
from cgi import FieldStorage | |
from http.server import HTTPServer, BaseHTTPRequestHandler | |
from io import BytesIO | |
from os.path import exists | |
class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): | |
def _set_headers(self): | |
"""Set some headers to prevent caching.""" | |
self.send_response(200) | |
self.send_header('Cache-Control', 'no-cache') | |
self.send_header('Expires', '-1') | |
self.send_header('Content-Type', 'text/plain') | |
self.end_headers() | |
def do_POST(self): | |
# Handle the POST keys | |
self._set_headers() | |
form = FieldStorage( | |
fp=self.rfile, | |
headers=self.headers, | |
environ={'REQUEST_METHOD': 'POST'} | |
) | |
# Start the response and get the player's action | |
response = BytesIO() | |
action = form.getvalue("action") | |
# The player is loading the game | |
if action == "GetUserInfo": | |
current_level = "0" | |
# If they have an existing save, use it | |
if exists("savegame.txt"): | |
with open("savegame.txt", "rt") as f: | |
current_level = f.readline().strip() | |
# Construct the login query string with the current level | |
login_string = f"&login=1&guid=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX&level={current_level}&" | |
response.write(bytes(login_string, encoding="utf-8")) | |
# The player is saving the game | |
elif action == "SaveGame": | |
# Write the level they are on to file | |
current_level = form.getvalue("LEVEL") | |
with open("savegame.txt", "wt") as f: | |
f.write(current_level) | |
response.write(b'<RESPONSE STATUS="OK"/>') | |
# A request without an action was made | |
else: | |
response.write(b'<RESPONSE STATUS="ERROR">No script action passed in.</RESPONSE>') | |
# Send out the response | |
self.wfile.write(response.getvalue()) | |
# Start the server | |
if __name__ == "__main__": | |
httpd = HTTPServer(('localhost', 9090), SimpleHTTPRequestHandler) | |
httpd.serve_forever() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment