Skip to content

crystal lang implementation of the STOMP protocol

License

Notifications You must be signed in to change notification settings

spider-gazelle/stomp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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