Class: Net::SSH::Multi::ChannelProxy
- Inherits:
-
Object
- Object
- Net::SSH::Multi::ChannelProxy
- Defined in:
- lib/net/ssh/multi/channel_proxy.rb
Overview
The ChannelProxy is a delegate class that represents a channel that has not yet been opened. It is only used when Net::SSH::Multi is running with with a concurrent connections limit (see Net::SSH::Multi::Session#concurrent_connections).
You’ll never need to instantiate one of these directly, and will probably (if all goes well!) never even notice when one of these is in use. Essentially, it is spawned by a Net::SSH::Multi::PendingConnection when the pending connection is asked to open a channel. Any actions performed on the channel proxy will then be recorded, until a real channel is set as the delegate (see #delegate_to). At that point, all recorded actions will be replayed on the channel, and any subsequent actions will be immediately delegated to the channel.
Instance Attribute Summary collapse
-
#on_confirm ⇒ Object
readonly
This is the “on confirm” callback that gets called when the real channel is opened.
Instance Method Summary collapse
-
#delegate_to(channel) ⇒ Object
Instructs the proxy to delegate all further actions to the given
channel
(which must be an instance of Net::SSH::Connection::Channel). -
#initialize(&on_confirm) ⇒ ChannelProxy
constructor
Instantiates a new channel proxy with the given
on_confirm
callback. -
#method_missing(sym, *args, &block) ⇒ Object
If a channel delegate has been specified (see #delegate_to), the method will be immediately sent to the delegate.
Constructor Details
#initialize(&on_confirm) ⇒ ChannelProxy
Instantiates a new channel proxy with the given on_confirm
callback.
21 22 23 24 25 |
# File 'lib/net/ssh/multi/channel_proxy.rb', line 21 def initialize(&on_confirm) @on_confirm = on_confirm @recordings = [] @channel = nil end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(sym, *args, &block) ⇒ Object
If a channel delegate has been specified (see #delegate_to), the method will be immediately sent to the delegate. Otherwise, the call is added to the list of recorded method calls, to be played back when a delegate is specified.
41 42 43 44 45 46 47 |
# File 'lib/net/ssh/multi/channel_proxy.rb', line 41 def method_missing(sym, *args, &block) if @channel @channel.__send__(sym, *args, &block) else @recordings << [sym, args, block] end end |
Instance Attribute Details
#on_confirm ⇒ Object (readonly)
This is the “on confirm” callback that gets called when the real channel is opened.
18 19 20 |
# File 'lib/net/ssh/multi/channel_proxy.rb', line 18 def on_confirm @on_confirm end |
Instance Method Details
#delegate_to(channel) ⇒ Object
Instructs the proxy to delegate all further actions to the given channel
(which must be an instance of Net::SSH::Connection::Channel). All recorded actions are immediately replayed, in order, against the delegate channel.
30 31 32 33 34 35 |
# File 'lib/net/ssh/multi/channel_proxy.rb', line 30 def delegate_to(channel) @channel = channel @recordings.each do |sym, args, block| @channel.__send__(sym, *args, &block) end end |