The code for a ruby class polling the national rail stomp service could look similar to the code block below.
The initialize method sets up the client. For the security_token variable, use your security key from the 'My Feeds' page.
The run method will connect to the stomp service and subscribe to the queue. This process will run until the client is closed. When the client receives a new message from the queue, it will print the body of the message before sending an acknowledgment to the stomp service that the message was received.
The shutdown method can be called to close the connection and halt the process.
require "stomp"
class NrPoller
def initialize
@security_token = 'security-token-from-your-account-data-feeds-page'
@username = 'd3user'
@password = 'd3password'
@hostname = 'datafeeds.nationalrail.co.uk'
@port = '61613'
end
def run
@client = Stomp::Client.new(@username, @password, @hostname, @port, true)
puts @client.connection_frame.body
@client.subscribe("/queue/#{@security_token}", { 'id' => @client.uuid(), 'ack' => 'auto' }) do |msg|
puts msg.body
@client.acknowledge(msg, msg.headers)
end
@client.join
puts "Connected"
end
def shutdown
if @client
@client.close
end
puts "Disconnected"
end
endThe script below will create an instance of the poller class described above and then call the run method, printing any new message from the queue to the console.
When ctrl-c is pressed, the shutdown method is called and the client disconnects cleanly.
nrPoller = NrPoller.new
begin
nrPoller.run
rescue SystemExit, Interrupt
nrPoller.shutdown
rescue Exception => e
nrPoller.shutdown
raise e
end