Skip to content

rogercloud/nim-rpc

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

15 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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.

About

RPC implementation for Nim based on msgpack4nim

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages