Call¶
Synopsis¶
rsb call [OPTIONS] SERVER-URI/METHOD([ARGUMENT])
Description¶
Call METHOD of the RSB RPC server at
SERVER-URI with argument ARGUMENT and print the
result to standard output, if any.
SERVER-URI designates the root scope of the remote
server and the transport that should be used.
Tip
For details regarding the URI syntax involved in transport and channel specifications, see URIs.
ARGUMENT is treated as follows:
If
ARGUMENTis the empty string, i.e. the call specification is of the formSERVER-URI/METHOD(), theMETHODis called without argument.As the respective Boolean value when equal to
trueorfalseAs string when surrounded with double-quotes (
")As integer number when consisting of digits without decimal point
As float number when consisting of digits with decimal point
If
ARGUMENTstarts with/, it is parsed as a scope.If
ARGUMENTis the single character-or the string-:binary, the entire “contents” of standard input (until end of file) is read as a string or octet-vector respectively and used as argument for the method call.If
ARGUMENTis of one of the forms#P"PATHNAME",#P"PATHNAME":ENCODINGor#P"PATHNAME":binary, the file designated byPATHNAMEis read into a string (optionally employingENCODING) or octet-vector and used as argument for the method call.If
ARGUMENTis of the formpb:.MESSAGE-TYPE-NAME:{FIELDS}, a protocol buffer message of typeMESSAGE-TYPE-NAMEis constructed and its fields are populated according toFIELDS.FIELDSuses the syntax produced/consumed by the various TextFormat classes of the protocol buffer API and the--decode/--encodeoptions of the protoc binary.If
ARGUMENTis of one of the formspb:.MESSAGE-TYPE-NAME:#P"PATHNAME"pb:.MESSAGE-TYPE-NAME:#P"PATHNAME":ENCODINGpb:.MESSAGE-TYPE-NAME:-
, a protocol buffer message of type
MESSAGE-TYPE-NAMEis constructed according to the contents of the file designated byPATHNAMEor the input read from standard input respectively.
The definition of the data type specified in
MESSAGE-TYPE-NAME can be loaded automatically using the
common --on-demand-idl-loading option.
Note
When written as part of a shell command, some of the above forms may require protection from processing by the shell, usually by surrounding the form in single quotes (‘). For example:
$ rsb call 'socket:/foobar/()' # empty argument
$ rsb call 'socket:/foo/bar(#P"my-file")' # read argument from my-file
The usual commandline options are accepted. Specialized commandline options:
-
--timeoutSPEC,-tSPEC¶ If the result of the method call does not arrive within the amount of time specified by
SPEC, consider the call to have failed and exit with non-zero status.
-
--no-wait¶ Do not wait for the result of the method call. Immediately return with zero status without printing a result to standard output.
Examples¶
$ rsb call 'spread:/mycomponent/control/status()' "running" # prints return value, if any $ rsb call 'spread:/mycomponent/control/terminate()' $ # returns once the method call completes
In the above example, the call command is used to invoke the
statusandterminatemethods of the remote server at scope/mycomponent/controlwithout an argument.$ cat my-data.txt | rsb call 'socket:/printer/print(-)' $ cat my-data.txt | rsb call 'socket:/printer/print(-:binary)' $ rsb call 'socket:/printer/print(#P"my-data.txt")' $ rsb call 'socket:/printer/print(#P"my-data.txt":latin-1)' $ rsb call 'socket:/printer/print(#P"my-data.txt":binary)'
Two ways of using the content of the file
my-data.txtas argument in a call of theprintmethod on the scope/printer. The call uses the socket transport (with its default configuration). This form can only be used for sending string payloads.Note
Note the use of single quotes (
') to prevent elements of the pathname#P"my-data.txt"from being processed by the shell.$ rsb call \ -I…/rst-proto/proto/stable/ \ -l…/rst-proto/proto/stable/rst/robot/RobotCollision.proto \ 'socket:/mycomponent/handlecollision(pb:.rst.robot.RobotCollision:{kind: "SELF" collision_detail: { geometry: { contact_points: [ { x: 0 y: 1 z: 2 frame_id: "foo" }, { x: 3 y: 4 z: 5 } ] } object_1: "o1" } })'
or
$ rsb call \ -I…/rst-proto/proto/stable/ \ --on-demand-idl-loading=blocking \ 'socket:/mycomponent/handlecollision(pb:.rst.robot.RobotCollision:{kind: "SELF" collision_detail: { geometry: { contact_points: [ { x: 0 y: 1 z: 2 frame_id: "foo" }, { x: 3 y: 4 z: 5 } ] } object_1: "o1" } })'
In the above examples, the call tool is used to call the
handlecollisionmethod of the remote server at scope/mycomponentwith a protocol buffer message argument. The protocol buffer message is of typerst.robot.RobotCollisionwithkindenum field set toSELFand an embeddedrst.kinematics.ObjectCollisionmessage with two contact points in thecollision_detailfield.The specification of the message content uses the syntax produced/consumed by the various TextFormat classes of the protocol buffer API and the
--decode/--encodeoptions of the protoc binary.Note
Note how the definition of the protocol buffer message type is loaded either explicitly using the
-l (--load-idl)commandline option or implicitly using the--on-demand-idl-loadingcommandline option. Both methods require specifying a search path using the-I (--idl-path)commandline option.
Implementations¶
Implementation Language |
Project |
Repository Link |
|---|---|---|
Common Lisp |
rsb-tools-cl |
“1.0” branch of https://github.com/open-rsx/rsb-tools-cl |