URI: 
       tMerge pull request #1225 from kyuupichan/net-interface - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 68580164110bc0f72b38527b508345d8eacda73f
   DIR parent b3f1f04312210a8c7009302850d4f80267545392
  HTML Author: ThomasV <electrumdev@gmail.com>
       Date:   Fri, 22 May 2015 06:58:50 +0200
       
       Merge pull request #1225 from kyuupichan/net-interface
       
       Consistency in handling of self.interface
       Diffstat:
         M lib/network.py                      |      40 +++++++++++++++----------------
       
       1 file changed, 19 insertions(+), 21 deletions(-)
       ---
   DIR diff --git a/lib/network.py b/lib/network.py
       t@@ -278,12 +278,10 @@ class Network(util.DaemonThread):
                return out
        
            def start_interface(self, server):
       -        if server in self.interfaces.keys():
       -            return
       -        i = interface.Interface(server, self.queue, self.config)
       -        self.pending_servers.add(server)
       -        i.start()
       -        return i
       +        if not server in self.interfaces.keys():
       +            i = interface.Interface(server, self.queue, self.config)
       +            self.pending_servers.add(server)
       +            i.start()
        
            def start_random_interface(self):
                server = self.random_server()
       t@@ -291,13 +289,12 @@ class Network(util.DaemonThread):
                    self.start_interface(server)
        
            def start_interfaces(self):
       -        self.interface = self.start_interface(self.default_server)
       -        for i in range(self.num_server):
       +        self.start_interface(self.default_server)
       +        for i in range(self.num_server - 1):
                    self.start_random_interface()
        
            def start(self):
                self.running = True
       -        self.start_interfaces()
                self.blockchain.start()
                util.DaemonThread.start(self)
        
       t@@ -320,6 +317,7 @@ class Network(util.DaemonThread):
                self.disconnected_servers = set([])
                self.protocol = protocol
                self.set_proxy(proxy)
       +        self.start_interfaces()
        
            def stop_network(self):
                # FIXME: this forgets to handle pending servers...
       t@@ -351,15 +349,16 @@ class Network(util.DaemonThread):
                while self.interfaces:
                    i = random.choice(self.interfaces.values())
                    if i.is_connected():
       -                self.switch_to_interface(i)
       +                self.switch_to_interface(i.server)
                        break
                    else:
                        self.remove_interface(i)
        
       -    def switch_to_interface(self, interface):
       -        server = interface.server
       +    def switch_to_interface(self, server):
       +        '''Switch to server as our interface, it must be in self.interfaces'''
       +        assert server in self.interfaces
                self.print_error("switching to", server)
       -        self.interface = interface
       +        self.interface = self.interfaces[server]
                self.default_server = server
                self.send_subscriptions()
                self.set_status('connected')
       t@@ -368,7 +367,7 @@ class Network(util.DaemonThread):
        
            def stop_interface(self):
                self.interface.stop()
       -
       +        self.interface = None
        
            def set_server(self, server):
                if self.default_server == server and self.is_connected():
       t@@ -387,9 +386,9 @@ class Network(util.DaemonThread):
                self.default_server = server
        
                if server in self.interfaces.keys():
       -            self.switch_to_interface( self.interfaces[server] )
       +            self.switch_to_interface(server)
                else:
       -            self.interface = self.start_interface(server)
       +            self.start_interface(server)
        
        
            def add_recent_server(self, i):
       t@@ -425,9 +424,8 @@ class Network(util.DaemonThread):
                    self.add_interface(i)
                    self.add_recent_server(i)
                    i.send_request({'method':'blockchain.headers.subscribe','params':[]})
       -            if i == self.interface:
       -                self.send_subscriptions()
       -                self.set_status('connected')
       +            if i.server == self.default_server:
       +                self.switch_to_interface(i.server)
                else:
                    if i.server in self.interfaces:
                        self.remove_interface(i)
       t@@ -509,7 +507,7 @@ class Network(util.DaemonThread):
                            self.switch_to_random_interface()
                    else:
                        if self.default_server in self.interfaces.keys():
       -                    self.switch_to_interface(self.interfaces[self.default_server])
       +                    self.switch_to_interface(self.default_server)
                        else:
                            if self.default_server in self.disconnected_servers:
                                if now - self.server_retry_time > SERVER_RETRY_INTERVAL:
       t@@ -518,7 +516,7 @@ class Network(util.DaemonThread):
                            else:
                                if self.default_server not in self.pending_servers:
                                    self.print_error("forcing reconnection")
       -                            self.interface = self.start_interface(self.default_server)
       +                            self.start_interface(self.default_server)
        
            def run(self):
                while self.is_running():