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