Categorygithub.com/civet148/jsonrpc
repositorypackage
0.9.0
Repository: https://github.com/civet148/jsonrpc.git
Documentation: pkg.go.dev

# Packages

No description provided by the author

# README

jsonrpc

json rpc server and client

server

package main

import (
	"github.com/civet148/jsonrpc"
	"github.com/civet148/log"
)

type GatewayAPI interface {
	Add(a, b int) (int, error)
	Sub(a, b int) (int, error)
	Mul(a, b int) (int, error)
	Div(a, b int) (int, error)
	Ping() (string, error)
}

type GatewayServer struct {
}

//ensure gateway server implemented GatewayAPI
var _ GatewayAPI = (*GatewayServer)(nil)

func (m *GatewayServer) Add(a, b int) (int, error) {
	return a + b, nil
}

func (m *GatewayServer) Sub(a, b int) (int, error) {
	return a - b, nil
}

func (m *GatewayServer) Mul(a, b int) (int, error) {
	return a * b, nil
}

func (m *GatewayServer) Div(a, b int) (int, error) {
	return a / b, nil
}

func (m *GatewayServer) Ping() (string, error) {
	return "Pong", nil
}

func main() {
	var strNamespace = "Gateway"
	serverHandler := &GatewayServer{}
	//listen http://host:port/rpc/v0 for RPC call with internal HTTP server
	var strUrl = "ws://127.0.0.1:8000/rpc/v0"
	rpcServer := jsonrpc.NewServer(strNamespace, serverHandler)
	log.Infof("namespace [%s] url [%s] listening...", strNamespace, strUrl)
	if err := rpcServer.ListenAndServe(strUrl); err != nil {
		log.Panic(err.Error())
		return
	}
}

client


import (
	"context"
	"fmt"
	"github.com/civet148/jsonrpc"
	"github.com/civet148/log"
	"runtime"
)

type GatewayClient struct {
	Add  func(a, b int) (int, error)
	Sub  func(a, b int) (int, error)
	Mul  func(a, b int) (int, error)
	Div  func(a, b int) (int, error)
	Ping func() (string, error)
}

func init() {
	switch runtime.GOARCH {
	case "amd64":
	default:
		panic("GOARCH is not amd64")
	}
}

func main() {
	var client GatewayClient
    var strNamespace = "Gateway"
	var strRemoteAddr = "ws://127.0.0.1:8000/rpc/v0"
	c, err := jsonrpc.NewClient(context.Background(), strRemoteAddr, strNamespace, nil, &client)
	if err != nil {
		fmt.Printf("jsonrpc.NewClient error [%s]\n", err.Error())
		return
	}
	defer c.Close()

	log.Infof("namespace [%s] connect address [%s] ok\n", strNamespace, strRemoteAddr)
	var n int
	var pong string
	pong, err = client.Ping() //expect 'pong' return from server
	if err != nil {
		log.Errorf("client.Ping error [%s]\n", err.Error())
		return
	}
	log.Infof("client.Ping result [%s]\n", pong)

	n, err = client.Add(1, 2) //expect 3 return from server
	if err != nil {
		log.Errorf("client.Add error [%s]\n", err.Error())
		return
	}
	log.Infof("client.Add result [%d]\n", n)

	n, err = client.Sub(2, 1) //expect 1 return from server
	if err != nil {
		log.Errorf("client.Sub error [%s]\n", err.Error())
		return
	}
	log.Infof("client.Sub result [%d]\n", n)

	n, err = client.Mul(1, 2) //expect 2 return from server
	if err != nil {
		log.Errorf("client.Mul error [%s]\n", err.Error())
		return
	}
	log.Infof("client.Mul result [%d]\n", n)

	n, err = client.Div(2, 1) //expect 2 return from server
	if err != nil {
		log.Errorf("client.Div error [%s]\n", err.Error())
		return
	}
	log.Infof("client.Div result [%d]\n", n)
}