class HrrRbSsh::Connection::Channel::ChannelType::Session

Constants

NAME

Public Class Methods

new(connection, channel, message, socket=nil, logger: nil) click to toggle source
# File lib/hrr_rb_ssh/connection/channel/channel_type/session.rb, line 15
def initialize connection, channel, message, socket=nil, logger: nil
  self.logger = logger
  @connection = connection
  @channel = channel
  @proc_chain = ProcChain.new
end

Public Instance Methods

close() click to toggle source
# File lib/hrr_rb_ssh/connection/channel/channel_type/session.rb, line 29
def close
  if @proc_chain_thread
    @proc_chain_thread.exit
  end
end
proc_chain_thread() click to toggle source
# File lib/hrr_rb_ssh/connection/channel/channel_type/session.rb, line 40
def proc_chain_thread
  Thread.start {
    log_info { "start proc chain thread" }
    begin
      exitstatus = @proc_chain.call_next
    rescue => e
      log_error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
      exitstatus = 1
    ensure
      log_info { "closing proc chain thread" }
      log_info { "closing channel IOs" }
      @channel.io.each{ |io| io.close rescue nil }
      log_info { "channel IOs closed" }
      log_info { "wait for sending output" }
      @channel.wait_until_senders_closed
      log_info { "sending output finished" }
      @channel.close from=:channel_type_instance, exitstatus=exitstatus
      log_info { "proc chain thread closed" }
    end
  }
end
request(message) click to toggle source
# File lib/hrr_rb_ssh/connection/channel/channel_type/session.rb, line 35
def request message
  request_type = message[:'request type']
  RequestType[request_type].run @proc_chain, @connection.username, @channel.io, @connection.variables, message, @connection.options, self, logger: logger
end
start() click to toggle source
# File lib/hrr_rb_ssh/connection/channel/channel_type/session.rb, line 22
def start
  case @connection.mode
  when Mode::SERVER
    @proc_chain_thread = proc_chain_thread
  end
end