示例#1
0
    def __init__(self,
                 brokers="",
                 proxy_brokers="",
                 rx_port=5012,
                 tx_port=5013):
        """
        brokers / proxy brokers: additional brokers / proxies to connect to

            example: brokers="192.168.2.55:8012:8013 localhost:9012:9013 82.64.123.233:4567:8907"

        """
        Actor.__init__(self)
        print "proxy actor created with id: ", self.actor_id

        self.brokers = brokers
        self.proxy_brokers = proxy_brokers
        self.my_ip = get_local_ip_addresses()
        self.rx_port = rx_port
        self.tx_port = tx_port
        self.contacts = DcsContactList()
        self.context = zmq.Context()
        self.msg_history = []  # list of [msg_id, timestamp]
        self.connection_list = []
        self.link = Link()
        self.link.broker.receiver = self.broker_sub_receiver
        self.link.server.receiver = self.server_sub_receiver
        self.link.client.receiver = self.client_sub_receiver
        self.link.broker_client.receiver = self.broker_client_sub_receiver

        # create sub, pub and spawn the receivers
        for l in dict(self.link).values():
            l.sub = self.context.socket(zmq.SUB)
            l.sub.setsockopt(zmq.SUBSCRIBE, '')
            l.sub.setsockopt(zmq.LINGER, 0)
            l.sub.setsockopt(zmq.RCVHWM, 0)

            l.pub = self.context.socket(zmq.PUB)
            l.pub.setsockopt(zmq.LINGER, 0)
            l.pub.setsockopt(zmq.SNDHWM, 0)

            gevent.spawn(l.receiver)

        self.create_server_on_a_random_port()

        # add proxy brokers to contact list
        self.contacts.add_from_contact_str(self.proxy_brokers)
        self.connect_to_contacts('client', self.contacts.contact_list)

        # create or watch to create address broker
        self.this_is_the_broker = False
        try:
            self.create_broker(watch=False)
        except:
            gevent.spawn(self.create_broker, watch=True)
            self.sync_contacts()

        gevent.sleep(
            2
        )  #TODO: change this with "as soon as connected all of the others"
    def __init__(self, brokers="", proxy_brokers="", rx_port=5012, tx_port=5013):
        """
        brokers / proxy brokers: additional brokers / proxies to connect to

            example: brokers="192.168.2.55:8012:8013 localhost:9012:9013 82.64.123.233:4567:8907"

        """
        Actor.__init__(self)
        print "proxy actor created with id: ", self.actor_id

        self.brokers = brokers
        self.proxy_brokers = proxy_brokers
        self.my_ip = get_local_ip_addresses()
        self.rx_port = rx_port
        self.tx_port = tx_port
        self.contacts = DcsContactList()
        self.context = zmq.Context()
        self.msg_history = []  # list of [msg_id, timestamp]
        self.connection_list = []
        self.link = Link()
        self.link.broker.receiver = self.broker_sub_receiver
        self.link.server.receiver = self.server_sub_receiver
        self.link.client.receiver = self.client_sub_receiver
        self.link.broker_client.receiver = self.broker_client_sub_receiver

        # create sub, pub and spawn the receivers
        for l in dict(self.link).values():
            l.sub = self.context.socket(zmq.SUB)
            l.sub.setsockopt(zmq.SUBSCRIBE, '')
            l.sub.setsockopt(zmq.LINGER, 0)
            l.sub.setsockopt(zmq.RCVHWM, 1)

            l.pub = self.context.socket(zmq.PUB)
            l.pub.setsockopt(zmq.LINGER, 0)
            l.pub.setsockopt(zmq.SNDHWM, 1)

            gevent.spawn(l.receiver)

        self.create_server_on_a_random_port()

        # add proxy brokers to contact list
        self.contacts.add_from_contact_str(self.proxy_brokers)
        self.connect_to_contacts('client', self.contacts.contact_list)

        # create or watch to create address broker
        self.this_is_the_broker = False
        try:
            self.create_broker(watch=False)
        except:
            gevent.spawn(self.create_broker, watch=True)
            self.sync_contacts()



        gevent.sleep(2) #TODO: change this with "as soon as connected all of the others"
    def __init__(self, broker_host="localhost", rx_port=5013, tx_port=5012):
        #super(ProxyActor, self).__init__()
        Actor.__init__(self)

        self.broker_host = broker_host
        self.rx_port = rx_port
        self.tx_port = tx_port

        self.context = zmq.Context()
        self.subscriber = self.context.socket(zmq.SUB)
        self.publisher = self.context.socket(zmq.PUB)

        self.broker_sub = self.context.socket(zmq.SUB)
        self.broker_pub = self.context.socket(zmq.PUB)

        self.broker_client_sub = self.context.socket(zmq.SUB)
        self.broker_client_pub = self.context.socket(zmq.PUB)

        self.proxy_client_sub = self.context.socket(zmq.SUB)
        self.proxy_client_pub = self.context.socket(zmq.PUB)

        self.subscriber.setsockopt(zmq.SUBSCRIBE, '')
        self.broker_sub.setsockopt(zmq.SUBSCRIBE, '')
        self.broker_client_sub.setsockopt(zmq.SUBSCRIBE, '')
        self.proxy_client_sub.setsockopt(zmq.SUBSCRIBE, '')

        gevent.spawn(self.broker_client_receiver)
        gevent.spawn(self.__receiver__)
        gevent.spawn(self.broker_receiver)
        gevent.spawn(self.proxy_client_receiver)


        # new actor will bind to a random port
        self.port = self.publisher.bind_to_random_port(addr="tcp://*")
        print "this actor's own publish port is: ", self.port

        # peers known so far
        self.known_publishers = ["tcp://%s:%d" % ("localhost", self.port)]
        if self.broker_host != "localhost":
            self.known_publishers.append("tcp://%s:%d" % (self.broker_host, self.tx_port))


        self.introduction = "NOK"  # not okay, introduce itself
        # is this address broker's server node in localhost?
        self.is_ab_server_node = False

        try:
            self.create_broker(watch=False)
        except:
            gevent.spawn(self.create_broker, watch=True)

        print "connecting to the local address broker"
        self.broker_client_pub.connect("tcp://%s:%d" % ("localhost", self.rx_port))
        self.broker_client_sub.connect("tcp://%s:%d" % ("localhost", self.tx_port))

        if self.broker_host != "localhost":
            print "connecting to the broker host"
            self.proxy_client_pub.connect("tcp://%s:%d" % (self.broker_host, self.rx_port))
            self.proxy_client_sub.connect("tcp://%s:%d" % (self.broker_host, self.tx_port))

        self.refresh_known_publishers()