blob: 9f26c1690f144ccaf504a8c40fa6f0dd604feda2 [file] [log] [blame]
Chui Tey5d2af632002-05-26 13:36:41 +00001import sys
2import rpc
3
4def 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
13class 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
23class Executive:
24
25 def __init__(self, rpchandler):
Kurt B. Kaiserffd3a422002-06-26 02:32:09 +000026 self.rpchandler = rpchandler
Chui Tey5d2af632002-05-26 13:36:41 +000027 import __main__
28 self.locals = __main__.__dict__
29
30 def runcode(self, code):
31 exec code in self.locals
32
Kurt B. Kaiser0e3a5772002-06-16 03:32:24 +000033 def start_the_debugger(self, gui_adap_oid):
Chui Tey5d2af632002-05-26 13:36:41 +000034 import RemoteDebugger
Kurt B. Kaiserffd3a422002-06-26 02:32:09 +000035 return RemoteDebugger.start_debugger(self.rpchandler, gui_adap_oid)
36
37 def stop_the_debugger(self, idb_adap_oid):
38 "Unregister the Idb Adapter. Link objects and Idb then subject to GC"
39 self.rpchandler.unregister(idb_adap_oid)
Chui Tey5d2af632002-05-26 13:36:41 +000040
41 def stackviewer(self, flist_oid=None):
42 if not hasattr(sys, "last_traceback"):
43 return None
44 flist = None
45 if flist_oid is not None:
Kurt B. Kaiserffd3a422002-06-26 02:32:09 +000046 flist = self.rpchandler.get_remote_proxy(flist_oid)
Chui Tey5d2af632002-05-26 13:36:41 +000047 import RemoteObjectBrowser
48 import StackViewer
49 tb = sys.last_traceback
50 while tb and tb.tb_frame.f_globals["__name__"] in ["rpc", "run"]:
51 tb = tb.tb_next
52 item = StackViewer.StackTreeItem(flist, tb)
53 return RemoteObjectBrowser.remote_object_tree_item(item)