Class: HrrRbSsh::Connection::Channel::ChannelType::Session

Inherits:
HrrRbSsh::Connection::Channel::ChannelType show all
Defined in:
lib/hrr_rb_ssh/connection/channel/channel_type/session.rb,
lib/hrr_rb_ssh/connection/channel/channel_type/session/proc_chain.rb,
lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type.rb,
lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/env.rb,
lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/exec.rb,
lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/shell.rb,
lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/pty_req.rb,
lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/subsystem.rb,
lib/hrr_rb_ssh/connection/channel/channel_type/session/proc_chain/chain_context.rb,
lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/env/context.rb,
lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/exec/context.rb,
lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/shell/context.rb,
lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/window_change.rb,
lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/pty_req/context.rb,
lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/subsystem/context.rb,
lib/hrr_rb_ssh/connection/channel/channel_type/session/request_type/window_change/context.rb

Defined Under Namespace

Classes: ProcChain, RequestType

Constant Summary collapse

NAME =
'session'

Instance Method Summary collapse

Methods inherited from HrrRbSsh::Connection::Channel::ChannelType

[], __subclass_list__, inherited

Constructor Details

#initialize(connection, channel, message, socket = nil) ⇒ Session

Returns a new instance of Session.



13
14
15
16
17
18
19
# File 'lib/hrr_rb_ssh/connection/channel/channel_type/session.rb', line 13

def initialize connection, channel, message, socket=nil
  @logger = Logger.new self.class.name
  @connection = connection
  @channel = channel
  @variables = {}
  @proc_chain = ProcChain.new
end

Instance Method Details

#closeObject



25
26
27
28
29
# File 'lib/hrr_rb_ssh/connection/channel/channel_type/session.rb', line 25

def close
  if @proc_chain_thread
    @proc_chain_thread.exit
  end
end

#proc_chain_threadObject



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/hrr_rb_ssh/connection/channel/channel_type/session.rb', line 36

def proc_chain_thread
  Thread.start {
    @logger.info { "start proc chain thread" }
    begin
      exitstatus = @proc_chain.call_next
    rescue => e
      @logger.error { [e.backtrace[0], ": ", e.message, " (", e.class.to_s, ")\n\t", e.backtrace[1..-1].join("\n\t")].join }
      exitstatus = 1
    ensure
      @logger.info { "closing proc chain thread" }
      @logger.info { "wait for sending output" }
      @channel.wait_until_senders_closed
      @logger.info { "sending output finished" }
      @channel.close from=:channel_type_instance, exitstatus=exitstatus
      @logger.info { "proc chain thread closed" }
    end
  }
end

#request(message) ⇒ Object



31
32
33
34
# File 'lib/hrr_rb_ssh/connection/channel/channel_type/session.rb', line 31

def request message
  request_type = message[:'request type']
  RequestType[request_type].run @proc_chain, @connection.username, @channel.io, @variables, message, @connection.options
end

#startObject



21
22
23
# File 'lib/hrr_rb_ssh/connection/channel/channel_type/session.rb', line 21

def start
  @proc_chain_thread = proc_chain_thread
end