Mercurial > rinkhals
changeset 450:5d74d0e4a4cc
Switch to XML (RPC) for save game encoding.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Sat, 21 Nov 2009 20:11:40 +0000 |
parents | 938498b8cd03 |
children | d0f586647dfa |
files | gamelib/serializer.py gamelib/toolbar.py |
diffstat | 2 files changed, 17 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
--- 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 }
--- 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)