Example #1
0
    def rt_update(self, ip, port, **kwargs):
        costs = kwargs['costs']
        addr_key = addr_to_key(ip, port)
        for node_addr_key in costs:
            # not in the node_dict yet, add to the node_dict
            if self.node_dict.get(node_addr_key) is None:
                self.node_dict[node_addr_key] = self.init_node()

        if self.node_dict[addr_key]['is_neighbor']:
            # already neighbor, so just update node costs
            node = self.node_dict[addr_key]
            node['costs'] = costs
            # restart watch_dog timer
            node['watch_dog'].reset()
        else:
            print 'welcome new neighbor at %s !\n' % addr_key
            del self.node_dict[addr_key]
            self.node_dict[addr_key] = self.node_generator(
                                cost=self.node_dict[addr_key]['cost'],
                                is_neighbor=True,
                                direct_dist=kwargs['neighbor']['direct_dist'],
                                costs=costs,
                                addr_key=addr_key)
        # Bellman-Ford!
        self.calculate_costs()
Example #2
0
    def init_rt(self):
        route_dict = argv_parser(sys.argv)
        self.node_dict = defaultdict(lambda: self.init_node())
        self.timeout = 3 * route_dict["timeout"]

        self.sock = init_socket(localhost, route_dict["port"])
        self.me_key = addr_to_key(*self.sock.getsockname())
        self.node_dict[self.me_key] = self.node_generator(cost=0.0,
                                                          addr_key=self.me_key,
                                                          is_neighbor=False,
                                                          direct_dist=0.0)
        for neighbor_info in route_dict["neighbors"]:
            addr_key, cost = decode_node_info(neighbor_info)
            self.node_dict[addr_key] = self.node_generator(cost=cost,
                                                           addr_key=addr_key,
                                                           is_neighbor=True,
                                                           direct_dist=cost)
        self.broadcast_costs()
        CountDownTimer(route_dict["timeout"], self.broadcast_costs).start()
Example #3
0
 def get_node(self, ip, port):
     try:
         addr_key = addr_to_key(ip, port)
         return self.node_dict[addr_key]
     except KeyError:
         raise NoNodeError