Blame view

test/client.go 2.97 KB
b6e571c3   zhangqijia   添加参考链接
1
2
  //参考:https://jergoo.gitbooks.io/go-grpc-practice-guide/content/chapter2/interceptor.html
  
ee23102d   zhangqijia   支持mongo, grpc接服务器
3
4
5
6
7
8
  package main
  
  import (
  	"context"
  	"fmt"
  	"google.golang.org/grpc"
88e31175   zhangqijia   grpc 增加tls, 使用san证书
9
  	"google.golang.org/grpc/credentials"
ee23102d   zhangqijia   支持mongo, grpc接服务器
10
11
12
13
14
  	_ "pro2d/conf"
  	"pro2d/protos/pb"
  	"pro2d/utils"
  )
  
563acaf7   zhangqijia   在拦截器中认证jwt
15
  func Register(c pb.LoginClient, phone, password string)  error {
ee23102d   zhangqijia   支持mongo, grpc接服务器
16
17
18
19
20
21
22
23
24
25
  	r, err := c.RegisterHandler(context.Background(), &pb.Register{
  		Phone:                "17683852936",
  		Password:             "123456",
  		Code:     0,
  	})
  
  	if err != nil {
  		return err
  	}
  	if r.Code != 0 {
563acaf7   zhangqijia   在拦截器中认证jwt
26
  		return fmt.Errorf("register fail")
ee23102d   zhangqijia   支持mongo, grpc接服务器
27
28
29
30
31
  	}
  	utils.Sugar.Debug("register success")
  	return nil
  }
  
563acaf7   zhangqijia   在拦截器中认证jwt
32
33
34
  func Login(loginUri, token, uid string)  {
  	var opts []grpc.DialOption
  	// 指定自定义认证
88e31175   zhangqijia   grpc 增加tls, 使用san证书
35
36
37
38
39
40
41
42
43
44
45
46
47
48
  	opts = append(opts, grpc.WithPerRPCCredentials(&utils.AuthToken{Token: token}))
  	if TLS  {
  		// TLS连接
  		creds, err := credentials.NewClientTLSFromFile("keys/server.pem", ServerName)
  		if err != nil {
  			utils.Sugar.Fatalf("Failed to create TLS credentials %v", err)
  			return
  		}
  		opts = append(opts, grpc.WithTransportCredentials(creds))
  
  	}else{
  		opts = append(opts, grpc.WithInsecure())
  	}
  
563acaf7   zhangqijia   在拦截器中认证jwt
49
  	gameConn, err := grpc.Dial(loginUri, opts...)
ee23102d   zhangqijia   支持mongo, grpc接服务器
50
51
52
53
54
55
56
  	if err != nil {
  		utils.Sugar.Errorf("game conn err: %v", err)
  		return
  	}
  	defer gameConn.Close()
  
  	client:= pb.NewGameClient(gameConn)
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
57
  	var role *pb.Role
563acaf7   zhangqijia   在拦截器中认证jwt
58
59
60
  	loginRsp, err := client.LoginHandler(context.Background(), &pb.LoginReq{
  		Uid: uid,
  		Device: "111111",
ee23102d   zhangqijia   支持mongo, grpc接服务器
61
62
63
64
65
66
  	})
  
  	if err != nil {
  		utils.Sugar.Errorf("login error: %v", err)
  		return
  	}
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
67
  	role = loginRsp.Role
ee23102d   zhangqijia   支持mongo, grpc接服务器
68
  
563acaf7   zhangqijia   在拦截器中认证jwt
69
70
71
  	if loginRsp.Code != 0 {
  		utils.Sugar.Debugf("login fail, role not exist")
  		createRole, err := client.CreateRoleHandler(context.Background(), &pb.LoginReq{Uid: uid, Device: "11111"})
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
72
73
74
75
  		if err != nil {
  			utils.Sugar.Errorf("create role err: %v", err)
  			return
  		}
563acaf7   zhangqijia   在拦截器中认证jwt
76
  		utils.Sugar.Debug("create role rsp: ", createRole.Code)
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
77
  		role = createRole.Role
ee23102d   zhangqijia   支持mongo, grpc接服务器
78
  	}
ee23102d   zhangqijia   支持mongo, grpc接服务器
79
  
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
80
  	utils.Sugar.Debugf("login successful role: %v", role)
ee23102d   zhangqijia   支持mongo, grpc接服务器
81
82
  }
  
88e31175   zhangqijia   grpc 增加tls, 使用san证书
83
84
85
86
87
  const (
  	TLS = true
  	ServerName = "pro2d"
  )
  
ee23102d   zhangqijia   支持mongo, grpc接服务器
88
  func main() {
88e31175   zhangqijia   grpc 增加tls, 使用san证书
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
  
  	var opts []grpc.DialOption
  	if TLS  {
  		// TLS连接
  		creds, err := credentials.NewClientTLSFromFile("keys/server.pem", ServerName)
  		if err != nil {
  			utils.Sugar.Fatalf("Failed to create TLS credentials %v", err)
  			return
  		}
  		opts = append(opts, grpc.WithTransportCredentials(creds))
  
  	}else{
  		opts = append(opts, grpc.WithInsecure())
  	}
  
  	conn, err := grpc.Dial("localhost:8848", opts...)
ee23102d   zhangqijia   支持mongo, grpc接服务器
105
106
107
108
109
  	if err != nil {
  		utils.Sugar.Errorf("conn err: %v", err)
  		return
  	}
  	defer conn.Close()
563acaf7   zhangqijia   在拦截器中认证jwt
110
  	c := pb.NewLoginClient(conn)
88e31175   zhangqijia   grpc 增加tls, 使用san证书
111
  	//err = Register(c,"17683852936", "123456")
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
112
113
114
115
  	//if err != nil {
  	//	utils.Sugar.Errorf("register err: %v", err)
  	//	return
  	//}
563acaf7   zhangqijia   在拦截器中认证jwt
116
  	rsp, err := c.CreateTokenHandler(context.Background(), &pb.Account{
ee23102d   zhangqijia   支持mongo, grpc接服务器
117
118
119
120
  		Phone:                "17683852936",
  		Password:             "123456",
  	})
  
1584eb4b   zhangqijia   修复创建唯一索引的bug
121
122
123
124
125
  	if err != nil {
  		utils.Sugar.Errorf("createtoken err: %v", err)
  		return
  	}
  
563acaf7   zhangqijia   在拦截器中认证jwt
126
127
  	if rsp.Code != 0 {
  		utils.Sugar.Errorf("createtoken err" )
1584eb4b   zhangqijia   修复创建唯一索引的bug
128
129
130
  		return
  	}
  
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
131
  	if len(rsp.GameService) >0 {
563acaf7   zhangqijia   在拦截器中认证jwt
132
  		Login(rsp.GameService[0].Address, rsp.Token, rsp.Uid)
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
133
  	}
88e31175   zhangqijia   grpc 增加tls, 使用san证书
134
  }