Blame view

actions/server.go 3.42 KB
ee23102d   zhangqijia   支持mongo, grpc接服务器
1
2
3
4
  package actions
  
  import (
  	"context"
1b1ad555   zhangqijia   tls测试代码
5
  	"fmt"
ee23102d   zhangqijia   支持mongo, grpc接服务器
6
  	"google.golang.org/grpc"
88e31175   zhangqijia   grpc 增加tls, 使用san证书
7
  	"google.golang.org/grpc/credentials"
ee23102d   zhangqijia   支持mongo, grpc接服务器
8
  	"google.golang.org/grpc/reflection"
1b1ad555   zhangqijia   tls测试代码
9
  	"pro2d/components/jwt"
ee23102d   zhangqijia   支持mongo, grpc接服务器
10
  	"pro2d/conf"
3592dfd3   zhangqijia   重构models, 索引唯一索引
11
  	"pro2d/models"
ee23102d   zhangqijia   支持mongo, grpc接服务器
12
13
14
15
  	"pro2d/protos/pb"
  	"pro2d/utils"
  )
  
563acaf7   zhangqijia   在拦截器中认证jwt
16
17
  type LoginServer struct{
  	pb.UnsafeLoginServer
ee23102d   zhangqijia   支持mongo, grpc接服务器
18
19
20
  	*BasicServer
  }
  
563acaf7   zhangqijia   在拦截器中认证jwt
21
22
  func NewAccountServer() *LoginServer {
  	return &LoginServer{
286f6dbe   zhangqijia   etcd 保存服务信息
23
  		BasicServer: NewServer(),
ee23102d   zhangqijia   支持mongo, grpc接服务器
24
25
26
27
28
29
30
31
32
33
34
35
  	}
  }
  
  //拦截器
  func AccountServerInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo,
  	handler grpc.UnaryHandler) (interface{}, error) {
  
  	utils.Sugar.Debugf("gRPC method: %s, %v", info.FullMethod, req)
  	resp, err := handler(ctx, req)
  	return resp, err
  }
  
563acaf7   zhangqijia   在拦截器中认证jwt
36
  func (s *LoginServer)Start() error {
ee23102d   zhangqijia   支持mongo, grpc接服务器
37
38
39
40
41
  	lis, err := s.BasicServer.Start(conf.GlobalConf.AccountConf)
  	if err != nil {
  		return err
  	}
  
3592dfd3   zhangqijia   重构models, 索引唯一索引
42
43
  	models.InitAccountServerModels()
  
88e31175   zhangqijia   grpc 增加tls, 使用san证书
44
  	var opts []grpc.ServerOption
66502d8d   zhangqijia   从token中获取uid
45
46
47
48
49
50
51
52
53
  
  	if conf.GlobalConf.TLS.Status {
  		//TLS
  		creds, err := credentials.NewServerTLSFromFile("keys/server.pem", "keys/server.key")
  		if err != nil {
  			utils.Sugar.Errorf("Failed to generate credentials %v", err)
  			return err
  		}
  		opts = append(opts, grpc.Creds(creds))
88e31175   zhangqijia   grpc 增加tls, 使用san证书
54
  	}
88e31175   zhangqijia   grpc 增加tls, 使用san证书
55
56
57
58
  
  	//拦截器
  	opts = append(opts, grpc.UnaryInterceptor(AccountServerInterceptor))
  
ee23102d   zhangqijia   支持mongo, grpc接服务器
59
  	//new一个grpc
88e31175   zhangqijia   grpc 增加tls, 使用san证书
60
  	s.GrpcServer = grpc.NewServer(opts...)
ee23102d   zhangqijia   支持mongo, grpc接服务器
61
  
563acaf7   zhangqijia   在拦截器中认证jwt
62
  	pb.RegisterLoginServer(s.GrpcServer, s)
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
63
  	reflection.Register(s.GrpcServer) //在给定的gRPC服务器上注册服务器反射服务
ee23102d   zhangqijia   支持mongo, grpc接服务器
64
65
66
  
  	// Serve方法在lis上接受传入连接,为每个连接创建一个ServerTransport和server的goroutine。
  	// 该goroutine读取gRPC请求,然后调用已注册的处理程序来响应它们。
88e31175   zhangqijia   grpc 增加tls, 使用san证书
67
  	utils.Sugar.Debugf("Start LoginServer listening on %d with TLS", conf.GlobalConf.AccountConf.Port)
ee23102d   zhangqijia   支持mongo, grpc接服务器
68
  
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
69
  	return s.GrpcServer.Serve(lis)
ee23102d   zhangqijia   支持mongo, grpc接服务器
70
71
  }
  
563acaf7   zhangqijia   在拦截器中认证jwt
72
  func (s *LoginServer)Stop()  {
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
73
  	s.BasicServer.Stop()
ee23102d   zhangqijia   支持mongo, grpc接服务器
74
75
  }
  
ee23102d   zhangqijia   支持mongo, grpc接服务器
76
77
78
79
80
81
82
  type GameServer struct{
  	pb.UnimplementedGameServer
  	*BasicServer
  }
  
  func NewGameServer() *GameServer {
  	return &GameServer{
286f6dbe   zhangqijia   etcd 保存服务信息
83
  		BasicServer: NewServer(),
ee23102d   zhangqijia   支持mongo, grpc接服务器
84
85
86
87
88
89
  	}
  }
  //拦截器
  func GameServerInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo,
  	handler grpc.UnaryHandler) (interface{}, error) {
  
563acaf7   zhangqijia   在拦截器中认证jwt
90
  	//utils.Sugar.Debugf("gRPC method: %s, %v", info.FullMethod, req)
1b1ad555   zhangqijia   tls测试代码
91
92
93
94
95
  	uid := jwt.CheckAuth(ctx)
  	if uid == ""{
  		return nil, fmt.Errorf("token error")
  	}
  	context.WithValue(ctx, "uid", uid)
ee23102d   zhangqijia   支持mongo, grpc接服务器
96
97
98
99
100
101
102
103
104
105
  	resp, err := handler(ctx, req)
  	return resp, err
  }
  
  func (s *GameServer)Start() error {
  	lis, err := s.BasicServer.Start(conf.GlobalConf.GameConf)
  	if err != nil {
  		return err
  	}
  
3592dfd3   zhangqijia   重构models, 索引唯一索引
106
107
  	models.InitGameServerModels()
  
88e31175   zhangqijia   grpc 增加tls, 使用san证书
108
109
  	var opts []grpc.ServerOption
  	//TLS
66502d8d   zhangqijia   从token中获取uid
110
111
112
113
114
115
116
117
  	if conf.GlobalConf.TLS.Status {
  		//TLS
  		creds, err := credentials.NewServerTLSFromFile("keys/server.pem", "keys/server.key")
  		if err != nil {
  			utils.Sugar.Errorf("Failed to generate credentials %v", err)
  			return err
  		}
  		opts = append(opts, grpc.Creds(creds))
88e31175   zhangqijia   grpc 增加tls, 使用san证书
118
  	}
88e31175   zhangqijia   grpc 增加tls, 使用san证书
119
120
121
122
  
  	//拦截器
  	opts = append(opts, grpc.UnaryInterceptor(GameServerInterceptor))
  
ee23102d   zhangqijia   支持mongo, grpc接服务器
123
  	//new一个grpc
88e31175   zhangqijia   grpc 增加tls, 使用san证书
124
  	s.GrpcServer = grpc.NewServer(opts...)
ee23102d   zhangqijia   支持mongo, grpc接服务器
125
  
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
126
127
  	pb.RegisterGameServer(s.GrpcServer, s)
  	reflection.Register(s.GrpcServer) //在给定的gRPC服务器上注册服务器反射服务
ee23102d   zhangqijia   支持mongo, grpc接服务器
128
129
130
  
  	// Serve方法在lis上接受传入连接,为每个连接创建一个ServerTransport和server的goroutine。
  	// 该goroutine读取gRPC请求,然后调用已注册的处理程序来响应它们。
88e31175   zhangqijia   grpc 增加tls, 使用san证书
131
  	utils.Sugar.Debugf("Start GameServer listening on %d with TLS", conf.GlobalConf.GameConf.Port)
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
132
  	return s.GrpcServer.Serve(lis)
ee23102d   zhangqijia   支持mongo, grpc接服务器
133
134
135
  }
  
  func (s *GameServer)Stop()  {
f7f4beb5   zhangqijia   新增grpc平滑关闭,修复crea...
136
  	s.BasicServer.Stop()
ee23102d   zhangqijia   支持mongo, grpc接服务器
137
  }