Chui Tey | 5d2af63 | 2002-05-26 13:36:41 +0000 | [diff] [blame] | 1 | import sys |
| 2 | import rpc |
| 3 | |
| 4 | def main(): |
| 5 | port = 8833 |
| 6 | if sys.argv[1:]: |
| 7 | port = int(sys.argv[1]) |
| 8 | sys.argv[:] = [""] |
| 9 | addr = ("localhost", port) |
| 10 | svr = rpc.RPCServer(addr, MyHandler) |
| 11 | svr.handle_request() # A single request only |
| 12 | |
| 13 | class MyHandler(rpc.RPCHandler): |
| 14 | |
| 15 | def handle(self): |
| 16 | executive = Executive(self) |
| 17 | self.register("exec", executive) |
| 18 | sys.stdin = self.get_remote_proxy("stdin") |
| 19 | sys.stdout = self.get_remote_proxy("stdout") |
| 20 | sys.stderr = self.get_remote_proxy("stderr") |
| 21 | rpc.RPCHandler.handle(self) |
| 22 | |
| 23 | class Executive: |
| 24 | |
| 25 | def __init__(self, rpchandler): |
| 26 | self.conn = rpchandler |
| 27 | import __main__ |
| 28 | self.locals = __main__.__dict__ |
| 29 | |
| 30 | def runcode(self, code): |
| 31 | exec code in self.locals |
| 32 | |
| 33 | def start_debugger(self, gui_oid): |
| 34 | import RemoteDebugger |
| 35 | return RemoteDebugger.start_debugger(self.conn, gui_oid) |
| 36 | |
| 37 | def stackviewer(self, flist_oid=None): |
| 38 | if not hasattr(sys, "last_traceback"): |
| 39 | return None |
| 40 | flist = None |
| 41 | if flist_oid is not None: |
| 42 | flist = self.conn.get_remote_proxy(flist_oid) |
| 43 | import RemoteObjectBrowser |
| 44 | import StackViewer |
| 45 | tb = sys.last_traceback |
| 46 | while tb and tb.tb_frame.f_globals["__name__"] in ["rpc", "run"]: |
| 47 | tb = tb.tb_next |
| 48 | item = StackViewer.StackTreeItem(flist, tb) |
| 49 | return RemoteObjectBrowser.remote_object_tree_item(item) |