move callbacks to the network class
This commit is contained in:
@@ -56,17 +56,19 @@ class Blockchain(threading.Thread):
|
||||
while self.is_running():
|
||||
|
||||
try:
|
||||
i, result = self.queue.get()
|
||||
result = self.queue.get()
|
||||
except Queue.Empty:
|
||||
continue
|
||||
|
||||
if not result: continue
|
||||
|
||||
i, result = result
|
||||
header= result.get('result')
|
||||
#print_error( i.server, header )
|
||||
height = header.get('block_height')
|
||||
|
||||
if height > self.local_height + 50:
|
||||
self.get_chunks(i, header, height)
|
||||
i.trigger_callback('updated')
|
||||
i.network.trigger_callback('updated')
|
||||
|
||||
if height > self.local_height:
|
||||
# get missing parts from interface (until it connects to my chain)
|
||||
@@ -85,7 +87,7 @@ class Blockchain(threading.Thread):
|
||||
print_error("error", i.server)
|
||||
# todo: dismiss that server
|
||||
|
||||
i.trigger_callback('updated')
|
||||
i.network.trigger_callback('updated')
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -67,19 +67,6 @@ def pick_random_server():
|
||||
class Interface(threading.Thread):
|
||||
|
||||
|
||||
def register_callback(self, event, callback):
|
||||
with self.lock:
|
||||
if not self.callbacks.get(event):
|
||||
self.callbacks[event] = []
|
||||
self.callbacks[event].append(callback)
|
||||
|
||||
|
||||
def trigger_callback(self, event):
|
||||
with self.lock:
|
||||
callbacks = self.callbacks.get(event,[])[:]
|
||||
if callbacks:
|
||||
[callback() for callback in callbacks]
|
||||
|
||||
|
||||
def init_server(self, host, port, proxy=None, use_ssl=True):
|
||||
self.host = host
|
||||
@@ -156,11 +143,11 @@ class Interface(threading.Thread):
|
||||
|
||||
elif method == 'server.banner':
|
||||
self.banner = result
|
||||
self.trigger_callback('banner')
|
||||
self.network.trigger_callback('banner')
|
||||
|
||||
elif method == 'server.peers.subscribe':
|
||||
self.servers = self.parse_servers(result)
|
||||
self.trigger_callback('peers')
|
||||
self.network.trigger_callback('peers')
|
||||
|
||||
else:
|
||||
# notification: find the channel(s)
|
||||
@@ -196,8 +183,9 @@ class Interface(threading.Thread):
|
||||
|
||||
|
||||
def get_response(self, channel='default', block=True, timeout=10000000000):
|
||||
i, r = self.responses[channel].get(block, timeout)
|
||||
return r
|
||||
ir = self.responses[channel].get(block, timeout)
|
||||
if ir:
|
||||
return ir[1]
|
||||
|
||||
def register_channel(self, channel, queue=None):
|
||||
if queue is None:
|
||||
@@ -441,7 +429,6 @@ class Interface(threading.Thread):
|
||||
self.responses = {}
|
||||
self.responses['default'] = Queue.Queue()
|
||||
|
||||
self.callbacks = {}
|
||||
self.lock = threading.Lock()
|
||||
|
||||
self.servers = {} # actual list from IRC
|
||||
|
||||
@@ -17,8 +17,22 @@ class Network(threading.Thread):
|
||||
self.queue = Queue.Queue()
|
||||
self.default_server = self.config.get('server')
|
||||
self.servers_list = interface.filter_protocol(interface.DEFAULT_SERVERS,'s')
|
||||
self.callbacks = {}
|
||||
|
||||
|
||||
def register_callback(self, event, callback):
|
||||
with self.lock:
|
||||
if not self.callbacks.get(event):
|
||||
self.callbacks[event] = []
|
||||
self.callbacks[event].append(callback)
|
||||
|
||||
|
||||
def trigger_callback(self, event):
|
||||
with self.lock:
|
||||
callbacks = self.callbacks.get(event,[])[:]
|
||||
if callbacks:
|
||||
[callback() for callback in callbacks]
|
||||
|
||||
|
||||
def start_interfaces(self):
|
||||
|
||||
@@ -26,22 +40,29 @@ class Network(threading.Thread):
|
||||
self.interfaces[server] = interface.Interface({'server':server})
|
||||
|
||||
for i in self.interfaces.values():
|
||||
i.network = self # fixme
|
||||
i.start(self.queue)
|
||||
|
||||
if self.default_server:
|
||||
self.interface = interface.Interface({'server':self.default_server})
|
||||
self.interface.network = self # fixme
|
||||
self.interface.start(self.queue)
|
||||
else:
|
||||
self.interface = self.interfaces[0]
|
||||
|
||||
|
||||
def start(self, wait=False):
|
||||
|
||||
self.start_interfaces()
|
||||
threading.Thread.__init__(self)
|
||||
if wait:
|
||||
self.interface.connect_event.wait()
|
||||
return self.interface.is_connected
|
||||
|
||||
|
||||
|
||||
def run(self):
|
||||
self.blockchain.start()
|
||||
self.start_interfaces()
|
||||
|
||||
with self.lock:
|
||||
self.running = True
|
||||
|
||||
@@ -90,7 +90,7 @@ class TxVerifier(threading.Thread):
|
||||
|
||||
def stop(self):
|
||||
with self.lock: self.running = False
|
||||
self.interface.poke('verifier')
|
||||
#self.interface.poke('verifier')
|
||||
|
||||
def is_running(self):
|
||||
with self.lock: return self.running
|
||||
|
||||
@@ -1447,7 +1447,7 @@ class WalletSynchronizer(threading.Thread):
|
||||
self.was_updated = True
|
||||
|
||||
if self.was_updated:
|
||||
self.interface.trigger_callback('updated')
|
||||
self.interface.network.trigger_callback('updated')
|
||||
self.was_updated = False
|
||||
|
||||
# 2. get a response
|
||||
@@ -1523,8 +1523,7 @@ class WalletSynchronizer(threading.Thread):
|
||||
print_error("Error: Unknown message:" + method + ", " + repr(params) + ", " + repr(result) )
|
||||
|
||||
if self.was_updated and not requested_tx:
|
||||
self.interface.trigger_callback('updated')
|
||||
self.interface.trigger_callback("new_transaction") # Updated gets called too many times from other places as well; if we use that signal we get the notification three times
|
||||
|
||||
self.interface.network.trigger_callback('updated')
|
||||
self.interface.network.trigger_callback("new_transaction") # Updated gets called too many times from other places as well; if we use that signal we get the notification three times
|
||||
|
||||
self.was_updated = False
|
||||
|
||||
Reference in New Issue
Block a user