def client_loop(f): def writecode(code): #print '[code: %r]' % (code,) f.write(repr(code) + '\n') pool = RemoteObjectPool(writecode) netRepr = NetRepr(pool) netrepr = netRepr.netrepr def neteval(s): return eval(s, pool.namespace, pool.namespace) while True: code = f.readline().rstrip() pool.push() try: if not code: break command = eval(code) basic = eval(command[0]) if basic == 'expect': seq = eval(command[1]) name = eval(command[2]) args = map(neteval, command[3:]) code = None rval = None if name == 'RemoteConsole.raw_input': try: rval = raw_input(*args) except EOFError: code = 'raise EOFError' elif name == 'RemoteConsole.write': sys.stdout.write(ensure_utf8(args[0])) elif name == 'RemoteConsole.displayhook': pass obj = args[0] if obj is None: pass elif isinstance(obj, RemoteObjectReference): writecode('interp.write(repr(%s) + "\\n")' % (netrepr(obj), )) else: print repr(obj) elif name.startswith('RemoteFileLike.'): fh = getattr(sys, args[0]) meth = getattr(fh, name[len('RemoteFileLike.'):]) rval = meth(*map(ensure_utf8, args[1:])) else: print name, args if code is None: code = '__result__[%r] = %r' % (seq, rval) writecode(code) finally: pool.pop()
def connectionEstablished_(self, connection): #NSLog(u'connectionEstablished_') self.connection = connection self.pool = RemoteObjectPool(self.writeCode_) self.netReprCenter = NetRepr(self.pool)