Skip to content
Snippets Groups Projects
Commit bc696127 authored by inso's avatar inso
Browse files

Fix network spam

parent c3b797e0
Branches
Tags
No related merge requests found
...@@ -5,6 +5,7 @@ Created on 24 févr. 2015 ...@@ -5,6 +5,7 @@ Created on 24 févr. 2015
""" """
from .node import Node from .node import Node
from ...tools.exceptions import InvalidNodeCurrency from ...tools.exceptions import InvalidNodeCurrency
from ...tools.decorators import asyncify
import logging import logging
import aiohttp import aiohttp
import time import time
...@@ -44,6 +45,7 @@ class Network(QObject): ...@@ -44,6 +45,7 @@ class Network(QObject):
self._block_found = self.current_blockUID self._block_found = self.current_blockUID
self._timer = QTimer() self._timer = QTimer()
self._client_session = session self._client_session = session
self._discovery_stack = []
@classmethod @classmethod
def create(cls, node): def create(cls, node):
...@@ -332,8 +334,10 @@ class Network(QObject): ...@@ -332,8 +334,10 @@ class Network(QObject):
node = self.nodes[index] node = self.nodes[index]
return self._root_nodes.index(node) return self._root_nodes.index(node)
def refresh_once(self): @asyncify
async def refresh_once(self):
for node in self._nodes: for node in self._nodes:
await asyncio.sleep(1)
node.refresh(manual=True) node.refresh(manual=True)
async def discover_network(self): async def discover_network(self):
...@@ -343,6 +347,7 @@ class Network(QObject): ...@@ -343,6 +347,7 @@ class Network(QObject):
""" """
self._must_crawl = True self._must_crawl = True
first_loop = True first_loop = True
asyncio.ensure_future(self.pop_discovery_stack())
while self.continue_crawling(): while self.continue_crawling():
for node in self.nodes: for node in self.nodes:
if self.continue_crawling(): if self.continue_crawling():
...@@ -354,9 +359,15 @@ class Network(QObject): ...@@ -354,9 +359,15 @@ class Network(QObject):
logging.debug("End of network discovery") logging.debug("End of network discovery")
def handle_new_node(self, peer): async def pop_discovery_stack(self):
key = VerifyingKey(peer.pubkey) """
if key.verify_document(peer): Handle poping of nodes in discovery stack
:return:
"""
while self.continue_crawling():
try:
await asyncio.sleep(1)
peer = self._discovery_stack.pop()
pubkeys = [n.pubkey for n in self.nodes] pubkeys = [n.pubkey for n in self.nodes]
if peer.pubkey not in pubkeys: if peer.pubkey not in pubkeys:
logging.debug("New node found : {0}".format(peer.pubkey[:5])) logging.debug("New node found : {0}".format(peer.pubkey[:5]))
...@@ -370,7 +381,18 @@ class Network(QObject): ...@@ -370,7 +381,18 @@ class Network(QObject):
else: else:
node = [n for n in self.nodes if n.pubkey == peer.pubkey][0] node = [n for n in self.nodes if n.pubkey == peer.pubkey][0]
if node.peer.blockUID.number < peer.blockUID.number: if node.peer.blockUID.number < peer.blockUID.number:
logging.debug("Update node : {0}".format(peer.pubkey[:5]))
node.peer = peer node.peer = peer
except IndexError:
await asyncio.sleep(2)
def handle_new_node(self, peer):
key = VerifyingKey(peer.pubkey)
if key.verify_document(peer):
if len(self._discovery_stack) < 1000 \
and peer.signatures[0] not in [p.signatures[0] for p in self._discovery_stack]:
logging.debug("Stacking new peer document : {0}".format(peer.pubkey))
self._discovery_stack.append(peer)
else: else:
logging.debug("Wrong document received : {0}".format(peer.signed_raw())) logging.debug("Wrong document received : {0}".format(peer.signed_raw()))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment