class Roma::Client::Sender
Public Class Methods
new()
click to toggle source
# File lib/roma/client/sender.rb 9 def initialize 10 end
Public Instance Methods
send_command(nid, cmd, value = nil, receiver = :oneline_receiver)
click to toggle source
# File lib/roma/client/sender.rb 100 def send_command(nid, cmd, value = nil, receiver = :oneline_receiver) 101 con = ConPool.instance.get_connection(nid) 102 fail unless con 103 if value 104 con.write "#{cmd}\r\n#{value}\r\n" 105 else 106 con.write "#{cmd}\r\n" 107 end 108 ret = send(receiver, con) 109 ConPool.instance.return_connection(nid, con) 110 if ret && ret.instance_of?(String) && 111 (ret =~ /^SERVER_ERROR/ || ret =~ /^CLIENT_ERROR/) 112 fail ret 113 end 114 ret 115 end
send_route_mklhash_command(node_id)
click to toggle source
# File lib/roma/client/sender.rb 12 def send_route_mklhash_command(node_id) 13 Timeout.timeout(1) do 14 conn = ConPool.instance.get_connection(node_id) 15 conn.write "mklhash 0\r\n" 16 ret = conn.gets 17 ConPool.instance.return_connection(node_id, conn) 18 return ret.chomp if ret 19 end 20 rescue => e 21 STDERR.puts "#{node_id} #{e.inspect}" 22 return nil 23 end
send_routedump_command(node_id)
click to toggle source
# File lib/roma/client/sender.rb 25 def send_routedump_command(node_id) 26 Timeout.timeout(1) do 27 buf = RUBY_VERSION.split('.') 28 if buf[0].to_i == 1 && buf[1].to_i == 8 29 return send_routedump_yaml_command(node_id) 30 end 31 conn = ConPool.instance.get_connection(node_id) 32 conn.write "routingdump\r\n" 33 routes_length = conn.gets.to_i 34 if (routes_length <= 0) 35 conn.close 36 return :error if routes_length < 0 37 return nil 38 end 39 40 routes = '' 41 while (routes.length != routes_length) 42 routes = routes + conn.read(routes_length - routes.length) 43 end 44 conn.read(2) # "\r\n" 45 conn.gets 46 rd = Marshal.load(routes) 47 ConPool.instance.return_connection(node_id, conn) 48 return rd 49 end 50 rescue => e 51 STDERR.puts "#{node_id} #{e.inspect}" 52 nil 53 end
send_routedump_yaml_command(node_id)
click to toggle source
# File lib/roma/client/sender.rb 55 def send_routedump_yaml_command(node_id) 56 conn = ConPool.instance.get_connection(node_id) 57 conn.write "routingdump yaml\r\n" 58 59 yaml = '' 60 while ((line = conn.gets) != "END\r\n") 61 yaml << line 62 end 63 64 rd = YAML.load(yaml) 65 ConPool.instance.return_connection(node_id, conn) 66 rd 67 end
send_stats_command(filter, node_id)
click to toggle source
# File lib/roma/client/sender.rb 69 def send_stats_command(filter, node_id) 70 conn = ConPool.instance.get_connection(node_id) 71 cmd = 'stats' 72 cmd += " #{filter}" if filter 73 conn.write "#{cmd}\r\n" 74 75 stats_str = '' 76 while ((line = conn.gets) != "END\r\n") 77 stats_str << line 78 end 79 80 stats = Roma::Client::Stats.new(stats_str) 81 ConPool.instance.return_connection(node_id, conn) 82 stats 83 end
send_verbosity_command(ap)
click to toggle source
# File lib/roma/client/sender.rb 94 def send_verbosity_command(ap) 95 conn = ConPool.instance.get_connection(ap) 96 # TODO 97 ConPool.instance.return_connection(ap, conn) 98 end
send_version_command(ap)
click to toggle source
# File lib/roma/client/sender.rb 85 def send_version_command(ap) 86 conn = ConPool.instance.get_connection(ap) 87 conn.write("version\r\n") 88 res = conn.gets.chomp 89 ConPool.instance.return_connection(ap, conn) 90 fail unless res 91 res 92 end
Private Instance Methods
multiplelines_receiver(con)
click to toggle source
# File lib/roma/client/sender.rb 159 def multiplelines_receiver(con) 160 ret = [] 161 while (line = con.gets) != "END\r\n" 162 ret << line.chomp 163 end 164 ret 165 end
oneline_receiver(con)
click to toggle source
# File lib/roma/client/sender.rb 119 def oneline_receiver(con) 120 ret = con.gets 121 fail 'connection closed' if ret.nil? 122 ret.chomp 123 end
read_bytes(con, len)
click to toggle source
# File lib/roma/client/sender.rb 167 def read_bytes(con, len) 168 ret = '' 169 until (ret.length == len) 170 ret = ret + con.read(len - ret.length) 171 end 172 ret 173 end
value_casid_receiver(con)
click to toggle source
# File lib/roma/client/sender.rb 147 def value_casid_receiver(con) 148 ret = [] 149 while (line = con.gets) != "END\r\n" 150 s = line.split(' ') 151 return line.chomp if s[0] == 'SERVER_ERROR' || s[0] == 'CLIENT_ERROR' 152 ret << read_bytes(con, s[3].to_i) 153 ret << s[4] 154 read_bytes(con, 2) 155 end 156 ret 157 end
value_hash_receiver(con)
click to toggle source
# File lib/roma/client/sender.rb 136 def value_hash_receiver(con) 137 ret = {} 138 while (line = con.gets) != "END\r\n" 139 s = line.split(' ') 140 return line.chomp if s[0] == 'SERVER_ERROR' || s[0] == 'CLIENT_ERROR' 141 ret[s[1]] = read_bytes(con, s[3].to_i) 142 read_bytes(con, 2) 143 end 144 ret 145 end
value_list_receiver(con)
click to toggle source
# File lib/roma/client/sender.rb 125 def value_list_receiver(con) 126 ret = [] 127 while (line = con.gets) != "END\r\n" 128 s = line.split(' ') 129 return line.chomp if s[0] == 'SERVER_ERROR' || s[0] == 'CLIENT_ERROR' 130 ret << read_bytes(con, s[3].to_i) 131 read_bytes(con, 2) 132 end 133 ret 134 end