Class: PWN::Plugins::REPL::AIConsole::EventIO
- Inherits:
-
Object
- Object
- PWN::Plugins::REPL::AIConsole::EventIO
- Defined in:
- lib/pwn/plugins/repl/ai_console.rb
Overview
Ruby output is queued, never written across the curses screen.
Instance Attribute Summary collapse
-
#sync ⇒ Object
Returns the value of attribute sync.
Instance Method Summary collapse
- #close ⇒ Object
- #closed? ⇒ Boolean
- #flush ⇒ Object
-
#initialize(queue) ⇒ EventIO
constructor
A new instance of EventIO.
- #print(*values) ⇒ Object
- #puts(*values) ⇒ Object
- #tty? ⇒ Boolean (also: #isatty)
- #write(value) ⇒ Object
Constructor Details
#initialize(queue) ⇒ EventIO
Returns a new instance of EventIO.
26 27 28 29 30 |
# File 'lib/pwn/plugins/repl/ai_console.rb', line 26 def initialize(queue) @queue = queue @buffer = +'' @lock = Mutex.new end |
Instance Attribute Details
#sync ⇒ Object
Returns the value of attribute sync.
24 25 26 |
# File 'lib/pwn/plugins/repl/ai_console.rb', line 24 def sync @sync end |
Instance Method Details
#close ⇒ Object
73 74 75 |
# File 'lib/pwn/plugins/repl/ai_console.rb', line 73 def close nil end |
#closed? ⇒ Boolean
77 78 79 |
# File 'lib/pwn/plugins/repl/ai_console.rb', line 77 def closed? false end |
#flush ⇒ Object
58 59 60 61 62 63 64 65 66 |
# File 'lib/pwn/plugins/repl/ai_console.rb', line 58 def flush @lock.synchronize do unless @buffer.empty? @queue << [:notice, @buffer.dup] @buffer.clear end end self end |
#print(*values) ⇒ Object
53 54 55 56 |
# File 'lib/pwn/plugins/repl/ai_console.rb', line 53 def print(*values) values.each { |value| write(value) } nil end |
#puts(*values) ⇒ Object
47 48 49 50 51 |
# File 'lib/pwn/plugins/repl/ai_console.rb', line 47 def puts(*values) values = [''] if values.empty? values.each { |value| write("#{value.to_s.chomp}\n") } nil end |
#tty? ⇒ Boolean Also known as: isatty
68 69 70 |
# File 'lib/pwn/plugins/repl/ai_console.rb', line 68 def tty? false end |
#write(value) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/pwn/plugins/repl/ai_console.rb', line 32 def write(value) text = value.to_s @lock.synchronize do @buffer << text while (line = @buffer.slice!(/.*?\n/m)) @queue << [:notice, line] end if @buffer.bytesize > 16_384 @queue << [:notice, '[output withheld: unterminated stream exceeds 16 KiB]'] @buffer.clear end end text.bytesize end |