module Rex module Ui ### # # This module provides a subscriber interface to input/output. # ### module Subscriber ## # # Subscribes to the output half of the user interface. # ## module Output # # Wraps user_output.print_line # def print_line(msg='') if (user_output) print_blank_line if user_output.prompting? user_output.print_line(msg) end end # # Wraps user_output.print_status # def print_status(msg='') if (user_output) print_blank_line if user_output.prompting? user_output.print_status(msg) end end # # Wraps user_output.print_error # def print_error(msg='') if (user_output) print_blank_line if user_output.prompting? user_output.print_error(msg) end end # # Wraps user_output.print_good # def print_good(msg='') if (user_output) print_blank_line if user_output.prompting? user_output.print_good(msg) end end # # Wraps user_output.print # def print(msg='') user_output.print(msg) if (user_output) end # # Wraps user_output.flush # def flush user_output.flush if (user_output) end # # The user output handle. # attr_accessor :user_output protected # # Prints a blank line. Used when the input is prompting. # def print_blank_line user_output.prompting(false) user_output.print_line end end ## # # Subscribes to the input half of the user interface. # ## module Input # # Gets a line of input from the user_input handle by calling gets. # def gets user_input.gets if (user_input) end # # The user intput handle. # attr_accessor :user_input end include Output include Input # # Sets the input and output handles. # def init_ui(input = nil, output = nil) self.user_input = input self.user_output = output end # # Disables input/output # def reset_ui self.user_input = nil self.user_output = nil end # # Copy the user input and output handles from the supplied subscriber. # def copy_ui(subscriber) init_ui(subscriber.user_input, subscriber.user_output) end end end end