Communicate with devices supporting the STOMP protocol
-
Add the dependency to your
shard.yml
:dependencies: stomp: github: spider-gazelle/stomp
-
Run
shards install
require "stomp"
hostname = "stomp.server.com"
port = 1234
socket = TCPSocket.new(hostname, port)
# accepts any object implementing `IO`
client = STOMP::IOClient.new(hostname, socket)
# client is ready
client.on_connected do |frame|
client.send client.subscribe("main", "/some/path", HTTP::Headers{
"receipt" => "confirm-main",
})
end
# process messages here
client.on_message do |frame|
frame.headers["subscription"] # => "main" (as specified in the subscription above)
frame.headers["destination"] # => "/some/path"
# get the data, handles charset automatically
frame.body_text
# or can get the raw bytes
frame.body
end
# if you are interested in receipts
client.on_receipt do |frame|
frame.headers["receipt-id"] # => "confirm-main"
end
# if you are interested in errors
client.on_error do |frame|
message = frame.headers["message"]? || frame.body_text
Log.error { message }
# maybe you want to close on error?
client.close
end
client.on_close do |frame|
received_closed += 1
end
# blocks until the socket is closed or an unhandled error occurs
# client is thread safe
client.run