/
acc_controller.go
124 lines (94 loc) · 2.81 KB
/
acc_controller.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
117
118
119
120
121
122
123
124
/**
* Created by GoLand.
* User: link1st
* Date: 2019-07-27
* Time: 13:12
*/
package websocket
import (
"encoding/json"
"fmt"
"github.com/go-redis/redis"
"gowebsocket/common"
"gowebsocket/lib/cache"
"gowebsocket/models"
"time"
)
// 用户登录
func LoginController(client *Client, seq string, message []byte) (code uint32, msg string, data interface{}) {
code = common.OK
currentTime := uint64(time.Now().Unix())
request := &models.Login{}
if err := json.Unmarshal(message, request); err != nil {
code = common.ParameterIllegal
fmt.Println("用户登录 解析数据失败", seq, err)
return
}
fmt.Println("webSocket_request 用户登录", seq, "ServiceToken", request.ServiceToken)
if request.UserId == "" || len(request.UserId) >= 20 {
code = common.UnauthorizedUserId
fmt.Println("用户登录 非法的用户", seq, request.UserId)
return
}
if !InAppIds(request.AppId) {
code = common.Unauthorized
fmt.Println("用户登录 不支持的平台", seq, request.AppId)
return
}
client.Login(request.AppId, request.UserId, currentTime)
// 存储数据
userOnline := models.UserLogin(serverIp, serverPort, request.AppId, request.UserId, client.Addr, currentTime)
err := cache.SetUserOnlineInfo(client.GetKey(), userOnline)
if err != nil {
code = common.ServerError
fmt.Println("用户登录 SetUserOnlineInfo", seq, err)
return
}
// 用户登录
login := &login{
AppId: request.AppId,
UserId: request.UserId,
Client: client,
}
clientManager.Login <- login
fmt.Println("用户登录 成功", seq, client.Addr, request.UserId)
return
}
// 心跳接口
func HeartbeatController(client *Client, seq string, message []byte) (code uint32, msg string, data interface{}) {
code = common.OK
currentTime := uint64(time.Now().Unix())
request := &models.HeartBeat{}
if err := json.Unmarshal(message, request); err != nil {
code = common.ParameterIllegal
fmt.Println("心跳接口 解析数据失败", seq, err)
return
}
fmt.Println("webSocket_request 心跳接口", client.AppId, client.UserId)
if !client.IsLogin() {
fmt.Println("心跳接口 用户未登录", client.AppId, client.UserId, seq)
code = common.NotLoggedIn
return
}
userOnline, err := cache.GetUserOnlineInfo(client.GetKey())
if err != nil {
if err == redis.Nil {
code = common.NotLoggedIn
fmt.Println("心跳接口 用户未登录", seq, client.AppId, client.UserId)
return
} else {
code = common.ServerError
fmt.Println("心跳接口 GetUserOnlineInfo", seq, client.AppId, client.UserId, err)
return
}
}
client.Heartbeat(currentTime)
userOnline.Heartbeat(currentTime)
err = cache.SetUserOnlineInfo(client.GetKey(), userOnline)
if err != nil {
code = common.ServerError
fmt.Println("心跳接口 SetUserOnlineInfo", seq, client.AppId, client.UserId, err)
return
}
return
}