Example #1
0
    def run(self):
        while True:
            # import rpdb2; rpdb2.start_embedded_debugger("foo")
            try:
                size = int(self.stdin.readline().strip())
                message = self.stdin.read(size)
                type, rest = message.split(" ", 1)
                if type == "SERVE":
                    try:
                        type, data = self.tk.serve(rest)
                        result = {'type':type, 'data':data.encode('base64')}
                    except KeyError, e:
                        result = {}
                elif type == "HANDLE":
                    # print rest
                    method, args_str = rest.split(" ", 1)
                    ## make sure we're not passing unicode keys as keyword
                    ## arguments
                    args = un_unicode(simplejson.loads(args_str))
                    result = self.tk.handle(method, **args)
                else:
                    ## wtf?
                    pass

                message = simplejson.dumps(result)
Example #2
0
    def handle(self, method, **args):
        if method == "start":
            if len(self._controls) > 1:
                # app is already running, resume session by restoring UI
                ## restore is a recursive process, start with the root
                ## and toplevels
                self._root.restore()
                ## iterate over toplevels 
                #for id, c in self._controls.items():
                #    c.restore()
            else:
                self.app.run(self)

            return dict(state="started", 
                        config=dict(debug=self.debug,
                                    polling=self.polling,
                                    title=self.title)
                       )
        if method == "task" and 'queue' in args:
            queue = json.loads(args['queue'])
            for task in queue:
                tasktype = task['method']
                id = int(task['id'])
                if tasktype == "event":
                    eventtype = task.get('type')
                    if eventtype == "timer":
                        self.timers.fire(id)
                    else:
                        control = self._controls[id]

                        ## A disabled control shouldn't receive events
                        if not control.enabled:
                            continue

                        dispatcher(eventtype, control, **un_unicode(task.get('data', {})))
                elif tasktype == "sync":
                    control = self._controls[id]
                    control.sync(**un_unicode(task.get('data', {})))

        ## any other case, including "pop" which is not handled explicitly
        ## right now.
        if self._queue:
            tasks = [x.task() for x in self._queue]
            self._queue = []
            return tasks
        return []