StompMq 0.3 → 0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/stompmq/connection.rb +11 -10
  2. metadata +2 -2
@@ -14,13 +14,15 @@ module StompMq
14
14
  # Connect to a STOMP broker and log in.
15
15
  def initialize(opts = { :broker => 'localhost', :port => 61613, :username => nil, :passcode => nil })
16
16
  @buffer = ""
17
- @broker = opts[:broker]
18
- @port = opts[:port]
17
+ @broker = opts[:broker] || 'localhost'
18
+ @port = opts[:port] || 61613
19
19
  @username = opts[:username]
20
20
  @passcode = opts[:passcode]
21
21
  @sock = TCPSocket.new @broker, @port
22
22
  send_frame :connect, {:login => @username, :passcode => @passcode}
23
23
  frame = receive_frame(15)
24
+ # some brokers add a \n after null-terminators, including after CONNECTED frames.
25
+ @buffer = ""
24
26
  raise ProtocolSequenceViolation unless frame.cmd == 'CONNECTED'
25
27
  self
26
28
  end
@@ -56,20 +58,21 @@ module StompMq
56
58
  private
57
59
 
58
60
  # Transmit a standard STOMP frame.
59
- def send_frame(function, header = {}, content = {})
61
+ def send_frame(function, header = {}, content = '')
60
62
  frame = "#{function.to_s.upcase}\n"
61
- header['content-length'] = content.to_s.length
63
+ header['content-length'] = content.to_s.length if content.to_s.include?("\000")
62
64
  header.each do |key, val|
63
65
  frame += "#{key.to_s}:#{val.to_s}\n"
64
66
  end
65
67
  frame += "\n"
66
68
  frame += "#{content.to_s}\000"
67
- @sock.puts(frame)
69
+ @sock.write(frame)
68
70
  end
69
71
 
70
72
  # Receive a standard STOMP frame.
71
73
  def receive_frame(timeout = nil)
72
- frame = nil
74
+ frame = parse_frame
75
+ return frame unless frame.nil?
73
76
  # FIXME: we'll violate the timeout given if half a packet comes in at first, then more later.
74
77
  until frame do
75
78
  return nil if receive_data(timeout) == nil
@@ -105,7 +108,7 @@ module StompMq
105
108
  # split the header text up into a proper hash
106
109
  header = {}
107
110
  header_text.split("\n").each do |keyval|
108
- key,val = keyval.split(':')
111
+ key,val = keyval.split(':', 2)
109
112
  header[key] = val
110
113
  end
111
114
 
@@ -132,8 +135,6 @@ module StompMq
132
135
  return StompMq::Frame.new(cmd, header, content)
133
136
  end
134
137
 
135
- def buffer=(buffer)
136
- @buffer = buffer
137
- end
138
+ attr_accessor :buffer
138
139
  end
139
140
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: StompMq
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.3"
4
+ version: "0.4"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sarah Nordstrom
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-09-07 00:00:00 -04:00
12
+ date: 2008-09-12 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15