Skip to content

Instantly share code, notes, and snippets.

@le717
Last active July 14, 2019 22:14
Show Gist options
  • Save le717/bf4b05fe862dc86be4d29e63d4fab8fa to your computer and use it in GitHub Desktop.
Save le717/bf4b05fe862dc86be4d29e63d4fab8fa to your computer and use it in GitHub Desktop.
LEGO Backlot dummy server. Used to save/load player progress.
"""
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