nats 0.4.2 → 0.4.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING +1 -1
- data/bin/nats-pub +10 -3
- data/bin/nats-queue +25 -6
- data/bin/nats-sub +23 -7
- data/lib/nats/client.rb +13 -13
- data/lib/nats/server.rb +1 -1
- data/lib/nats/server/const.rb +7 -6
- data/lib/nats/server/options.rb +6 -4
- data/lib/nats/server/server.rb +90 -86
- data/lib/nats/server/util.rb +2 -2
- data/nats.gemspec +1 -2
- metadata +3 -3
data/COPYING
CHANGED
@@ -16,4 +16,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
16
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
17
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
18
18
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
19
|
-
IN THE SOFTWARE.
|
19
|
+
IN THE SOFTWARE.
|
data/bin/nats-pub
CHANGED
@@ -1,19 +1,26 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'optparse'
|
3
4
|
require 'rubygems'
|
4
5
|
require 'nats/client'
|
5
6
|
|
6
7
|
def usage
|
7
|
-
puts "Usage: nats-pub <subject> <msg>"; exit
|
8
|
+
puts "Usage: nats-pub <subject> <msg> [-s server]"; exit
|
8
9
|
end
|
9
10
|
|
10
|
-
|
11
|
+
args = ARGV.dup
|
12
|
+
opts_parser = OptionParser.new do |opts|
|
13
|
+
opts.on('-s SERVER') { |server| $nats_server = server }
|
14
|
+
end
|
15
|
+
args = opts_parser.parse!(args)
|
16
|
+
|
17
|
+
subject, msg = args
|
11
18
|
usage unless subject
|
12
19
|
msg ||= 'Hello World'
|
13
20
|
|
14
21
|
NATS.on_error { |err| puts "Server Error: #{err}"; exit! }
|
15
22
|
|
16
|
-
NATS.start do
|
23
|
+
NATS.start(:uri => $nats_server, :autostart => true) do
|
17
24
|
NATS.publish(subject, msg) { NATS.stop }
|
18
25
|
end
|
19
26
|
|
data/bin/nats-queue
CHANGED
@@ -1,21 +1,40 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'optparse'
|
3
4
|
require 'rubygems'
|
4
5
|
require 'nats/client'
|
5
6
|
|
6
|
-
trap(
|
7
|
-
trap("INT") { NATS.stop }
|
7
|
+
['TERM', 'INT'].each { |s| trap(s) { puts; exit! } }
|
8
8
|
|
9
9
|
def usage
|
10
|
-
puts "Usage: nats-queue <subject> <queue name>"; exit
|
10
|
+
puts "Usage: nats-queue <subject> <queue name> [-s server] [-t]"; exit
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
args = ARGV.dup
|
14
|
+
opts_parser = OptionParser.new do |opts|
|
15
|
+
opts.on('-s SERVER') { |server| $nats_server = server }
|
16
|
+
opts.on('-t') { $show_time = true }
|
17
|
+
|
18
|
+
end
|
19
|
+
args = opts_parser.parse!(args)
|
20
|
+
|
21
|
+
subject, queue_group = args
|
14
22
|
usage unless subject and queue_group
|
15
23
|
|
24
|
+
def time_prefix
|
25
|
+
"[#{Time.now}] " if $show_time
|
26
|
+
end
|
27
|
+
|
28
|
+
def header
|
29
|
+
$i=0 unless $i
|
30
|
+
"#{time_prefix}[\##{$i+=1}]"
|
31
|
+
end
|
32
|
+
|
16
33
|
NATS.on_error { |err| puts "Server Error: #{err}"; exit! }
|
17
34
|
|
18
|
-
NATS.start do
|
35
|
+
NATS.start(:uri => $nats_server, :autostart => true) do
|
19
36
|
puts "Listening on [#{subject}], queue group [#{queue_group}]"
|
20
|
-
NATS.subscribe(subject, queue_group) { |msg
|
37
|
+
NATS.subscribe(subject, :queue => queue_group) { |msg, _, sub|
|
38
|
+
puts "#{header} Received on [#{sub}] : '#{msg}'"
|
39
|
+
}
|
21
40
|
end
|
data/bin/nats-sub
CHANGED
@@ -1,22 +1,38 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'optparse'
|
3
4
|
require 'rubygems'
|
4
5
|
require 'nats/client'
|
5
6
|
|
6
|
-
trap(
|
7
|
-
trap("INT") { NATS.stop }
|
7
|
+
['TERM', 'INT'].each { |s| trap(s) { puts; exit! } }
|
8
8
|
|
9
9
|
def usage
|
10
|
-
puts "Usage: nats-sub <subject>"; exit
|
10
|
+
puts "Usage: nats-sub <subject> [-s server] [-t]"; exit
|
11
11
|
end
|
12
12
|
|
13
|
-
|
13
|
+
args = ARGV.dup
|
14
|
+
opts_parser = OptionParser.new do |opts|
|
15
|
+
opts.on('-s SERVER') { |server| $nats_server = server }
|
16
|
+
opts.on('-t') { $show_time = true }
|
17
|
+
|
18
|
+
end
|
19
|
+
args = opts_parser.parse!(args)
|
20
|
+
|
21
|
+
subject = args.shift
|
14
22
|
usage unless subject
|
15
|
-
|
23
|
+
|
24
|
+
def time_prefix
|
25
|
+
"[#{Time.now}] " if $show_time
|
26
|
+
end
|
27
|
+
|
28
|
+
def header
|
29
|
+
$i=0 unless $i
|
30
|
+
"#{time_prefix}[\##{$i+=1}]"
|
31
|
+
end
|
16
32
|
|
17
33
|
NATS.on_error { |err| puts "Server Error: #{err}"; exit! }
|
18
34
|
|
19
|
-
NATS.start do
|
35
|
+
NATS.start(:uri => $nats_server, :autostart => true) do
|
20
36
|
puts "Listening on [#{subject}]"
|
21
|
-
NATS.subscribe(subject) { |msg, _, sub| puts "
|
37
|
+
NATS.subscribe(subject) { |msg, _, sub| puts "#{header} Received on [#{sub}] : '#{msg}'" }
|
22
38
|
end
|
data/lib/nats/client.rb
CHANGED
@@ -8,7 +8,7 @@ require "#{ep}/ext/json"
|
|
8
8
|
|
9
9
|
module NATS
|
10
10
|
|
11
|
-
VERSION = "0.4.
|
11
|
+
VERSION = "0.4.8".freeze
|
12
12
|
|
13
13
|
DEFAULT_PORT = 4222
|
14
14
|
DEFAULT_URI = "nats://localhost:#{DEFAULT_PORT}".freeze
|
@@ -16,16 +16,13 @@ module NATS
|
|
16
16
|
MAX_RECONNECT_ATTEMPTS = 10
|
17
17
|
RECONNECT_TIME_WAIT = 2
|
18
18
|
|
19
|
-
AUTOSTART_PID_FILE = '/tmp/nats-server.pid'
|
20
|
-
AUTOSTART_LOG_FILE = '/tmp/nats-server.log'
|
21
|
-
|
22
19
|
# Protocol
|
23
20
|
# @private
|
24
|
-
MSG = /\AMSG\s+([^\s
|
21
|
+
MSG = /\AMSG\s+([^\s]+)\s+([^\s]+)\s+(([^\s]+)[^\S\r\n]+)?(\d+)\r\n/i #:nodoc:
|
25
22
|
OK = /\A\+OK\s*\r\n/i #:nodoc:
|
26
23
|
ERR = /\A-ERR\s+('.+')?\r\n/i #:nodoc:
|
27
|
-
PING = /\APING\r\n/i #:nodoc:
|
28
|
-
PONG = /\APONG\r\n/i #:nodoc:
|
24
|
+
PING = /\APING\s*\r\n/i #:nodoc:
|
25
|
+
PONG = /\APONG\s*\r\n/i #:nodoc:
|
29
26
|
INFO = /\AINFO\s+([^\r\n]+)\r\n/i #:nodoc:
|
30
27
|
UNKNOWN = /\A(.*)\r\n/ #:nodoc:
|
31
28
|
|
@@ -46,6 +43,10 @@ module NATS
|
|
46
43
|
AWAITING_CONTROL_LINE = 1 #:nodoc:
|
47
44
|
AWAITING_MSG_PAYLOAD = 2 #:nodoc:
|
48
45
|
|
46
|
+
# Autostart properties
|
47
|
+
AUTOSTART_PID_FILE = '/tmp/nats-server.pid'
|
48
|
+
AUTOSTART_LOG_FILE = '/tmp/nats-server.log'
|
49
|
+
|
49
50
|
# Duplicate autostart protection
|
50
51
|
@@tried_autostart = {}
|
51
52
|
|
@@ -59,12 +60,12 @@ module NATS
|
|
59
60
|
alias :reactor_was_running? :reactor_was_running
|
60
61
|
|
61
62
|
# Create and return a connection to the server with the given options.
|
62
|
-
# The server will be autostarted if
|
63
|
+
# The server will be autostarted if requested and the <b>uri</b> is determined to be local.
|
63
64
|
# The optional block will be called when the connection has been completed.
|
64
65
|
#
|
65
66
|
# @param [Hash] opts
|
66
67
|
# @option opts [String] :uri The URI to connect to, example nats://localhost:4222
|
67
|
-
# @option opts [Boolean] :autostart Boolean that can be used to
|
68
|
+
# @option opts [Boolean] :autostart Boolean that can be used to engage server autostart functionality.
|
68
69
|
# @option opts [Boolean] :reconnect Boolean that can be used to suppress reconnect functionality.
|
69
70
|
# @option opts [Boolean] :debug Boolean that can be used to output additional debug information.
|
70
71
|
# @option opts [Boolean] :verbose Boolean that is sent to server for setting verbose protocol mode.
|
@@ -82,11 +83,10 @@ module NATS
|
|
82
83
|
opts[:verbose] = ENV['NATS_VERBOSE'] unless ENV['NATS_VERBOSE'].nil?
|
83
84
|
opts[:pedantic] = ENV['NATS_PEDANTIC'] unless ENV['NATS_PEDANTIC'].nil?
|
84
85
|
opts[:debug] = ENV['NATS_DEBUG'] if !ENV['NATS_DEBUG'].nil?
|
85
|
-
opts[:autostart] = (ENV['NATS_AUTO'] || true) if opts[:autostart].nil?
|
86
|
-
|
87
86
|
@uri = opts[:uri] = URI.parse(opts[:uri])
|
88
87
|
@err_cb = proc { raise Error, "Could not connect to server on #{@uri}."} unless err_cb
|
89
|
-
check_autostart(@uri) if opts[:autostart]
|
88
|
+
check_autostart(@uri) if opts[:autostart] == true
|
89
|
+
|
90
90
|
client = EM.connect(@uri.host, @uri.port, self, opts)
|
91
91
|
client.on_connect(&blk) if blk
|
92
92
|
return client
|
@@ -207,7 +207,7 @@ module NATS
|
|
207
207
|
log_arg = "-l #{AUTOSTART_LOG_FILE}"
|
208
208
|
pid_arg = "-P #{AUTOSTART_PID_FILE}"
|
209
209
|
# daemon mode to release client
|
210
|
-
|
210
|
+
`nats-server #{port_arg} #{user_arg} #{pass_arg} #{log_arg} #{pid_arg} -d 2> /dev/null`
|
211
211
|
$? == 0
|
212
212
|
end
|
213
213
|
|
data/lib/nats/server.rb
CHANGED
data/lib/nats/server/const.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
|
2
2
|
module NATSD #:nodoc:
|
3
3
|
|
4
|
-
VERSION = '0.4.
|
4
|
+
VERSION = '0.4.8'
|
5
5
|
APP_NAME = 'nats-server'
|
6
6
|
|
7
7
|
DEFAULT_PORT = 4222
|
@@ -12,11 +12,12 @@ module NATSD #:nodoc:
|
|
12
12
|
AWAITING_MSG_PAYLOAD = 2
|
13
13
|
|
14
14
|
# Ops - See protocol.txt for more info
|
15
|
-
INFO = /\AINFO\r\n/i
|
16
|
-
PUB_OP = /\APUB\s+([^\s
|
17
|
-
SUB_OP = /\ASUB\s+([^\s
|
18
|
-
UNSUB_OP = /\AUNSUB\s+([^\s
|
19
|
-
PING = /\APING\r\n/i
|
15
|
+
INFO = /\AINFO\s*\r\n/i
|
16
|
+
PUB_OP = /\APUB\s+([^\s]+)\s+(([^\s]+)[^\S\r\n]+)?(\d+)\r\n/i
|
17
|
+
SUB_OP = /\ASUB\s+([^\s]+)\s+(([^\s]+)[^\S\r\n]+)?([^\s]+)\r\n/i
|
18
|
+
UNSUB_OP = /\AUNSUB\s+([^\s]+)\s*(\s+(\d+))?\r\n/i
|
19
|
+
PING = /\APING\s*\r\n/i
|
20
|
+
PONG = /\APONG\s*\r\n/i
|
20
21
|
CONNECT = /\ACONNECT\s+([^\r\n]+)\r\n/i
|
21
22
|
UNKNOWN = /\A(.*)\r\n/
|
22
23
|
|
data/lib/nats/server/options.rb
CHANGED
@@ -19,8 +19,7 @@ module NATSD
|
|
19
19
|
opts.on("-d", "--daemonize", "Run daemonized in the background") { @options[:daemonize] = true }
|
20
20
|
opts.on("-P", "--pid FILE", "File to store PID") { |file| @options[:pid_file] = file }
|
21
21
|
|
22
|
-
opts.on("-
|
23
|
-
"(default: #{@options[:config_file]})") { |file| @options[:config_file] = file }
|
22
|
+
opts.on("-c", "--config FILE", "Configuration File") { |file| @options[:config_file] = file }
|
24
23
|
|
25
24
|
opts.separator ""
|
26
25
|
opts.separator "Logging options:"
|
@@ -53,18 +52,22 @@ module NATSD
|
|
53
52
|
def read_config_file
|
54
53
|
return unless config_file = @options[:config_file]
|
55
54
|
config = File.open(config_file) { |f| YAML.load(f) }
|
55
|
+
|
56
56
|
# Command lines args, parsed first, will override these.
|
57
57
|
@options[:port] = config['port'] if @options[:port].nil?
|
58
58
|
@options[:addr] = config['net'] if @options[:addr].nil?
|
59
|
+
|
59
60
|
if auth = config['authorization']
|
60
61
|
@options[:user] = auth['user'] if @options[:user].nil?
|
61
62
|
@options[:pass] = auth['password'] if @options[:pass].nil?
|
63
|
+
@options[:pass] = auth['pass'] if @options[:pass].nil?
|
62
64
|
@options[:token] = auth['token'] if @options[:token].nil?
|
63
65
|
@options[:auth_timeout] = auth['timeout'] if @options[:auth_timeout].nil?
|
64
66
|
end
|
67
|
+
|
65
68
|
@options[:pid_file] = config['pid_file'] if @options[:pid_file].nil?
|
66
69
|
@options[:log_file] = config['log_file'] if @options[:log_file].nil?
|
67
|
-
@options[:
|
70
|
+
@options[:log_time] = config['logtime'] if @options[:log_time].nil?
|
68
71
|
@options[:debug] = config['debug'] if @options[:debug].nil?
|
69
72
|
@options[:trace] = config['trace'] if @options[:trace].nil?
|
70
73
|
|
@@ -123,6 +126,5 @@ module NATSD
|
|
123
126
|
end
|
124
127
|
|
125
128
|
end
|
126
|
-
|
127
129
|
end
|
128
130
|
end
|
data/lib/nats/server/server.rb
CHANGED
@@ -13,7 +13,7 @@ module NATSD #:nodoc: all
|
|
13
13
|
alias debug_flag? :debug_flag
|
14
14
|
alias trace_flag? :trace_flag
|
15
15
|
|
16
|
-
def version; "nats
|
16
|
+
def version; "nats-server version #{NATSD::VERSION}" end
|
17
17
|
|
18
18
|
def host; @options[:addr] end
|
19
19
|
def port; @options[:port] end
|
@@ -24,8 +24,11 @@ module NATSD #:nodoc: all
|
|
24
24
|
|
25
25
|
# Allow command line to override config file, so do them first.
|
26
26
|
parser.parse!(argv)
|
27
|
-
read_config_file
|
27
|
+
read_config_file if @options[:config_file]
|
28
28
|
finalize_options
|
29
|
+
rescue OptionParser::InvalidOption => e
|
30
|
+
log_error "Error parsing options: #{e}"
|
31
|
+
exit(1)
|
29
32
|
end
|
30
33
|
|
31
34
|
def setup(argv)
|
@@ -58,7 +61,7 @@ module NATSD #:nodoc: all
|
|
58
61
|
EM.epoll unless @options[:noepoll]
|
59
62
|
EM.kqueue unless @options[:nokqueue]
|
60
63
|
|
61
|
-
# Write pid file if
|
64
|
+
# Write pid file if requested.
|
62
65
|
File.open(@options[:pid_file], 'w') { |f| f.puts "#{Process.pid}" } if @options[:pid_file]
|
63
66
|
end
|
64
67
|
|
@@ -170,90 +173,91 @@ module NATSD #:nodoc: all
|
|
170
173
|
# while (@buf && !@buf.empty? && !@closing)
|
171
174
|
while (@buf && !@closing)
|
172
175
|
case @parse_state
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
error_close PAYLOAD_TOO_BIG
|
185
|
-
end
|
186
|
-
send_data(INVALID_SUBJECT) if (@pedantic && !(@msg_sub =~ SUB_NO_WC))
|
187
|
-
when SUB_OP
|
188
|
-
ctrace('SUB OP', strip_op($&)) if NATSD::Server.trace_flag?
|
189
|
-
return connect_auth_timeout if @auth_pending
|
190
|
-
@buf = $'
|
191
|
-
sub, qgroup, sid = $1, $3, $4
|
192
|
-
return send_data(INVALID_SUBJECT) if !($1 =~ SUB)
|
193
|
-
return send_data(INVALID_SID_TAKEN) if @subscriptions[sid]
|
194
|
-
sub = Subscriber.new(self, sub, sid, qgroup, 0)
|
195
|
-
@subscriptions[sid] = sub
|
196
|
-
Server.subscribe(sub)
|
197
|
-
send_data(OK) if @verbose
|
198
|
-
when UNSUB_OP
|
199
|
-
ctrace('UNSUB OP', strip_op($&)) if NATSD::Server.trace_flag?
|
200
|
-
return connect_auth_timeout if @auth_pending
|
201
|
-
@buf = $'
|
202
|
-
sid, sub = $1, @subscriptions[$1]
|
203
|
-
return send_data(INVALID_SID_NOEXIST) unless sub
|
204
|
-
# If we have set max_responses, we will unsubscribe once we have received the appropriate
|
205
|
-
# amount of responses
|
206
|
-
sub.max_responses = ($2 && $3) ? $3.to_i : nil
|
207
|
-
delete_subscriber(sub) unless (sub.max_responses && (sub.num_responses < sub.max_responses))
|
208
|
-
send_data(OK) if @verbose
|
209
|
-
when PING
|
210
|
-
ctrace('PING OP', strip_op($&)) if NATSD::Server.trace_flag?
|
211
|
-
@buf = $'
|
212
|
-
send_data(PONG_RESPONSE)
|
213
|
-
when CONNECT
|
214
|
-
ctrace('CONNECT OP', strip_op($&)) if NATSD::Server.trace_flag?
|
215
|
-
@buf = $'
|
216
|
-
begin
|
217
|
-
config = JSON.parse($1, :symbolize_keys => true, :symbolize_names => true)
|
218
|
-
process_connect_config(config)
|
219
|
-
rescue => e
|
220
|
-
send_data(INVALID_CONFIG)
|
221
|
-
log_error
|
222
|
-
end
|
223
|
-
when INFO
|
224
|
-
ctrace('INFO OP', strip_op($&)) if NATSD::Server.trace_flag?
|
225
|
-
return connect_auth_timeout if @auth_pending
|
226
|
-
@buf = $'
|
227
|
-
send_info
|
228
|
-
when UNKNOWN
|
229
|
-
ctrace('Unknown Op', strip_op($&)) if NATSD::Server.trace_flag?
|
230
|
-
return connect_auth_timeout if @auth_pending
|
231
|
-
@buf = $'
|
232
|
-
send_data(UNKNOWN_OP)
|
233
|
-
else
|
234
|
-
# If we are here we do not have a complete line yet that we understand.
|
235
|
-
# If too big, cut the connection off.
|
236
|
-
if @buf.bytesize > NATSD::Server.max_control_line
|
237
|
-
debug "Control line size exceeded (#{@buf.bytesize}/#{NATSD::Server.max_control_line}), closing connection.."
|
238
|
-
error_close PROTOCOL_OP_TOO_BIG
|
239
|
-
end
|
240
|
-
return
|
176
|
+
when AWAITING_CONTROL_LINE
|
177
|
+
case @buf
|
178
|
+
when PUB_OP
|
179
|
+
ctrace('PUB OP', strip_op($&)) if NATSD::Server.trace_flag?
|
180
|
+
return connect_auth_timeout if @auth_pending
|
181
|
+
@buf = $'
|
182
|
+
@parse_state = AWAITING_MSG_PAYLOAD
|
183
|
+
@msg_sub, @msg_reply, @msg_size = $1, $3, $4.to_i
|
184
|
+
if (@msg_size > NATSD::Server.max_payload)
|
185
|
+
debug "Message payload size exceeded (#{@msg_size}/#{NATSD::Server.max_payload}), closing connection"
|
186
|
+
error_close PAYLOAD_TOO_BIG
|
241
187
|
end
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
return
|
246
|
-
|
247
|
-
|
188
|
+
send_data(INVALID_SUBJECT) if (@pedantic && !(@msg_sub =~ SUB_NO_WC))
|
189
|
+
when SUB_OP
|
190
|
+
ctrace('SUB OP', strip_op($&)) if NATSD::Server.trace_flag?
|
191
|
+
return connect_auth_timeout if @auth_pending
|
192
|
+
@buf = $'
|
193
|
+
sub, qgroup, sid = $1, $3, $4
|
194
|
+
return send_data(INVALID_SUBJECT) if !($1 =~ SUB)
|
195
|
+
return send_data(INVALID_SID_TAKEN) if @subscriptions[sid]
|
196
|
+
sub = Subscriber.new(self, sub, sid, qgroup, 0)
|
197
|
+
@subscriptions[sid] = sub
|
198
|
+
Server.subscribe(sub)
|
248
199
|
send_data(OK) if @verbose
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
@
|
253
|
-
|
200
|
+
when UNSUB_OP
|
201
|
+
ctrace('UNSUB OP', strip_op($&)) if NATSD::Server.trace_flag?
|
202
|
+
return connect_auth_timeout if @auth_pending
|
203
|
+
@buf = $'
|
204
|
+
sid, sub = $1, @subscriptions[$1]
|
205
|
+
if sub
|
206
|
+
# If we have set max_responses, we will unsubscribe once we have received
|
207
|
+
# the appropriate amount of responses.
|
208
|
+
sub.max_responses = ($2 && $3) ? $3.to_i : nil
|
209
|
+
delete_subscriber(sub) unless (sub.max_responses && (sub.num_responses < sub.max_responses))
|
210
|
+
send_data(OK) if @verbose
|
211
|
+
else
|
212
|
+
send_data(INVALID_SID_NOEXIST) if @pedantic
|
213
|
+
end
|
214
|
+
when PING
|
215
|
+
ctrace('PING OP', strip_op($&)) if NATSD::Server.trace_flag?
|
216
|
+
@buf = $'
|
217
|
+
send_data(PONG_RESPONSE)
|
218
|
+
when CONNECT
|
219
|
+
ctrace('CONNECT OP', strip_op($&)) if NATSD::Server.trace_flag?
|
220
|
+
@buf = $'
|
221
|
+
begin
|
222
|
+
config = JSON.parse($1)
|
223
|
+
process_connect_config(config)
|
224
|
+
rescue => e
|
225
|
+
send_data(INVALID_CONFIG)
|
226
|
+
log_error
|
227
|
+
end
|
228
|
+
when INFO
|
229
|
+
ctrace('INFO OP', strip_op($&)) if NATSD::Server.trace_flag?
|
230
|
+
return connect_auth_timeout if @auth_pending
|
231
|
+
@buf = $'
|
232
|
+
send_info
|
233
|
+
when UNKNOWN
|
234
|
+
ctrace('Unknown Op', strip_op($&)) if NATSD::Server.trace_flag?
|
235
|
+
return connect_auth_timeout if @auth_pending
|
236
|
+
@buf = $'
|
237
|
+
send_data(UNKNOWN_OP)
|
238
|
+
else
|
239
|
+
# If we are here we do not have a complete line yet that we understand.
|
240
|
+
# If too big, cut the connection off.
|
241
|
+
if @buf.bytesize > NATSD::Server.max_control_line
|
242
|
+
debug "Control line size exceeded (#{@buf.bytesize}/#{NATSD::Server.max_control_line}), closing connection.."
|
243
|
+
error_close PROTOCOL_OP_TOO_BIG
|
244
|
+
end
|
245
|
+
return
|
254
246
|
end
|
247
|
+
@buf = nil if (@buf && @buf.empty?)
|
248
|
+
|
249
|
+
when AWAITING_MSG_PAYLOAD
|
250
|
+
return unless (@buf.bytesize >= (@msg_size + CR_LF_SIZE))
|
251
|
+
msg = @buf.slice(0, @msg_size)
|
252
|
+
ctrace('Processing msg', @msg_sub, @msg_reply, msg) if NATSD::Server.trace_flag?
|
253
|
+
send_data(OK) if @verbose
|
254
|
+
Server.route_to_subscribers(@msg_sub, @msg_reply, msg)
|
255
|
+
@buf = @buf.slice((@msg_size + CR_LF_SIZE), @buf.bytesize)
|
256
|
+
@msg_sub = @msg_size = @reply = nil
|
257
|
+
@parse_state = AWAITING_CONTROL_LINE
|
258
|
+
@buf = nil if (@buf && @buf.empty?)
|
259
|
+
end
|
255
260
|
end
|
256
|
-
|
257
261
|
end
|
258
262
|
|
259
263
|
def send_info
|
@@ -261,12 +265,12 @@ module NATSD #:nodoc: all
|
|
261
265
|
end
|
262
266
|
|
263
267
|
def process_connect_config(config)
|
264
|
-
@verbose = config[
|
265
|
-
@pedantic = config[
|
268
|
+
@verbose = config['verbose'] unless config['verbose'].nil?
|
269
|
+
@pedantic = config['pedantic'] unless config['pedantic'].nil?
|
266
270
|
return send_data(OK) unless Server.auth_required?
|
267
271
|
|
268
272
|
EM.cancel_timer(@auth_pending)
|
269
|
-
if Server.auth_ok?(config[
|
273
|
+
if Server.auth_ok?(config['user'], config['pass'])
|
270
274
|
send_data(OK) if @verbose
|
271
275
|
@auth_pending = nil
|
272
276
|
else
|
data/lib/nats/server/util.rb
CHANGED
@@ -11,11 +11,11 @@ def log(*args) #:nodoc:
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def debug(*args) #:nodoc:
|
14
|
-
log
|
14
|
+
log(*args) if NATSD::Server.debug_flag?
|
15
15
|
end
|
16
16
|
|
17
17
|
def trace(*args) #:nodoc:
|
18
|
-
log
|
18
|
+
log(*args) if NATSD::Server.trace_flag?
|
19
19
|
end
|
20
20
|
|
21
21
|
def log_error(e=$!) #:nodoc:
|
data/nats.gemspec
CHANGED
@@ -3,12 +3,11 @@
|
|
3
3
|
lib = File.expand_path('../lib/', __FILE__)
|
4
4
|
$:.unshift lib unless $:.include?(lib)
|
5
5
|
|
6
|
-
require 'nats/server/const
|
6
|
+
require 'nats/server/const'
|
7
7
|
|
8
8
|
spec = Gem::Specification.new do |s|
|
9
9
|
s.name = 'nats'
|
10
10
|
s.version = NATSD::VERSION
|
11
|
-
s.date = '2011-02-09'
|
12
11
|
s.summary = 'A lightweight publish-subscribe messaging system.'
|
13
12
|
s.homepage = 'http://github.com/derekcollison/nats'
|
14
13
|
s.description = 'A lightweight publish-subscribe messaging system.'
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: nats
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.4.
|
5
|
+
version: 0.4.8
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Derek Collison
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-02
|
13
|
+
date: 2011-04-02 00:00:00 -05:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -102,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
102
|
requirements: []
|
103
103
|
|
104
104
|
rubyforge_project:
|
105
|
-
rubygems_version: 1.
|
105
|
+
rubygems_version: 1.6.2
|
106
106
|
signing_key:
|
107
107
|
specification_version: 3
|
108
108
|
summary: A lightweight publish-subscribe messaging system.
|