Skip to content
Chris Petersen edited this page Oct 16, 2014 · 1 revision

rupi-cmd runs a remote UPI command on a rupi server. Rupi-cmd blocks and waits for up to 1 sec for the server response, hence it may need to run in a separate thread!

Parameter Description
rc The rupi client to be used
cmd The command to be executed
args A number of optional arguments to be passed along with the command

Example

Example 1: Make a rupi server and a client connecting to it to get some data. This example assumes that your console application has store and rupi in its MODULES file as well as libcrypto in its LIBRARIES file.

> (define rupi:key (string->u8vector "Lambda13"))
> (define rupi:port 8013)
> (define rupi:hostname "localhost")
> (define rupi:addr 
  (with-exception-catcher
    (lambda (e) #f)
    (lambda () (car(host-info-addresses (host-info rupi:hostname))))
  )
)

;; Start a RUPI server with store, key-index key, IP, port and function to parse messages
> (define store (make-store "main"))
> (store-set! store "platform" "LambdaNative")
> (define (upi-cmd store cmd . arglist)
  (let ((arg (if (fx>= (length arglist) 1) (car arglist) #f))
        (arg2 (if (fx>= (length arglist) 2) (cadr arglist) #f)))
    (cond
      ((string=? cmd "GETVALUE") (store-ref store arg))
      ((string=? cmd "SETVALUE") (store-set! store arg arg2))
      (else 
        (log-error "RUPICMD: " cmd arg arg2)
        "Invalid command"
      )
    )
  ))
> (define rs (rupi-server "main" 0 rupi:key rupi:addr rupi:port upi-cmd))

;; Make a rupi client, connect to the server and ask for some data
> (define rc (rupi-client 0 rupi:key rupi:addr rupi:port))
> (rupi-cmd rc "GETVALUE" "platform")
"LambdaNative"
> (rupi-cmd rc "GETVALUE" "version")
#f
> (rupi-cmd rc "SETVALUE" "version" 20130805)
#t
> (rupi-cmd rc "GETVALUE" "version")
20130805
> (rupi-cmd rc "SOMETHINGELSE")
"Invalid command"
Clone this wiki locally