Skip to content
RPC implementation for Nim based on msgpack4nim
Nim
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
example
src/nimrpc
.gitignore
.travis.yml
README.md
nimrpc.nimble
todo.txt

README.md

nim-rpc

Build Status

RPC implementation for Nim based on msgpack4nim created by @jangko.

Install

Pre Requirement

Nimble package manager installed

Install Command

nimble install nimrpc

Example

RPC Server

import nimrpc/rpc_server, nimrpc/rpc_type, asyncnet, asyncdispatch, msgpack

# Define your remote proc
# Remote porc must have two params, first is input, second is output (so it's var param).
# Return value must be an int as error code, for example, 0 for success, -1 for error.
proc remoteAdd(param: tuple[v1: int, v2: int], ret: var int): int =
  ret = param.v1 + param.v2
  result = 0

# Create the server
# Currently procs must be resgistered before rpc server starts running.
# Running time proc register will be added in later version
var server = newRpcServer("127.0.0.1", Port(4343)) # server listen to 127.0.0.1:4343
server.register("add", remoteAdd) # register remoteAdd to RPC server binding name "add"
asyncCheck server.run() # run RPC server
runForever()

RPC Client

import nimrpc/rpc_client, nimrpc/rpc_type, net, asyncdispatch

proc main =
  var client = newRpcClient("127.0.0.1", Port(4343)) # client send request to 127.0.0.1:4343
  var ret: int
  var state = client.call("add", (1, 2), ret) # client remote call add
  
  # Check remote call state first, only process ret value when state == Correct
  if state == Correct:
    echo($state) # output: Correct
    echo($ret) # output: 3
  else:
    echo($state)

if isMainModule == true:
  main()

RPC Async Client

Due to nim compiler bug, async client is not supported currently. It will be added in later version once the bug gets fixed.

You can’t perform that action at this time.