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
- Connect securely to a remote Trisul
- Send a Hello Request
- Print the Hello Response
The goal of the tutorial is to get you familiar with:
- Basic structure of a TRP script
- Running Trisul server in TRP mode
- Using the trisulrp gem
The environment
To use TRP effectively you need :
- Ruby installed on your machine
- The trisulrp ruby gem
You can run TRP scripts on any platform on which Ruby is available. The script connects remotely to the Trisul Hub 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 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
The TRP server does not authenticate tcp:// clients. Allow the port only from trusted hosts with a firewall. A 3-day trial license does not allow tcp://; use a time-trial or production license.
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