Module: EventMachine::Protocols::Stomp
- Includes:
- LineText2
- Defined in:
- lib/protocols/stomp.rb
Overview
Implements Stomp (docs.codehaus.org/display/STOMP/Protocol).
Usage example
class StompClient < EM::Connection
include EM::Protocols::Stomp
def connection_completed
connect :login => 'guest', :passcode => 'guest'
end
def receive_msg msg
if msg.command == "CONNECTED"
subscribe '/some/topic'
else
p ['got a message', msg]
puts msg.body
end
end
end
EM.run{
EM.connect 'localhost', 61613, StompClient
}
Defined Under Namespace
Classes: Message
Constant Summary
Constants included
from LineText2
LineText2::MaxBinaryLength, LineText2::MaxLineLength
Instance Method Summary
collapse
Methods included from LineText2
#receive_data, #receive_end_of_binary_data, #set_binary_mode, #set_delimiter, #set_line_mode, #set_text_mode, #unbind
Instance Method Details
#ack(msgid) ⇒ Object
146
147
148
|
# File 'lib/protocols/stomp.rb', line 146
def ack msgid
send_frame "ACK", { :'message-id'=> msgid }
end
|
#connect(parms = {}) ⇒ Object
137
138
139
|
# File 'lib/protocols/stomp.rb', line 137
def connect parms={}
send_frame "CONNECT", parms
end
|
#init_message_reader ⇒ Object
128
129
130
131
132
133
|
# File 'lib/protocols/stomp.rb', line 128
def init_message_reader
@stomp_initialized = true
set_delimiter "\n"
set_line_mode
@stomp_message = Message.new
end
|
#receive_binary_data(data) ⇒ Object
122
123
124
125
126
|
# File 'lib/protocols/stomp.rb', line 122
def receive_binary_data data
@stomp_message.body = data[0..-2]
receive_msg(@stomp_message) if respond_to?(:receive_msg)
init_message_reader
end
|
#receive_line(line) ⇒ Object
109
110
111
112
113
114
115
116
117
118
119
120
121
|
# File 'lib/protocols/stomp.rb', line 109
def receive_line line
@stomp_initialized || init_message_reader
@stomp_message.consume_line(line) {|outcome|
if outcome.first == :sized_text
set_text_mode outcome[1]
elsif outcome.first == :unsized_text
set_delimiter "\0"
elsif outcome.first == :dispatch
receive_msg(@stomp_message) if respond_to?(:receive_msg)
init_message_reader
end
}
end
|
#send(destination, body, parms = {}) ⇒ Object
140
141
142
|
# File 'lib/protocols/stomp.rb', line 140
def send destination, body, parms={}
send_frame "SEND", parms.merge( :destination=>destination ), body.to_s
end
|
#send_frame(verb, headers = {}, body = "") ⇒ Object
98
99
100
101
102
103
104
105
106
107
|
# File 'lib/protocols/stomp.rb', line 98
def send_frame verb, ={}, body=""
ary = [verb, "\n"]
.each {|k,v| ary << "#{k}:#{v}\n" }
ary << "content-length: #{body.to_s.length}\n"
ary << "content-type: text/plain; charset=UTF-8\n"
ary << "\n"
ary << body.to_s
ary << "\0"
send_data ary.join
end
|
#subscribe(dest, ack = false) ⇒ Object
143
144
145
|
# File 'lib/protocols/stomp.rb', line 143
def subscribe dest, ack=false
send_frame "SUBSCRIBE", {:destination=>dest, :ack=>(ack ? "client" : "auto")}
end
|