class HrrRbNetconf::Server::Capability::Base_1_1::Sender
Constants
- MAX_CHUNK_SIZE
Public Class Methods
new(io_w, logger: nil)
click to toggle source
# File lib/hrr_rb_netconf/server/capability/base_1_1.rb, line 103 def initialize io_w, logger: nil self.logger = logger @io_w = io_w @formatter = REXML::Formatters::Pretty.new(2) @formatter.compact = true end
Public Instance Methods
send_message(msg)
click to toggle source
# File lib/hrr_rb_netconf/server/capability/base_1_1.rb, line 110 def send_message msg raw_msg = StringIO.new case msg when String begin @formatter.write(REXML::Document.new(msg, {:ignore_whitespace_nodes => :all}).root, raw_msg) rescue => e log_error { "Invalid sending message: #{msg.inspect}: #{e.message}" } raise "Invalid sending message: #{msg.inspect}: #{e.message}" end when REXML::Document @formatter.write(msg.root, raw_msg) when REXML::Element @formatter.write(msg, raw_msg) else log_error { "Unexpected sending message: #{msg.inspect}" } raise ArgumentError, "Unexpected sending message: #{msg.inspect}" end log_debug { "Sending message: #{raw_msg.string.inspect}" } raw_msg.rewind encoded_msg = StringIO.new until raw_msg.eof? chunk_size = rand(1..MAX_CHUNK_SIZE) chunk_data = raw_msg.read(chunk_size) encoded_msg.write "\n##{chunk_data.size}\n#{chunk_data}" end encoded_msg.write "\n##\n" log_debug { "Sending encoded message: #{encoded_msg.string.inspect}" } begin @io_w.write encoded_msg.string rescue => e log_info { "Sender IO closed: #{e.class}: #{e.message}" } raise IOError, "Sender IO closed: #{e.class}: #{e.message}" end end