Module: Plug::Base
- Included in:
- ArrayFeeder, Blit, Proxy, Telson, UdpServer
- Defined in:
- lib/rbkb/plug/plug.rb
Instance Attribute Summary collapse
-
#kind ⇒ Object
Returns the value of attribute kind.
-
#no_stop_on_unbind ⇒ Object
Returns the value of attribute no_stop_on_unbind.
-
#peers ⇒ Object
Returns the value of attribute peers.
-
#tls ⇒ Object
Returns the value of attribute tls.
-
#tls_opts ⇒ Object
Returns the value of attribute tls_opts.
-
#transport ⇒ Object
Returns the value of attribute transport.
Instance Method Summary collapse
- #connection_completed ⇒ Object
- #initialize(transport, opts = {}) ⇒ Object
- #name ⇒ Object
-
#plug_peer ⇒ Object
plug_peer creates a peering association for a given peer based on get_peername.
-
#plug_receive(_dat) ⇒ Object
plug_receive is used by receive_data to divert incoming messages.
- #post_init ⇒ Object
- #receive_data(dat) ⇒ Object
-
#say(dat, sender) ⇒ Object
This instance of the say method is an abstract stub and just "dumps" the message.
- #unbind ⇒ Object
Instance Attribute Details
#kind ⇒ Object
Returns the value of attribute kind.
51 52 53 |
# File 'lib/rbkb/plug/plug.rb', line 51 def kind @kind end |
#no_stop_on_unbind ⇒ Object
Returns the value of attribute no_stop_on_unbind.
51 52 53 |
# File 'lib/rbkb/plug/plug.rb', line 51 def no_stop_on_unbind @no_stop_on_unbind end |
#peers ⇒ Object
Returns the value of attribute peers.
51 52 53 |
# File 'lib/rbkb/plug/plug.rb', line 51 def peers @peers end |
#tls ⇒ Object
Returns the value of attribute tls.
51 52 53 |
# File 'lib/rbkb/plug/plug.rb', line 51 def tls @tls end |
#tls_opts ⇒ Object
Returns the value of attribute tls_opts.
51 52 53 |
# File 'lib/rbkb/plug/plug.rb', line 51 def tls_opts @tls_opts end |
#transport ⇒ Object
Returns the value of attribute transport.
51 52 53 |
# File 'lib/rbkb/plug/plug.rb', line 51 def transport @transport end |
Instance Method Details
#connection_completed ⇒ Object
118 119 120 121 122 123 |
# File 'lib/rbkb/plug/plug.rb', line 118 def connection_completed peer = plug_peer UI.log "** #{name} CONNECTED TO #{peer.name}" start_tls(tls_opts || {}) if tls peer end |
#initialize(transport, opts = {}) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/rbkb/plug/plug.rb', line 53 def initialize(transport, opts = {}) # raise "Invalid transport #{transport.inspect}" unless (:UDP, :TCP).include?(transport) @transport = transport @peers = PeerList.new(self) opts.each_pair do |k, v| accessor = k.to_s + '=' raise "Bad attribute: #{k}" unless respond_to?(accessor) send(accessor, v) end end |
#name ⇒ Object
66 67 68 69 70 |
# File 'lib/rbkb/plug/plug.rb', line 66 def name sn = get_sockname addr = sn ? Socket.unpack_sockaddr_in(sn).reverse.join(':') : 'PENDING' "#{kind.to_s.upcase}-#{addr}(#{@transport})" end |
#plug_peer ⇒ Object
plug_peer creates a peering association for a given peer based on get_peername. The existing or newly created peer object is returned.
74 75 76 77 |
# File 'lib/rbkb/plug/plug.rb', line 74 def plug_peer paddr = get_peername @peers.find_peer(paddr) || @peers.add_peer(paddr) end |
#plug_receive(_dat) ⇒ Object
plug_receive is used by receive_data to divert incoming messages. The "peer" is added if it is not already present. This instance will check whether # a peer is "muted" and will return the peer if not. This method can be overriden by child classes to implement additional checks. It receives "dat" so that such checks can optionally make forwarding decisions based on message data contents as well.
Returns:
- nil : indicates that the message should be stifled
- A peer object : indicates that the message should be processed
further
90 91 92 93 |
# File 'lib/rbkb/plug/plug.rb', line 90 def plug_receive(_dat) peer = plug_peer peer unless peer.mute end |
#post_init ⇒ Object
103 104 105 106 107 108 109 |
# File 'lib/rbkb/plug/plug.rb', line 103 def post_init UI.verbose "** #{name} Started" if @kind == :server and peer = plug_peer UI.log "** #{name} CONNECTED TO #{peer.name}" start_tls(tls_opts || {}) if tls end end |
#receive_data(dat) ⇒ Object
111 112 113 114 115 116 |
# File 'lib/rbkb/plug/plug.rb', line 111 def receive_data(dat) if peer = plug_receive(dat) say(dat, peer) end peer end |
#say(dat, sender) ⇒ Object
This instance of the say method is an abstract stub and just "dumps" the message. It should be overridden and optionally called with super() if you actually want to do anything useful when incoming messages are received.
99 100 101 |
# File 'lib/rbkb/plug/plug.rb', line 99 def say(dat, sender) UI.dump(sender.name, name, dat) end |