12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- #!/usr/bin/env python3
- #
- # mmgen = Multi-Mode GENerator, a command-line cryptocurrency wallet
- # Copyright (C)2013-2022 The MMGen Project <mmgen@tuta.io>
- # Licensed under the GNU General Public License, Version 3:
- # https://www.gnu.org/licenses
- # Public project repositories:
- # https://github.com/mmgen/mmgen
- # https://gitlab.com/mmgen/mmgen
- """
- mmgen_node_tools.PollDisplay: update and display RPC data; get input from user
- """
- import sys,threading
- from mmgen.util import msg
- from mmgen.term import get_char
- class PollDisplay():
- info = None
- input = None
- poll_secs = 1
- def __init__(self):
- self.info_lock = threading.Lock() # self.info accessed by 2 threads
- self.display_kill_flag = threading.Event()
- def get_input(self):
- return get_char(immed_chars='q',prehold_protect=False,num_chars=1)
- async def process_input(self,rpc):
- return True
- async def run(self,rpc):
- async def do_display():
- with self.info_lock:
- self.info = None
- self.input = None
- self.enable_display = True
- count = 1
- while True:
- with self.info_lock:
- if self.enable_display:
- self.info = await self.get_info(rpc)
- self.display(count)
- if self.display_kill_flag.wait(self.poll_secs):
- self.display_kill_flag.clear()
- return
- count += 1
- async def process_input():
- if self.input == None:
- sys.exit(1)
- elif self.input == 'q':
- msg('')
- sys.exit(0)
- elif self.info:
- if await self.process_input(rpc):
- return True
- else:
- return True
- def get_input():
- self.input = self.get_input()
- self.display_kill_flag.set()
- while True:
- threading.Thread(target=get_input,daemon=True).start()
- await do_display()
- if await process_input():
- break
|