electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit 9fddc3e6ea0db92566e978e2c354a6c1bd8c43f2
parent db0725bdcd278caf05a1f0b878c7c02aa730227b
Author: thomasv <thomasv@gitorious>
Date:   Wed, 14 Mar 2012 15:35:39 +0100

allow user to change the port

Diffstat:
Mclient/gui.py | 2+-
Mclient/gui_qt.py | 2+-
Mclient/interface.py | 77++++++++++++++++++++++++++++++-----------------------------------------------
Mclient/wallet.py | 6++++++
4 files changed, 38 insertions(+), 49 deletions(-)

diff --git a/client/gui.py b/client/gui.py @@ -345,7 +345,7 @@ def run_network_dialog( wallet, parent ): show_message("error") return False - wallet.interface.set_server(host, port) + wallet.set_server(host, port) if parent: wallet.save() return True diff --git a/client/gui_qt.py b/client/gui_qt.py @@ -892,7 +892,7 @@ class ElectrumWindow(QMainWindow): else: return - wallet.interface.set_server(host, port) + wallet.set_server(host, port) return True diff --git a/client/interface.py b/client/interface.py @@ -32,10 +32,14 @@ class Interface: self.rtime = 0 self.blocks = 0 self.message = '' - self.is_connected = False self.was_updated = True # fixme: use a semaphore self.is_up_to_date = False # True after the first poll + self.is_connected = False + self.disconnected_event = threading.Event() + self.disconnected_event.clear() + + def send_tx(self, data): out = self.handler('blockchain.transaction.broadcast', data ) return out @@ -47,12 +51,6 @@ class Interface: def get_servers(self): pass - def set_server(self, host, port): - if host!= self.host or port!=self.port: - self.host = host - self.port = port - self.is_connected = False - def start_session(self, wallet): pass @@ -71,7 +69,7 @@ class NativeInterface(Interface): self.is_up_to_date = False out = self.handler('session.new', [ version, addresses ] ) self.session_id, self.message = ast.literal_eval( out ) - self.update_wallet(wallet) + thread.start_new_thread(self.poll_thread, (wallet,)) def update_session(self, addresses): out = self.handler('session.update', [ self.session_id, addresses ] ) @@ -136,42 +134,23 @@ class NativeInterface(Interface): self.is_up_to_date = True return changed_addr - def loop_sessions_thread(self, wallet): - while True: + def poll_thread(self, wallet): + while self.is_connected: try: - self.is_connected = False - self.start_session(wallet) - except socket.error: - print "Not connected" + if self.update_wallet(wallet): + self.update_session( wallet.all_addresses() ) time.sleep(self.poll_interval()) - continue + except socket.gaierror: + break + except socket.error: + break except: traceback.print_exc(file=sys.stdout) - time.sleep(self.poll_interval()) - continue - - while True: - try: - if self.update_wallet(wallet): - self.update_session( wallet.all_addresses() ) + break + + self.is_connected = False + self.disconnected_event.set() - time.sleep(self.poll_interval()) - except BaseException: - traceback.print_exc(file=sys.stdout) - print "starting new session" - break - except socket.gaierror: - self.is_connected = False - break - except socket.error: - print "socket.error" - self.is_connected = False - break - except: - self.is_connected = False - print "error" - traceback.print_exc(file=sys.stdout) - break def get_servers(self): thread.start_new_thread(self.update_servers_thread, ()) @@ -208,8 +187,6 @@ class TCPInterface(Interface): if host: self.host = host self.port = 50001 self.tx_event = threading.Event() - self.disconnected_event = threading.Event() - self.disconnected_event.clear() self.addresses_waiting_for_status = [] self.addresses_waiting_for_history = [] @@ -235,12 +212,14 @@ class TCPInterface(Interface): try: self.is_connected = True out = '' - while True: - msg = self.s.recv(1024) + while self.is_connected: + try: msg = self.s.recv(1024) + except socket.timeout: continue out += msg if msg == '': self.is_connected = False - raise BaseException('Socket was disconnected') + print "disconnected." + while True: s = out.find('\n') if s==-1: break @@ -295,8 +274,9 @@ class TCPInterface(Interface): self.up_to_date_event.set() except: traceback.print_exc(file=sys.stdout) - self.is_connected = False - self.disconnected_event.set() + + self.is_connected = False + self.disconnected_event.set() def update_wallet(self,wallet): self.up_to_date_event.wait() @@ -310,6 +290,7 @@ class TCPInterface(Interface): def start_session(self, wallet): self.s = socket.socket( socket.AF_INET, socket.SOCK_STREAM ) + self.s.settimeout(DEFAULT_TIMEOUT) self.s.connect(( self.host, self.port)) thread.start_new_thread(self.listen_thread, (wallet,)) self.send('client.version', wallet.electrum_version) @@ -360,7 +341,6 @@ def new_interface(wallet): def loop_interfaces_thread(wallet): - while True: try: wallet.interface.start_session(wallet) @@ -369,6 +349,9 @@ def loop_interfaces_thread(wallet): print "Not connected" time.sleep(5) continue + except: + traceback.print_exc(file=sys.stdout) + continue wallet.interface.disconnected_event.wait() print "Disconnected" wallet.interface = new_interface(wallet) diff --git a/client/wallet.py b/client/wallet.py @@ -265,6 +265,12 @@ class Wallet: self.remote_url = None + def set_server(self, host, port): + if host!= self.host or port!=self.port: + self.host = host + self.port = port + self.interface.is_connected = False # this exits the polling loop + def set_path(self, wallet_path): if wallet_path is not None: