# supercloud.py # # Superboard II cloud service. # Uses Redis as a data store for superboard instances and for work queues import sys sys.path.append("../Runner") from msgservice import SuperService import struct import programmanager import instancemanager import jobqueue from superprogram import SuperProgram class CloudService(SuperService): def __init__(self,*args,pm,im,jobqueue): super().__init__(*args) self.pm = pm self.im = im self.jobqueue = jobqueue def handle_request(self,requestno): ''' Handle cloud requests. Requests are specified in the reserved BASIC variable C$. The following commands are implemented: SAVE NAME - Save the requesting program to NAME CREATE NAME - Create a new instance NAME LOAD NAME - Load a saved program ''' c = self.getvar("C$") print(c) args = c.split(None,1) print(args) if args[0][:1] == "S": # SAVE ret = self.do_save(args[1]) elif args[0][:1] == "L": # LOAD ret = self.do_load(args[1]) elif args[0][:1] == "C": # CREATE INSTANCE ret = self.do_create(args[1]) elif args[0][:1] == '.': # Instance command ret = self.do_instance(args[0][1:],args[1]) else: ret = -1 return ret def do_save(self,name): ''' Save an instance of the Superboard to Redis ''' print("Saving", name) # Get information about the BASIC workspace basic_work = self.peek(0x79,55) print(basic_work) # Extract some information about BASIC data start_of_program, = struct.unpack("