-
Notifications
You must be signed in to change notification settings - Fork 1
/
net_rpc.go
96 lines (82 loc) · 2.26 KB
/
net_rpc.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package app
import (
"sync"
netRpc "github.com/cnlisea/ant/app/net/rpc"
"github.com/cnlisea/ant/logs"
)
func (a *App) NetRpcRegister(name string, ip string, port uint16, groupName string, discoverySoftState *bool, service interface{}) error {
if a.rpcServers == nil {
a.rpcServers = make(map[string]*netRpc.Server, 1)
}
s := a.rpcServers[name]
if s == nil {
s = netRpc.NewServer(ip, port)
a.rpcServers[name] = s
if groupName != "" {
if a.rpcServerGroupName == nil {
a.rpcServerGroupName = make(map[string]string, 1)
}
a.rpcServerGroupName[name] = groupName
}
}
if discoverySoftState != nil {
a._DiscoverySoftStateAdd(_DiscoverySoftStateRpcNamePrefix, name, *discoverySoftState)
}
return s.SetHandler(service)
}
type NetRpcClientOption struct {
SelectMode netRpc.ClientSelectMode
}
type NetRpcClientOptionFunc func(*NetRpcClientOption)
func (a *App) NetRpcClientWithHashSelector() NetRpcClientOptionFunc {
return func(op *NetRpcClientOption) {
op.SelectMode = netRpc.ClientSelectModeHash
}
}
func (a *App) NetRpcClientWithSoftState() NetRpcClientOptionFunc {
return func(op *NetRpcClientOption) {
op.SelectMode = netRpc.ClientSelectModeSoftState
}
}
func (a *App) NetRpcClient(groupName string, name string, serviceName string, options ...NetRpcClientOptionFunc) (*netRpc.Client, error) {
var op NetRpcClientOption
for _, f := range options {
f(&op)
}
if a.rpcClientProxy == nil {
a.rpcClientProxy = netRpc.NewClientProxy(a.ProxyDiscovery(), groupName)
}
return a.rpcClientProxy.GetClient(a.Context(), name, serviceName, op.SelectMode)
}
func (a *App) NetRpcAllStart(ws *sync.WaitGroup) bool {
var (
name string
s *netRpc.Server
)
for name, s = range a.rpcServers {
ws.Add(1)
go func(name string, server *netRpc.Server) {
logs.Info("rpc server run",
logs.String("name", name),
logs.String("ip", server.Ip),
logs.Uint16("port", server.Port))
if err := server.Run(); err != nil {
a.Close()
logs.Err("rpc server run fail", logs.String("name", name), logs.Error("err", err))
}
ws.Done()
}(name, s)
}
return true
}
func (a *App) NetRpcAllClose() {
for _, s := range a.rpcServers {
s.Close()
}
}
func (a *App) NetRpcClientClose() {
if a.rpcClientProxy == nil {
return
}
a.rpcClientProxy.Close()
}