예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
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)
예제 #4
0
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)