chanrpc

package
v0.0.26 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 9, 2023 License: EPL-1.0 Imports: 7 Imported by: 0

Documentation

Overview

Example
package main

import (
	"gitee.com/lichun-123/leaf/chanrpc"
	"sync"
)

func main() {
	s := chanrpc.NewServer(10)

	s.Go("fo", func(args []interface{}) {})

	var wg sync.WaitGroup
	wg.Add(1)

	// goroutine 1
	go func() {
		s.Register("f0", func(args []interface{}) {

		})

		s.Register("f1", func(args []interface{}) interface{} {
			return 1
		})

		s.Register("fn", func(args []interface{}) []interface{} {
			return []interface{}{1, 2, 3}
		})

		s.Register("add", func(args []interface{}) interface{} {
			n1 := args[0].(int)
			n2 := args[1].(int)
			return n1 + n2
		})

		wg.Done()

		for {
			s.Exec(<-s.ChanCall)
		}
	}()

	//wg.Wait()
	//wg.Add(1)
	//
	//// goroutine 2
	//go func() {
	//	c := s.Open(10)
	//
	//	// sync
	//	err := c.Call0("f0")
	//	if err != nil {
	//		fmt.Println(err)
	//	}
	//
	//	r1, err := c.Call1("f1")
	//	if err != nil {
	//		fmt.Println(err)
	//	} else {
	//		fmt.Println(r1)
	//	}
	//
	//	rn, err := c.CallN("fn")
	//	if err != nil {
	//		fmt.Println(err)
	//	} else {
	//		fmt.Println(rn[0], rn[1], rn[2])
	//	}
	//
	//	ra, err := c.Call1("add", 1, 2)
	//	if err != nil {
	//		fmt.Println(err)
	//	} else {
	//		fmt.Println(ra)
	//	}
	//
	//	// asyn
	//	c.AsynCall("f0", func(err error) {
	//		if err != nil {
	//			fmt.Println(err)
	//		}
	//	})
	//
	//	c.AsynCall("f1", func(ret interface{}, err error) {
	//		if err != nil {
	//			fmt.Println(err)
	//		} else {
	//			fmt.Println(ret)
	//		}
	//	})
	//
	//	c.AsynCall("fn", func(ret []interface{}, err error) {
	//		if err != nil {
	//			fmt.Println(err)
	//		} else {
	//			fmt.Println(ret[0], ret[1], ret[2])
	//		}
	//	})
	//
	//	c.AsynCall("add", 1, 2, func(ret interface{}, err error) {
	//		if err != nil {
	//			fmt.Println(err)
	//		} else {
	//			fmt.Println(ret)
	//		}
	//	})
	//
	//	c.Cb(<-c.ChanAsynRet)
	//	c.Cb(<-c.ChanAsynRet)
	//	c.Cb(<-c.ChanAsynRet)
	//	c.Cb(<-c.ChanAsynRet)
	//
	//	// go
	//	s.Go("f0")
	//
	//	wg.Done()
	//}()

	wg.Wait()

}
Output:

1
1 2 3
3
1
1 2 3
3

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CallInfo

type CallInfo struct {
	// contains filtered or unexported fields
}

type Client

type Client struct {
	ChanAsynRet chan *RetInfo
	// contains filtered or unexported fields
}

func NewClient

func NewClient(l int) *Client

func (*Client) AsynCall

func (c *Client) AsynCall(id interface{}, _args ...interface{})

func (*Client) Attach

func (c *Client) Attach(s *Server)

func (*Client) Call0

func (c *Client) Call0(id interface{}, args ...interface{}) error

func (*Client) Call1

func (c *Client) Call1(id interface{}, args ...interface{}) (interface{}, error)

func (*Client) CallN

func (c *Client) CallN(id interface{}, args ...interface{}) ([]interface{}, error)

func (*Client) Cb

func (c *Client) Cb(ri *RetInfo)

func (*Client) Close

func (c *Client) Close()

func (*Client) Idle

func (c *Client) Idle() bool

type RetInfo

type RetInfo struct {
	// contains filtered or unexported fields
}

type Server

type Server struct {
	ChanCall chan *CallInfo
	// contains filtered or unexported fields
}

one server per goroutine (goroutine not safe) one client per goroutine (goroutine not safe)

func NewServer

func NewServer(l int) *Server

func (*Server) Call0

func (s *Server) Call0(id interface{}, args ...interface{}) error

goroutine safe

func (*Server) Call1

func (s *Server) Call1(id interface{}, args ...interface{}) (interface{}, error)

goroutine safe

func (*Server) CallN

func (s *Server) CallN(id interface{}, args ...interface{}) ([]interface{}, error)

goroutine safe

func (*Server) Close

func (s *Server) Close()

func (*Server) Exec

func (s *Server) Exec(ci *CallInfo)

func (*Server) Go

func (s *Server) Go(id interface{}, args ...interface{})

goroutine safe

func (*Server) Open

func (s *Server) Open(l int) *Client

goroutine safe

func (*Server) Register

func (s *Server) Register(id interface{}, f interface{})

you must call the function before calling Open and Go

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL