Class: TE3270::Emulators::Extra

Inherits:
Object
  • Object
show all
Defined in:
lib/te3270/emulators/extra.rb

Overview

This class has the code necessary to communicate with the terminal emulator called EXTRA! X-treme. You can use this emulator by providing the :extra parameter to the constructor of your screen object or by passing the same value to the emulator_for method on the TE3270 module.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeExtra

Returns a new instance of Extra.



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/te3270/emulators/extra.rb', line 12

def initialize
  if RUBY_PLATFORM == "java"
    require 'jruby-win32ole'
    require 'java'
    include_class 'java.awt.Dimension'
    include_class 'java.awt.Rectangle'
    include_class 'java.awt.Robot'
    include_class 'java.awt.Toolkit'
    include_class 'java.awt.event.InputEvent'
    include_class 'java.awt.image.BufferedImage'
    include_class 'javax.imageio.ImageIO'
  else
    require 'win32ole'
    require 'win32/screenshot'
  end
end

Instance Attribute Details

#max_wait_time=(value) ⇒ Object

Sets the attribute max_wait_time

Parameters:

  • value

    the value to set the attribute max_wait_time to.



10
11
12
# File 'lib/te3270/emulators/extra.rb', line 10

def max_wait_time=(value)
  @max_wait_time = value
end

#session_file=(value) ⇒ Object (writeonly)

Sets the attribute session_file

Parameters:

  • value

    the value to set the attribute session_file to.



10
11
12
# File 'lib/te3270/emulators/extra.rb', line 10

def session_file=(value)
  @session_file = value
end

#visible=(value) ⇒ Object

Sets the attribute visible

Parameters:

  • value

    the value to set the attribute visible to.



10
11
12
# File 'lib/te3270/emulators/extra.rb', line 10

def visible=(value)
  @visible = value
end

#window_state=(value) ⇒ Object

Sets the attribute window_state

Parameters:

  • value

    the value to set the attribute window_state to.



10
11
12
# File 'lib/te3270/emulators/extra.rb', line 10

def window_state=(value)
  @window_state = value
end

Instance Method Details

#connect {|_self| ... } ⇒ Object

Creates a method to connect to Extra System. This method expects a block in which certain platform specific values can be set. Extra can take the following parameters.

  • session_file - this value is required and should be the filename of the session.

  • visible - determines if the emulator is visible or not. If not set it will default to true.

  • window_state - determines the state of the session window. Valid values are :minimized, :normal, and :maximized. If not set it will default to :normal.

Examples:

Example calling screen object constructor with a block

screen_object = MyScreenObject.new(:extra)
screen_object.connect do |emulator|
  emulator.session_file = 'path_to_session_file'
  emulator.visible = true
  emulator.window_state = :maximized
end

Yields:

  • (_self)

Yield Parameters:



48
49
50
51
52
53
54
55
56
# File 'lib/te3270/emulators/extra.rb', line 48

def connect
  start_extra_system

  yield self if block_given?
  raise 'The session file must be set in a block when calling connect with the Extra emulator.' if @session_file.nil?
  open_session
  @screen = session.Screen
  @area = screen.SelectAll
end

#disconnectObject

Disconnects the Extra System connection



61
62
63
# File 'lib/te3270/emulators/extra.rb', line 61

def disconnect
  system.Quit
end

#get_string(row, column, length) ⇒ String

Extracts text of specified length from a start point.

Parameters:

  • row (Fixnum)

    the x coordinate of location on the screen.

  • column (Fixnum)

    the y coordinate of location on the screen.

  • length (Fixnum)

    the length of string to extract

Returns:

  • (String)


73
74
75
# File 'lib/te3270/emulators/extra.rb', line 73

def get_string(row, column, length)
  screen.GetString(row, column, length)
end

#put_string(str, row, column) ⇒ Object

Puts string at the coordinates specified.

Parameters:

  • str (String)

    the string to set

  • row (Fixnum)

    the x coordinate of the location on the screen.

  • column (Fixnum)

    the y coordinate of the location on the screen.



84
85
86
87
# File 'lib/te3270/emulators/extra.rb', line 84

def put_string(str, row, column)
  screen.PutString(str, row, column)
  quiet_period
end

#screenshot(filename) ⇒ Object

Creates a method to take screenshot of the active screen. If you have set the :visible property to false it will be made visible prior to taking the screenshot and then changed to invisible after.

Parameters:

  • filename (String)

    the path and name of the screenshot file to be saved



142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# File 'lib/te3270/emulators/extra.rb', line 142

def screenshot(filename)
  File.delete(filename) if File.exists?(filename)
  session.Visible = true unless visible

  if RUBY_PLATFORM == "java"
  toolkit = Toolkit::getDefaultToolkit()
  screen_size = toolkit.getScreenSize()
  rect = Rectangle.new(screen_size)
  robot = Robot.new
  image = robot.createScreenCapture(rect)
  f = java::io::File.new(filename)
  ImageIO::write(image, "png", f)
  else
    hwnd = session.WindowHandle
    Win32::Screenshot::Take.of(:window, hwnd: hwnd).write(filename)
  end

  session.Visible = false unless visible
end

#send_keys(keys) ⇒ Object

Sends keystrokes to the host, including function keys.

Parameters:

  • keys (String)

    keystokes up to 255 in length



94
95
96
97
# File 'lib/te3270/emulators/extra.rb', line 94

def send_keys(keys)
  screen.SendKeys(keys)
  quiet_period
end

#textString

Returns the text of the active screen

Returns:

  • (String)


167
168
169
# File 'lib/te3270/emulators/extra.rb', line 167

def text
  area.Value
end

#wait_for_host(seconds) ⇒ Object

Waits for the host to not send data for a specified number of seconds

Parameters:

  • seconds (Fixnum)

    the maximum number of seconds to wait



117
118
119
120
121
# File 'lib/te3270/emulators/extra.rb', line 117

def wait_for_host(seconds)
  wait_for(seconds) do
    screen.WaitHostQuiet
  end
end

#wait_for_string(str, row, column) ⇒ Object

Wait for the string to appear at the specified location

Parameters:

  • str (String)

    the string to wait for

  • row (Fixnum)

    the x coordinate of location

  • column (Fixnum)

    the y coordinate of location



106
107
108
109
110
# File 'lib/te3270/emulators/extra.rb', line 106

def wait_for_string(str, row, column)
  wait_for do
    screen.WaitForString(str, row, column)
  end
end

#wait_until_cursor_at(row, column) ⇒ Object

Waits until the cursor is at the specified location.

Parameters:

  • row (Fixnum)

    the x coordinate of the location

  • column (Fixnum)

    the y coordinate of the location



129
130
131
132
133
# File 'lib/te3270/emulators/extra.rb', line 129

def wait_until_cursor_at(row, column)
  wait_for do
    screen.WaitForCursor(row, column)
  end
end