# HG changeset patch # User Simon Cross # Date 1258834300 0 # Node ID 5d74d0e4a4cca24393f01b53511cc30893b399b1 # Parent 938498b8cd03fcd3f31795e9fc91650702768bf9 Switch to XML (RPC) for save game encoding. diff -r 938498b8cd03 -r 5d74d0e4a4cc gamelib/serializer.py --- a/gamelib/serializer.py Sat Nov 21 20:11:08 2009 +0000 +++ b/gamelib/serializer.py Sat Nov 21 20:11:40 2009 +0000 @@ -11,7 +11,7 @@ if refs is None: refs = set() - refid = id(item) + refid = str(id(item)) if refid in refs: return { 'byref': refid } diff -r 938498b8cd03 -r 5d74d0e4a4cc gamelib/toolbar.py --- a/gamelib/toolbar.py Sat Nov 21 20:11:08 2009 +0000 +++ b/gamelib/toolbar.py Sat Nov 21 20:11:40 2009 +0000 @@ -1,4 +1,5 @@ import pygame +import xmlrpclib from pgu import gui import icons @@ -7,10 +8,6 @@ import equipment import cursors import engine -try: - import json -except ImportError: - import simplejson as json class OpaqueLabel(gui.Label): def __init__(self, value, **params): @@ -166,7 +163,11 @@ if dialog.value is None: return data = self.gameboard.save_game() - open(dialog.value, "wb").write(json.dumps(data)) + xml = xmlrpclib.dumps((data,), "foxassault") + try: + open(dialog.value, "wb").write(xml) + except Exception, e: + print "Failed to save game: %s" % (e,) dialog.connect(gui.CHANGE, save) dialog.open() @@ -178,7 +179,16 @@ def restore(): if dialog.value is None: return - data = json.loads(open(dialog.value, "rb").read()) + try: + xml = open(dialog.value, "rb").read() + params, methodname = xmlrpclib.loads(xml) + if methodname != "foxassault": + raise ValueError("Bad XML save game.") + data = params[0] + except Exception, e: + "Failed to load game: %s" % (e,) + return + self.gameboard.restore_game(data) dialog.connect(gui.CHANGE, restore)