/
session.go
116 lines (112 loc) · 3.54 KB
/
session.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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package service
import (
"context"
"fmt"
"google.golang.org/grpc"
"time"
"vpn/center/model"
"vpn/center/serializer"
"vpn/proto"
)
type SessionService struct {
UserName string `form:"username" json:"username" binding:"required" example:"Anonymous"`
Country string `form:"country" json:"country" binding:"required" example:"Anonymous"`
}
func (s *SessionService) SessionEstablish() serializer.Response {
var user model.User
if err := model.DB.Model(&model.User{}).Where("user_name=?", s.UserName).First(&user).Error; err != nil {
//如果查询不到,返回相应的错误
return serializer.Response{
Code: -1,
Error: "用户未注册或用户名错误",
}
}
var session model.Session
if err := model.DB.Model(&model.Session{}).Where("uid=?", user.ID).First(&session).Error; err != nil {
//如果查询不到,返回相应的错误
return serializer.Response{
Code: -1,
Error: "该用户未激活或已过期,请获取激活码",
}
} else {
var blade model.Blade
model.DB.Model(&model.Session{}).Where(&model.Session{Status: 1, Country: s.Country}).Order("users").Find(&blade)
address := fmt.Sprintf("%s:%v", blade.Address.String(), 8001)
conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())
if err != nil {
return serializer.Response{
Code: -1,
Error: "服务器请求失败,请您尝试更换地点接入",
}
}
defer conn.Close()
c := pb.NewSessionManagerClient(conn)
ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second)
defer cancel()
if r, err := c.SessionEstablishment(ctx, &pb.SessionEstablishRequest{
SessionID: session.SessionID,
UserID: uint32(session.Uid),
}); err != nil {
if r.GetStatus() == "OK" {
return serializer.Response{
Code: 1,
Data: session.SessionID,
Msg: "服务器初始化成功",
}
}
}
}
return serializer.Response{
Code: -1,
Msg: "服务器初始失败,请稍后再次尝试",
}
}
func (s *SessionService) SessionDeletion() serializer.Response {
var user model.User
if err := model.DB.Model(&model.User{}).Where("user_name=?", s.UserName).First(&user).Error; err != nil {
//如果查询不到,返回相应的错误
return serializer.Response{
Code: -1,
Error: "用户未注册或用户名错误",
}
}
var session model.Session
if err := model.DB.Model(&model.Session{}).Where("uid=?", user.ID).First(&session).Error; err != nil {
//如果查询不到,返回相应的错误
return serializer.Response{
Code: -1,
Error: "该用户未激活或已过期,请获取激活码",
}
} else {
var blade model.Blade
model.DB.Model(&model.Session{}).Where(&model.Session{Status: 1, Country: s.Country}).Order("users").Find(&blade)
address := fmt.Sprintf("%s:%v", blade.Address.String(), 8001)
conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithBlock())
if err != nil {
return serializer.Response{
Code: -1,
Error: "服务器请求失败,请您尝试更换地点接入",
}
}
defer conn.Close()
c := pb.NewSessionManagerClient(conn)
ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second)
defer cancel()
if r, err := c.SessionEstablishment(ctx, &pb.SessionEstablishRequest{
SessionID: session.SessionID,
UserID: uint32(session.Uid),
}); err != nil {
if r.GetStatus() == "OK" {
return serializer.Response{
Code: 1,
Data: session.SessionID,
Msg: "服务器初始化成功",
}
}
}
}
return serializer.Response{
Code: -1,
Msg: "服务器初始失败,请稍后再次尝试",
}
}