Module: EventMachine::Protocols::Stomp
Relationships & Source Files | |
Namespace Children | |
Classes:
| |
Super Chains via Extension / Inclusion / Inheritance | |
Instance Chain:
self,
LineText2
|
|
Defined in: | lib/em/protocols/stomp.rb |
Overview
Implements Stomp (http://docs.codehaus.org/display/STOMP/Protocol).
Usage example
module StompClient 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 }
Constant Summary
LineText2
- Included
Instance Method Summary
-
#ack(msgid)
ACK command, for acknowledging receipt of messages.
-
#connect(parms = {})
CONNECT command, for authentication.
- #init_message_reader Internal use only Internal use only
- #receive_binary_data(data) Internal use only Internal use only
- #receive_line(line) Internal use only Internal use only
-
#receive_msg(msg)
Invoked with an incoming
Message
received from the STOMP server. -
#send(destination, body, parms = {})
SEND command, for publishing messages to a topic.
- #send_frame(verb, headers = {}, body = "") Internal use only Internal use only
-
#subscribe(dest, ack = false)
SUBSCRIBE command, for subscribing to topics.
LineText2
- Included
#receive_binary_data | Stub. |
#receive_data, | |
#receive_end_of_binary_data | Stub. |
#receive_line | Stub. |
#set_binary_mode | Alias for #set_text_mode, added for back-compatibility with |
#set_delimiter | The line delimiter may be a regular expression or a string. |
#set_line_mode | Called internally but also exposed to user code, for the case in which processing of binary data creates a need to transition back to line mode. |
#set_text_mode, | |
#unbind | In case of a dropped connection, we'll send a partial buffer to user code when in sized text mode. |
Instance Method Details
#ack(msgid)
ACK command, for acknowledging receipt of messages
module StompClient include EM::P::Stomp
def connection_completed connect :login => 'guest', :passcode => 'guest' # subscribe with ack mode subscribe '/some/topic', true end
def receive_msg msg if msg.command == "MESSAGE" ack msg.headers['message-id'] puts msg.body end end end
# File 'lib/em/protocols/stomp.rb', line 198
def ack msgid send_frame "ACK", 'message-id'=> msgid end
#connect(parms = {})
CONNECT command, for authentication
connect :login => 'guest', :passcode => 'guest'
# File 'lib/em/protocols/stomp.rb', line 159
def connect parms={} send_frame "CONNECT", parms end
#init_message_reader
#receive_binary_data(data)
# File 'lib/em/protocols/stomp.rb', line 136
def receive_binary_data data @stomp_message.body = data[0..-2] receive_msg(@stomp_message) if respond_to?(:receive_msg) end
#receive_line(line)
# File 'lib/em/protocols/stomp.rb', line 121
def receive_line line @stomp_initialized || @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) end } end
#receive_msg(msg)
Invoked with an incoming Stomp::Message
received from the STOMP server
# File 'lib/em/protocols/stomp.rb', line 151
def receive_msg msg # stub, overwrite this in your handler end
#send(destination, body, parms = {})
SEND command, for publishing messages to a topic
send '/topic/name', 'some message here'
# File 'lib/em/protocols/stomp.rb', line 167
def send destination, body, parms={} send_frame "SEND", parms.merge( :destination=>destination ), body.to_s end
#send_frame(verb, headers = {}, body = "")
# File 'lib/em/protocols/stomp.rb', line 106
def send_frame verb, headers={}, body="" body = body.to_s ary = [verb, "\n"] body_bytesize = body.bytesize if body.respond_to? :bytesize body_bytesize ||= body.size headers.each {|k,v| ary << "#{k}:#{v}\n" } ary << "content-length: #{body_bytesize}\n" ary << "content-type: text/plain; charset=UTF-8\n" unless headers.has_key? 'content-type' ary << "\n" ary << body ary << "\0" send_data ary.join end
#subscribe(dest, ack = false)
SUBSCRIBE command, for subscribing to topics
subscribe '/topic/name', false
# File 'lib/em/protocols/stomp.rb', line 175
def subscribe dest, ack=false send_frame "SUBSCRIBE", {:destination=>dest, :ack=>(ack ? "client" : "auto")} end