add timeout to daemon, update getaddressbalance
authorThomasV <thomasv@gitorious>
Sun, 2 Mar 2014 09:31:34 +0000 (10:31 +0100)
committerThomasV <thomasv@gitorious>
Sun, 2 Mar 2014 09:31:34 +0000 (10:31 +0100)
electrum
lib/commands.py

index e63057a..d0f9c5e 100755 (executable)
--- a/electrum
+++ b/electrum
@@ -160,6 +160,7 @@ def start_server():
     print_msg("Network daemon connected to " + network.interface.connection_msg)
     from SimpleXMLRPCServer import SimpleXMLRPCServer
     server = SimpleXMLRPCServer(('localhost',8000), allow_none=True, logRequests=False)
+    server.network = network
     server.register_function(lambda: 'pong', 'ping')
     server.register_function(network.synchronous_get, 'synchronous_get')
     server.register_function(network.get_servers, 'get_servers')
@@ -181,9 +182,17 @@ def start_daemon():
         if (pid2 == 0):  # Second child
             server = start_server()
             server.running = True
+            timeout = 60
+            t0 = time.time()
+            server.socket.settimeout(timeout)
             while server.running:
                 server.handle_request()
-            print_msg("Daemon stopped")
+                t = time.time()
+                if t - t0 > 0.9*timeout:
+                    break
+                if not server.network.is_connected():
+                    break
+                t0 = t
         sys.exit(0)
 
     time.sleep(2)
index da6c4ba..64f2c69 100644 (file)
@@ -79,8 +79,8 @@ register_command('help',                 0, 1, False, False, False, 'Prints this
 register_command('history',              0, 0, True,  True,  False, 'Returns the transaction history of your wallet')
 register_command('importprivkey',        1, 1, False, True,  True,  'Import a private key', 'importprivkey <privatekey>')
 register_command('listaddresses',        2, 2, False, True,  False, 'Returns your list of addresses.', '', listaddr_options)
-register_command('listunspent',          0, 0, True,  False, False, 'Returns the list of unspent inputs in your wallet.')
-register_command('getaddressunspent',    1, 1, True,  False, False, 'Returns the list of unspent inputs in your wallet.')
+register_command('listunspent',          0, 0, True,  True,  False, 'Returns the list of unspent inputs in your wallet.')
+register_command('getaddressunspent',    1, 1, True,  False, False, 'Returns the list of unspent inputs for an address.')
 register_command('mktx',                 5, 5, False, True,  True,  'Create a signed transaction', 'mktx <recipient> <amount> [label]', payto_options)
 register_command('mksendmanytx',         4, 4, False, True,  True,  'Create a signed transaction', mksendmany_syntax, payto_options)
 register_command('payto',                5, 5, True,  True,  True,  'Create and broadcast a transaction.', payto_syntax, payto_options)
@@ -227,8 +227,11 @@ class Commands:
         return out
 
     def getaddressbalance(self, addr):
-        b = self.network.synchronous_get([ ('blockchain.address.get_balance',[addr]) ])[0]
-        return str(Decimal(b)/100000000)
+        out = self.network.synchronous_get([ ('blockchain.address.get_balance',[addr]) ])[0]
+        out["confirmed"] =  str(Decimal(out["confirmed"])/100000000)
+        out["unconfirmed"] =  str(Decimal(out["unconfirmed"])/100000000)
+        return out
+
 
     def getproof(self, addr):
         p = self.network.synchronous_get([ ('blockchain.address.get_proof',[addr]) ])[0]