def __init__(self, goto_inputscreen, greeting, **kwargs): # Init super super(ConsoleWindow, self).__init__(**kwargs) # Number of cols self.cols = 1 # Save greeting self.greeting = greeting # Screen transition hook self.goto_input_screen = goto_inputscreen # Create scrollable label for console output self.scroll_view = ConsoleScrollView() self.scroll_view.size_hint_y = 0.9 # Add scroll view widget self.add_widget(self.scroll_view) # Internal function-hook alias self.display_text = self.inputtext_gui_hook # Clear screen and print title self.display_text(greeting, clear=True) # Add progress bar self.progress_bar = ProgressBar(max=1000, size_hint_y=0.01) self.add_widget(self.progress_bar) # Input text box if not (constants.PLATFORM_ANDROID or constants.ENABLE_INPUT_SCREEN): self.console_input = ConsoleInput( # Goto console screen goto_consolescreen=lambda *args, **kwargs: None, # Size size_y=0.09 ) # Add widget self.add_widget(self.console_input) else: # Command input button self.enter_cmd_button = Button( text="Enter Command", size_hint_y=0.09, ) # Bind event - on_press self.enter_cmd_button.bind(on_press=self.goto_inputscreen) # Add button self.add_widget(self.enter_cmd_button)
def build(self): self.test_win = ConsoleScrollView() # Display initial text self.test_win.display_text( """ ========================= CryptikChaos Test_ Server ========================= :PeerID: {}\n :PeerIP: {}\n :Date: {}\n ------------\n """.format( constants.LOCAL_TEST_PEER_ID, constants.LOCAL_TEST_HOST, get_time() ) ) return self.test_win
class CryptikChaosTestApp(App): "Test sever application." def build(self): self.test_win = ConsoleScrollView() # Display initial text self.test_win.display_text( """ ========================= CryptikChaos Test_ Server ========================= :PeerID: {}\n :PeerIP: {}\n :Date: {}\n ------------\n """.format( constants.LOCAL_TEST_PEER_ID, constants.LOCAL_TEST_HOST, get_time() ) ) return self.test_win def on_start(self): """Event handler for the on_start event, which is fired after initialization (after build() has been called), and before the application is being run. """ Logger.info("TESTSERVER: Cryptikchaos Test server started.") # Initiate Twisted Server self.comm_service = CommService( peerid=constants.LOCAL_TEST_PEER_ID, host=constants.LOCAL_TEST_HOST, port=constants.LOCAL_TEST_PORT, clientinit=False, printer=self.print_message, ) self.device_service = DeviceService() # Register device service with comm service self.comm_service.register_device_service(self.device_service) def on_stop(self): """Event handler for the on_stop event, which is fired when the application has finished running (e.g. the window is about to be closed). """ Logger.info("TESTSERVER: Closing services.") # Close services try: self.comm_service.__del__() except AttributeError: pass Logger.info("TESTSERVER: Successfully closed services.") Logger.info("TESTSERVER: Closing Cryptikchaos Test Server.") def print_message(self, msg, peerid=None, intermediate=False): "Print a message in the output window." # Indicates multiline output required if intermediate: text = "{}{}".format(constants.GUI_LABEL_LEFT_PADDING, msg) else: # One line print if not peerid: peerid = self.comm_service.peerid # If local pid, substitute with peer name if peerid == self.comm_service.peerid: peerid = constants.PEER_NAME # Get peer message color rcc = self.comm_service.swarm_manager.get_peerid_color(peerid) # Single line output with peer id text = "{}{}[color={}]{}[/color] : {}".format( constants.GUI_LABEL_LEFT_PADDING, constants.GUI_LABEL_PROMPT_SYM, rcc, str(peerid), msg ) text = "\n{}".format(text) # Send text to console self.display_text("\n" + text) # Print in log if constants.ENABLE_CMD_LOG: # Get peer id for log if not peerid: logger_peerid = constants.PEER_NAME else: logger_peerid = peerid Logger.debug("TESTSERVER: [{}] => {}".format(logger_peerid, msg)) def display_text(self, text): # Append line to label self.test_win.text += "\n[color={}]{}[/color]".format(constants.GUI_FONT_COLOR, text)
class ConsoleWindow(GridLayout): "Console window class." def __init__(self, goto_inputscreen, greeting, **kwargs): # Init super super(ConsoleWindow, self).__init__(**kwargs) # Number of cols self.cols = 1 # Save greeting self.greeting = greeting # Screen transition hook self.goto_input_screen = goto_inputscreen # Create scrollable label for console output self.scroll_view = ConsoleScrollView() self.scroll_view.size_hint_y = 0.9 # Add scroll view widget self.add_widget(self.scroll_view) # Internal function-hook alias self.display_text = self.inputtext_gui_hook # Clear screen and print title self.display_text(greeting, clear=True) # Add progress bar self.progress_bar = ProgressBar(max=1000, size_hint_y=0.01) self.add_widget(self.progress_bar) # Input text box if not (constants.PLATFORM_ANDROID or constants.ENABLE_INPUT_SCREEN): self.console_input = ConsoleInput( # Goto console screen goto_consolescreen=lambda *args, **kwargs: None, # Size size_y=0.09 ) # Add widget self.add_widget(self.console_input) else: # Command input button self.enter_cmd_button = Button( text="Enter Command", size_hint_y=0.09, ) # Bind event - on_press self.enter_cmd_button.bind(on_press=self.goto_inputscreen) # Add button self.add_widget(self.enter_cmd_button) # GUI Hooks----------------------- @mainthread def inputtext_gui_hook(self, text, clear=False): self.scroll_view.display_text(text, clear) @mainthread def getmaxwidth_gui_hook(self): return self.width @mainthread def cleardisplay_gui_hook(self): self.scroll_view.display_text(self.greeting, clear=True) @mainthread def cmdprog_gui_hook(self, status_val): self.progress_bar.value = status_val # --------------------------------- if not (constants.PLATFORM_ANDROID or constants.ENABLE_INPUT_SCREEN): def register_handleinput_cmd_hook(self, hook): self.console_input.register_handleinput_cmd_hook(hook) def register_getcommands_cmd_hook(self, hook): self.console_input.register_getcommands_cmd_hook(hook) def on_resize(self, instance, width, height): # New height and width instance.width = width instance.height = height def goto_inputscreen(self, instance): return self.goto_input_screen()