Crystal Lang STOMP Protocol

CI

Communicate with devices supporting the STOMP protocol

Installation

  1. Add the dependency to your shard.yml:

    dependencies:
      stomp:
        github: spider-gazelle/stomp
  2. Run shards install

Usage


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