-
Notifications
You must be signed in to change notification settings - Fork 19
/
Copy pathgrpc_client.go
64 lines (57 loc) · 1.77 KB
/
grpc_client.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
package v2raypool
import (
"context"
"fmt"
"time"
"github.com/iotames/miniutils"
"github.com/iotames/v2raypool/conf"
g "github.com/iotames/v2raypool/grpc"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
// NewProxyPoolGrpcClient
// c, conn := NewProxyPoolGrpcClient()
// defer conn.Close()
// ctx, cancel := context.WithTimeout(context.Background(), time.Second)
// defer cancel()
// nds, err := c.GetProxyNodes(ctx, &ProxyNode{IsRunning: true})
func NewProxyPoolGrpcClient() (c g.ProxyPoolServiceClient, conn *grpc.ClientConn) {
var err error
conn, err = grpc.Dial(fmt.Sprintf("127.0.0.1:%d", conf.GetConf().GrpcPort), grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
panic(err)
}
c = g.NewProxyPoolServiceClient(conn)
return
}
func RequestProxyPoolGrpcOnce(h func(c g.ProxyPoolServiceClient, ctx context.Context)) {
c, conn := NewProxyPoolGrpcClient()
defer conn.Close()
ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
defer cancel()
h(c, ctx)
}
// ChangeProxyNode 更换一个可用节点
func ChangeProxyNode() error {
var err error
RequestProxyPoolGrpcOnce(func(c g.ProxyPoolServiceClient, ctx context.Context) {
var nds *g.ProxyNodes
nds, err = c.GetProxyNodes(ctx, &g.ProxyNode{IsRunning: true})
if err != nil {
fmt.Printf("-----ChangeProxyNode--GetProxyNodes--err(%v)\n", err)
return
}
// TODO 找出当前激活的节点
// selectport := conf.GetConf().GetHttpProxyPort()
nid := miniutils.GetRandInt(0, 9)
nextIndex := nds.Items[nid].Index
var res *g.OptResult
res, err = c.ActiveProxyNode(ctx, &g.ProxyNode{Index: nextIndex})
if err != nil {
fmt.Printf("-----ChangeProxyNode--ActiveProxyNode--err(%v)\n", err)
return
}
fmt.Println(res.Msg)
})
return err
}