Beispiel #1
0
 def update_connection(self, ip, conn):
     rem = ''
     re = int(self.resource_mains[ip]['remain_connection'])
     rem = self._get_connection_level(conn)
     pre_rem = self._get_connection_level(re)
     self.resource_mains[ip]['remain_connection'] = conn
     if rem != pre_rem:
         self.remain_connections[pre_rem].remove(ip)
         util.opush(self.remain_connections[rem], ip)
Beispiel #2
0
 async def resp_set_main_node(self, data, reader, writer):
     util.opush(self.scores, data['ip'])
     if self.con_ip == data['ip']:
         self.ismainnode = True
         self.childs = []
     if self.ismainnode and self.con_ip != data['ip']:
         await self.notify({
             'op': 'set_main_node',
             'ip': data['ip']
         }, self.childs)
Beispiel #3
0
    async def connect_2_network(self, url):
        """
        A node first connect to the network
        
        Args:
            url:  The first connect node's url and port.            
        Returns:
        """
        try:
            js = await self.requests({'op': 'get_main_node'}, url)
            pass
        except Exception as e:
            print("connect to network exception!")
            print(e)
            return

        self.scores = js['scores']

        if len(self.scores) < 100 and len(self.scores) >= 1:
            rs = await self.req_resource_file(random.choice(self.scores))
            self.node['father'] = self.con_ip
            self.resource_mains = rs['resource_mains']
            self.locations = rs['locations']
            self.server_types = rs['server_types']
            self.remain_connections = rs['remain_connections']
            self.scores = rs['scores']
            self.ismainnode = True  # indicate the server will be main node server.
            util.opush(self.scores, self.con_ip)
            await self.notify({
                'op': 'new_main_node',
                'node': self.node
            }, self.scores)
            return
        elif len(self.scores) == 0:
            self.node['father'] = self.con_ip
            self.ismainnode = True  # indicate the server will be main node server.
            util.opush(self.scores, self.con_ip)
        else:
            mainnode = self.choose_best_mainnode()
            self.node['father'] = mainnode
            self.mainnode = mainnode
            rs = await self.req_resource_file(mainnode)
            self.resource_mains = rs.resource_mains
            self.locations = rs.locations
            self.server_types = rs.server_types
            self.remain_connections = rs.remain_connections
            self.scores = rs.scores
            await self.notify({'op': 'new_node', 'node': self.node}, mainnode)
Beispiel #4
0
 def increase_connection(self, ip=Node):
     if not ip:
         ip = self.con_ip
     if self.resource_mains.get(ip):
         self.resource_mains[ip]['remain_connection'] -= 1
     else:
         return False
     rem = ''
     re = int(self.resource_mains[ip]['remain_connection'])
     rem = self._get_connection_level(re)
     pre_rem = self._get_connection_level(re + 1)
     if rem == pre_rem:
         return True
     else:
         self.remain_connections[pre_rem].remove(ip)
         util.opush(self.remain_connections[rem], ip)
         return True
Beispiel #5
0
 async def resp_add_node(self, data, reader, writer):
     if not self.server_types.get(data['server_type']):
         self.server_types[data['server_type']] = []
     util.opush(self.server_types[data['server_type']], data.ip)
     if not self.locations.get(data['location']):
         self.locations[data['location']] = []
     util.opush(self.locations[data['location']], data.ip)
     rem = ''
     re = int(data['remain_connection'])
     if re >= 0 and re < 100:
         rem = '10'
     elif re >= 100 and re < 1000:
         rem = '100'
     elif re >= 1000 and re < 10000:
         rem = '1000'
     elif re >= 10000 and re < 100000:
         rem = '10000'
     elif re > 100000:
         rem = 'unlimit'
     else:
         rem = 'unremain'
     if rem.startswith('1'):
         rem = 'remain' + rem
     util.opush(self.remain_connections[rem], data.ip)
     self.resource_mains[data.ip] = data
     if self.ismainnode:
         await self.notify({'op': 'add_node', 'node': data}, self.childs)
Beispiel #6
0
 def set_node(self, data):
     if not self.server_types.get(data['server_type']):
         self.server_types[data['server_type']] = []
     util.opush(self.server_types[data['server_type']], data.ip)
     if not self.locations.get(data['location']):
         self.locations[data['location']] = []
     util.opush(self.locations[data['location']], data.ip)
     rem = ''
     re = int(data['remain_connection'])
     if re >= 0 and re < 100:
         rem = '10'
     elif re >= 100 and re < 1000:
         rem = '100'
     elif re >= 1000 and re < 10000:
         rem = '1000'
     elif re >= 10000 and re < 100000:
         rem = '10000'
     elif re > 100000:
         rem = 'unlimit'
     else:
         rem = 'unremain'
     if rem.startswith('1'):
         rem = 'remain' + rem
     util.opush(self.remain_connections[rem], data.ip)
     self.resource_mains[data.ip] = data
     pass
Beispiel #7
0
 async def resp_new_node(self, data, reader, writer):
     self.set_node(data)
     util.opush(self.childs, data.ip)
     await self.notify({'op': 'add_node', 'node': data}, self.scores)