Tutorial : Your first TRP script in Ruby

This tutorial will explain step-by-step the basics of connecting, sending and receiving commands. For this exercise, we use the Ruby programming language.

The task

  1. Connect securely to a remote Trisul
  2. Send a Hello Request
  3. Print the Hello Response

The goal of the tutorial is to get you familiar with :

  1. Basic structure of a TRP script
  2. Running Trisul server in TRP mode
  3. Using the trisulrp gem

The environment

To use TRP effectively you need :

  1. Ruby installed on your machine
  2. The trisulrp ruby gem
You can run TRP scripts on any platform on which Ruby is available. It will connect remotely to a Trisul probe to fetch data.

The trisulrp gem

You are going to need the following.
trisulrp is a helper Ruby gem that makes it easier to work with the TRP protocol. You also need a dependent Gem called ffi-rzmq

Install trisulrp

 
gem install trisulrp
gem install ffi-rzmq

A tiny test program – local run

Save the following program into a file called hellotrp.rb on the server running the trisul-hub package.


require 'trisulrp'

conn = "ipc:///usr/local/var/lib/trisul-hub/domain0/hub0/context0/run/trp_0"
req = TrisulRP::Protocol.mk_request(TRP::Message::Command::HELLO_REQUEST,{:station_id=>rand().to_s})
TrisulRP::Protocol.get_response_zmq(conn,req) do |resp|
  p resp.message
end

This program tries to setup a local TRP connection over the Local Unix Socket ipc://.. and simply prints “hello from trp” if it worked.


[trisul@localhost t1] ruby hellotrp.rb 
"hello from trp"

Now lets move to a remote TRP connection.

Connecting to a remote TRP

By default, the TRP server on the hub node listens on a Unix Socket. This means only local connections from the same server are allowed. You must have used the following connection string in the previous step


conn = "ipc:///usr/local/var/lib/trisul-hub/domain0/hub0/context0/run/trp_0"

To connect remotely to a TRP server you have to run the server on a normal TCP socket. For this you need to change the Server>ZMQConnection parameter in trisulHubConfig.xml as shown below.

Say if you wanted the TRP server to listen on TCP Port 12007

Change the line


<ZmqConnection>ipc:///usr/local/var/lib/trisul-hub/domain0/hub0/context0/run/trp_0</ZmqConnection>

to


<ZmqConnection>tcp://192.168.2.201:12007</ZmqConnection>

Then restart the hub trisulctl_hub restart context default@hub0

Then change the connection string to tcp://192.168.2.201:12007 in the hellotrp.rb example


require 'trisulrp'

conn = "tcp://192.168.2.201:12007"
req = TrisulRP::Protocol.mk_request(TRP::Message::Command::HELLO_REQUEST,{:station_id=>rand().to_s})
TrisulRP::Protocol.get_response_zmq(conn,req) do |resp|
  p resp.message
end

Then re-run the program


[trisul@localhost t1] ruby hellotrp.rb
“hello from trp”

We are now ready to move on to more advanced scripts