def on_packet(self, packet): if not self.root: # Yeah these should be runtime errors. assert packet["from"] == "root" assert "applicationType" in packet from fronts import RootFront self.root = RootFront(self, packet) d = self.root.protocol_description() d.addCallback(self.register_actor_descriptions) d.addErrback(self.describe_failed) return if packet["from"] == "root": front = self.root else: front = self.get_front(packet["from"]) front.on_packet(packet)
class FirefoxDevtoolsClient(object): def __init__(self, conn): self.root = None self.conn = conn self.conn.on_packet += self.on_packet self.on_connected = Event() self.pools = set() def add_pool(self, pool): self.pools.add(pool) def remove_pool(self, pool): self.pools.discard(pool) def pool_for(self, actor_id): for pool in self.pools: if pool.has_front(actor_id): return pool return None def get_front(self, actor_id): pool = self.pool_for(actor_id) if not pool: return None return pool.get_front(actor_id) def on_packet(self, packet): if not self.root: # Yeah these should be runtime errors. assert packet["from"] == "root" assert "applicationType" in packet from fronts import RootFront self.root = RootFront(self, packet) d = self.root.protocol_description() d.addCallback(self.register_actor_descriptions) d.addErrback(self.describe_failed) return if packet["from"] == "root": front = self.root else: front = self.get_front(packet["from"]) front.on_packet(packet) def describe_failed(self, e): print "Error listing actor descriptions: %s" % (e,) import protodesc #self.register_actor_descriptions(protodesc.actor_descriptions) def register_actor_descriptions(self, descriptions): for desc in descriptions["types"].values(): type_name = desc["typeName"] category = desc["category"] if category == "actor": t = get_type(desc["typeName"]) if isinstance(t, ActorType): concrete = t.cls elif isinstance(t, PlaceholderType) and t.concrete: concrete = t.concrete.cls else: concrete = type( str(type_name), (Front,), {"typeName": type_name}) concrete.implement_actor(desc) continue if type_exists(type_name): continue if category == "dict": add_type(DictType(type_name, desc["specializations"])) self.on_connected.emit(self) def send_packet(self, packet): self.conn.send_packet(packet)
class FirefoxDevtoolsClient(object): def __init__(self, conn): self.root = None self.conn = conn self.conn.on_packet += self.on_packet self.on_connected = Event() self.pools = set() def add_pool(self, pool): self.pools.add(pool) def remove_pool(self, pool): self.pools.discard(pool) def pool_for(self, actor_id): for pool in self.pools: if pool.has_front(actor_id): return pool return None def get_front(self, actor_id): pool = self.pool_for(actor_id) if not pool: return None return pool.get_front(actor_id) def on_packet(self, packet): if not self.root: # Yeah these should be runtime errors. assert packet["from"] == "root" assert "applicationType" in packet from fronts import RootFront self.root = RootFront(self, packet) d = self.root.protocol_description() d.addCallback(self.register_actor_descriptions) d.addErrback(self.describe_failed) return if packet["from"] == "root": front = self.root else: front = self.get_front(packet["from"]) front.on_packet(packet) def describe_failed(self, e): print "Error listing actor descriptions: %s" % (e, ) import protodesc #self.register_actor_descriptions(protodesc.actor_descriptions) def register_actor_descriptions(self, descriptions): for desc in descriptions["types"].values(): type_name = desc["typeName"] category = desc["category"] if category == "actor": t = get_type(desc["typeName"]) if isinstance(t, ActorType): concrete = t.cls elif isinstance(t, PlaceholderType) and t.concrete: concrete = t.concrete.cls else: concrete = type(str(type_name), (Front, ), {"typeName": type_name}) concrete.implement_actor(desc) continue if type_exists(type_name): continue if category == "dict": add_type(DictType(type_name, desc["specializations"])) self.on_connected.emit(self) def send_packet(self, packet): self.conn.send_packet(packet)