Skip to content

Commit c53202f

Browse files
committed
Assign chat members by slots
1 parent 6ac0407 commit c53202f

File tree

164 files changed

+1577
-1418
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

164 files changed

+1577
-1418
lines changed

apps/apis/upload/internal/config/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ func init() {
3939
config.Port = *port
4040

4141
xsnowflake.NewSnowflake(config.ServerID)
42-
xlog.Shared(config.Log, config.Name+utils.IntToStr(config.ServerID))
42+
xlog.Shared(config.Log, config.Name+cast.ToString(config.ServerID))
4343
}
4444

4545
func NewConfig() *Config {

apps/auth/dig/dig.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"lark/apps/auth/internal/server"
77
"lark/apps/auth/internal/server/auth"
88
"lark/apps/auth/internal/service"
9+
"lark/business/biz_online"
910
"lark/domain/cache"
1011
"lark/domain/repo"
1112
"log"
@@ -25,6 +26,7 @@ func init() {
2526
Provide(cache.NewAuthCache)
2627
Provide(cache.NewUserCache)
2728
Provide(cache.NewServerMgrCache)
29+
Provide(biz_online.NewOnline)
2830
}
2931

3032
func Invoke(i interface{}) error {

apps/auth/internal/config/config.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package config
22

33
import (
44
"flag"
5+
"github.com/spf13/cast"
56
"lark/pkg/common/xlog"
67
"lark/pkg/common/xsnowflake"
78
"lark/pkg/conf"
@@ -41,7 +42,7 @@ func init() {
4142
config.GrpcServer.Port = *grpcPort
4243

4344
xsnowflake.NewSnowflake(config.ServerID)
44-
xlog.Shared(config.Log, config.Name+utils.IntToStr(config.ServerID))
45+
xlog.Shared(config.Log, config.Name+cast.ToString(config.ServerID))
4546
}
4647

4748
func NewConfig() *Config {

apps/auth/internal/service/svc_auth.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"golang.org/x/oauth2"
66
"lark/apps/auth/internal/config"
77
chat_member_client "lark/apps/chat_member/client"
8+
"lark/business/biz_online"
89
"lark/domain/cache"
910
"lark/domain/repo"
1011
"lark/pkg/common/xoauth2"
@@ -32,6 +33,7 @@ type authService struct {
3233
chatMemberClient chat_member_client.ChatMemberClient
3334
googleOauthConfig *oauth2.Config
3435
githubOauthConfig *oauth2.Config
36+
online biz_online.Online
3537
}
3638

3739
func NewAuthService(cfg *config.Config,
@@ -41,7 +43,8 @@ func NewAuthService(cfg *config.Config,
4143
chatMemberRepo repo.ChatMemberRepository,
4244
authCache cache.AuthCache,
4345
userCache cache.UserCache,
44-
svrMgrCache cache.ServerMgrCache) AuthService {
46+
svrMgrCache cache.ServerMgrCache,
47+
online biz_online.Online) AuthService {
4548
chatMemberClient := chat_member_client.NewChatMemberClient(cfg.Etcd, cfg.ChatMemberServer, cfg.Jaeger, cfg.Name)
4649
svc := &authService{cfg: cfg,
4750
oauthUserRepo: oauthUserRepo,
@@ -52,6 +55,7 @@ func NewAuthService(cfg *config.Config,
5255
userCache: userCache,
5356
svrMgrCache: svrMgrCache,
5457
chatMemberClient: chatMemberClient,
58+
online: online,
5559
}
5660
svc.googleOauthConfig = xoauth2.NewGoogleOauthConfig(cfg.Google)
5761
svc.githubOauthConfig = xoauth2.NewGithubOauthConfig(cfg.Github)

apps/auth/internal/service/svc_auth_const.go

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,26 @@ package service
33
import "errors"
44

55
const (
6-
ERROR_CODE_AUTH_ACCOUNT_TYPE_ERR int32 = 2001
7-
ERROR_CODE_AUTH_ACCOUNT_OR_PASSWORD_ERR int32 = 2002
8-
ERROR_CODE_AUTH_QUERY_DB_FAILED int32 = 2003
9-
ERROR_CODE_AUTH_REDIS_GET_FAILED int32 = 2004
10-
ERROR_CODE_AUTH_REGISTER_ERR int32 = 2005
11-
ERROR_CODE_AUTH_INSERT_VALUE_FAILED int32 = 2006
12-
ERROR_CODE_AUTH_ACCOUNT_DOES_NOT_EXIST int32 = 2007
13-
ERROR_CODE_AUTH_MOBILE_HAS_BEEN_REGISTERED int32 = 2008
14-
ERROR_CODE_AUTH_LOGOUT_FAILED int32 = 2009
15-
ERROR_CODE_AUTH_UPDATE_VALUE_FAILED int32 = 2010
16-
ERROR_CODE_AUTH_GENERATE_TOKEN_FAILED int32 = 2011
17-
ERROR_CODE_AUTH_REDIS_SET_FAILED int32 = 2012
18-
ERROR_CODE_AUTH_JWT_TOKEN_ERR int32 = 2013
19-
ERROR_CODE_AUTH_JWT_SESSION_ID_ERR int32 = 2014
20-
ERROR_CODE_AUTH_THE_MOBILE_HAS_BEEN_BOUND_TO_ANOTHER_ACCOUNT int32 = 2015
21-
ERROR_CODE_AUTH_OAUTH_TOKEN_ACQUISITION_FAILED int32 = 2016
22-
ERROR_CODE_AUTH_OAUTH_USER_INFO_ACQUISITION_FAILED int32 = 2017
23-
ERROR_CODE_AUTH_OAUTH_USER_INFO_QUERY_FAILED int32 = 2018
24-
ERROR_CODE_AUTH_GRPC_SERVICE_FAILURE int32 = 2019
6+
ERROR_CODE_AUTH_ACCOUNT_TYPE_ERR int32 = 200001
7+
ERROR_CODE_AUTH_ACCOUNT_OR_PASSWORD_ERR int32 = 200002
8+
ERROR_CODE_AUTH_QUERY_DB_FAILED int32 = 200003
9+
ERROR_CODE_AUTH_REDIS_GET_FAILED int32 = 200004
10+
ERROR_CODE_AUTH_REGISTER_ERR int32 = 200005
11+
ERROR_CODE_AUTH_INSERT_VALUE_FAILED int32 = 200006
12+
ERROR_CODE_AUTH_ACCOUNT_DOES_NOT_EXIST int32 = 200007
13+
ERROR_CODE_AUTH_MOBILE_HAS_BEEN_REGISTERED int32 = 200008
14+
ERROR_CODE_AUTH_LOGOUT_FAILED int32 = 200009
15+
ERROR_CODE_AUTH_UPDATE_VALUE_FAILED int32 = 200010
16+
ERROR_CODE_AUTH_GENERATE_TOKEN_FAILED int32 = 200011
17+
ERROR_CODE_AUTH_REDIS_SET_FAILED int32 = 200012
18+
ERROR_CODE_AUTH_JWT_TOKEN_ERR int32 = 200013
19+
ERROR_CODE_AUTH_JWT_SESSION_ID_ERR int32 = 200014
20+
ERROR_CODE_AUTH_THE_MOBILE_HAS_BEEN_BOUND_TO_ANOTHER_ACCOUNT int32 = 200015
21+
ERROR_CODE_AUTH_OAUTH_TOKEN_ACQUISITION_FAILED int32 = 200016
22+
ERROR_CODE_AUTH_OAUTH_USER_INFO_ACQUISITION_FAILED int32 = 200017
23+
ERROR_CODE_AUTH_OAUTH_USER_INFO_QUERY_FAILED int32 = 200018
24+
ERROR_CODE_AUTH_GRPC_SERVICE_FAILURE int32 = 200019
25+
ERROR_CODE_AUTH_UPDATE_USER_SERVER_ID_FAILED int32 = 200020
2526
)
2627

2728
const (
@@ -44,6 +45,7 @@ const (
4445
ERROR_AUTH_OAUTH_USER_INFO_ACQUISITION_FAILED = "获取用户信息失败"
4546
ERROR_AUTH_OAUTH_USER_INFO_QUERY_FAILED = "查询用户信息失败"
4647
ERROR_AUTH_GRPC_SERVICE_FAILURE = "服务故障"
48+
ERROR_AUTH_UPDATE_USER_SERVER_ID_FAILED = "更新ServerId失败"
4749
)
4850

4951
var (

apps/auth/internal/service/svc_auth_oauth2.go

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010
"lark/pkg/common/xsnowflake"
1111
"lark/pkg/entity"
1212
"lark/pkg/proto/pb_auth"
13-
"lark/pkg/proto/pb_chat_member"
1413
"lark/pkg/proto/pb_enum"
1514
"lark/pkg/proto/pb_user"
1615
"lark/pkg/utils"
@@ -22,6 +21,7 @@ func (s *authService) oauth2Logic(user *po.OauthUser, platform pb_enum.PLATFORM_
2221
}
2322
var (
2423
q = entity.NewMysqlQuery()
24+
uid int64
2525
oauthUser *pdo.OauthUser
2626
server *pb_auth.ServerInfo
2727
)
@@ -41,8 +41,7 @@ func (s *authService) oauth2Logic(user *po.OauthUser, platform pb_enum.PLATFORM_
4141
return
4242
}
4343
var (
44-
signIn *do.SignIn
45-
onOffResp *pb_chat_member.ChatMemberOnOffLineResp
44+
signIn *do.SignIn
4645
)
4746
q.Normal()
4847
q.SetFilter("uid=?", oauthUser.Uid)
@@ -51,30 +50,41 @@ func (s *authService) oauth2Logic(user *po.OauthUser, platform pb_enum.PLATFORM_
5150
aui.Set(signIn.Code, signIn.Msg)
5251
return
5352
}
54-
onOffResp = s.chatMemberOnOffLine(signIn.User.Uid, int64(server.ServerId), platform)
55-
if onOffResp == nil {
56-
aui.Set(ERROR_CODE_AUTH_GRPC_SERVICE_FAILURE, ERROR_AUTH_GRPC_SERVICE_FAILURE)
57-
xlog.Warn(ERROR_CODE_AUTH_GRPC_SERVICE_FAILURE, ERROR_AUTH_GRPC_SERVICE_FAILURE)
58-
return
59-
}
53+
uid = oauthUser.Uid
6054
_ = copier.Copy(aui.UserInfo, signIn.User)
6155
_ = copier.Copy(aui.UserInfo.Avatar, signIn.Avatar)
6256
aui.AccessToken = signIn.AccessToken
6357
aui.RefreshToken = signIn.RefreshToken
58+
59+
_, _, err = s.online.UserOnline(uid, int64(server.ServerId), platform)
60+
if err != nil {
61+
aui.Set(ERROR_CODE_AUTH_UPDATE_USER_SERVER_ID_FAILED, ERROR_AUTH_UPDATE_USER_SERVER_ID_FAILED)
62+
xlog.Warn(aui.Code, aui.Msg, err.Error())
63+
return
64+
}
6465
} else {
6566
//首次注册
6667
var (
68+
srvId int64
6769
signUp *do.SignUp
6870
)
69-
signUp, err = s.registerUser(user, platform, int64(server.ServerId))
71+
srvId, signUp, err = s.registerUser(user, platform, int64(server.ServerId))
7072
if signUp.Err != nil || signUp.Code > 0 {
7173
aui.Set(signUp.Code, signUp.Msg)
7274
return
7375
}
76+
uid = signUp.User.Uid
7477
_ = copier.Copy(aui.UserInfo, signUp.User)
7578
_ = copier.Copy(aui.UserInfo.Avatar, signUp.Avatar)
7679
aui.AccessToken = signUp.AccessToken
7780
aui.RefreshToken = signUp.RefreshToken
81+
82+
err = s.userCache.SetServerId(user.Uid, srvId)
83+
if err != nil {
84+
aui.Set(ERROR_CODE_AUTH_UPDATE_USER_SERVER_ID_FAILED, ERROR_AUTH_UPDATE_USER_SERVER_ID_FAILED)
85+
xlog.Warn(aui.Code, aui.Msg, err.Error())
86+
return
87+
}
7888
}
7989
aui.Server = server
8090
return
@@ -100,11 +110,12 @@ func (s *authService) updateGithubUserInfo(user *po.OauthUser) (err error) {
100110
return
101111
}
102112

103-
func (s *authService) registerUser(oauthUser *po.OauthUser, platform pb_enum.PLATFORM_TYPE, serverId int64) (signUp *do.SignUp, err error) {
113+
func (s *authService) registerUser(oauthUser *po.OauthUser, platform pb_enum.PLATFORM_TYPE, serverId int64) (srvId int64, signUp *do.SignUp, err error) {
104114
var (
105115
user *po.User
106116
avatar *po.Avatar
107117
)
118+
srvId = utils.NewServerId(0, serverId, platform)
108119
oauthUser.Uid = xsnowflake.NewSnowflakeID()
109120
oauthUser.OauthId = xsnowflake.NewSnowflakeID()
110121
user = &po.User{
@@ -121,7 +132,7 @@ func (s *authService) registerUser(oauthUser *po.OauthUser, platform pb_enum.PLA
121132
Email: oauthUser.Email,
122133
Mobile: "",
123134
RegPlatform: int(platform),
124-
ServerId: utils.NewServerId(0, serverId, platform),
135+
ServerId: srvId,
125136
CityId: 0,
126137
Avatar: oauthUser.AvatarUrl,
127138
}

apps/auth/internal/service/svc_auth_refresh_token.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,13 @@ func (s *authService) RefreshToken(ctx context.Context, req *pb_auth.RefreshToke
1919
refreshToken, err = xjwt.Decode(req.RefreshToken)
2020
if err != nil {
2121
resp.Set(ERROR_CODE_AUTH_JWT_TOKEN_ERR, ERROR_AUTH_JWT_TOKEN_ERR)
22-
xlog.Warn(ERROR_CODE_AUTH_JWT_TOKEN_ERR, ERROR_AUTH_JWT_TOKEN_ERR, err.Error())
22+
xlog.Warn(resp.Code, resp.Msg, err.Error())
2323
return
2424
}
2525
sessionId, err = s.authCache.GetRefreshTokenSessionId(refreshToken.Uid, refreshToken.Platform)
2626
if err != nil {
2727
resp.Set(ERROR_CODE_AUTH_REDIS_GET_FAILED, ERROR_AUTH_REDIS_GET_FAILED)
28-
xlog.Warn(ERROR_CODE_AUTH_REDIS_GET_FAILED, ERROR_AUTH_REDIS_GET_FAILED, err.Error())
28+
xlog.Warn(resp.Code, resp.Msg, err.Error())
2929
return
3030
}
3131
if sessionId != refreshToken.SessionId {
@@ -35,13 +35,13 @@ func (s *authService) RefreshToken(ctx context.Context, req *pb_auth.RefreshToke
3535
accessToken, err = xjwt.CreateToken(refreshToken.Uid, refreshToken.Platform, true, constant.CONST_DURATION_SHA_JWT_ACCESS_TOKEN_EXPIRE_IN_SECOND)
3636
if err != nil {
3737
resp.Set(ERROR_CODE_AUTH_GENERATE_TOKEN_FAILED, ERROR_AUTH_GENERATE_TOKEN_FAILED)
38-
xlog.Warn(ERROR_CODE_AUTH_GENERATE_TOKEN_FAILED, ERROR_AUTH_GENERATE_TOKEN_FAILED, err.Error())
38+
xlog.Warn(resp.Code, resp.Msg, err.Error())
3939
return
4040
}
4141
err = s.authCache.SetAccessTokenSessionId(refreshToken.Uid, refreshToken.Platform, accessToken.SessionId)
4242
if err != nil {
4343
resp.Set(ERROR_CODE_AUTH_REDIS_SET_FAILED, ERROR_AUTH_REDIS_SET_FAILED)
44-
xlog.Warn(ERROR_CODE_AUTH_REDIS_SET_FAILED, ERROR_AUTH_REDIS_SET_FAILED, err.Error())
44+
xlog.Warn(resp.Code, resp.Msg, err.Error())
4545
return
4646
}
4747
resp.AccessToken = &pb_auth.Token{

apps/auth/internal/service/svc_auth_sign_in.go

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"lark/pkg/common/xlog"
88
"lark/pkg/entity"
99
"lark/pkg/proto/pb_auth"
10-
"lark/pkg/proto/pb_chat_member"
1110
"lark/pkg/proto/pb_enum"
1211
"lark/pkg/proto/pb_user"
1312
"lark/pkg/utils"
@@ -16,10 +15,9 @@ import (
1615
func (s *authService) SignIn(ctx context.Context, req *pb_auth.SignInReq) (resp *pb_auth.SignInResp, _ error) {
1716
resp = &pb_auth.SignInResp{UserInfo: &pb_user.UserInfo{Avatar: &pb_user.AvatarInfo{}}}
1817
var (
19-
q = entity.NewMysqlQuery()
20-
signIn *do.SignIn
21-
server *pb_auth.ServerInfo
22-
onOffResp *pb_chat_member.ChatMemberOnOffLineResp
18+
q = entity.NewMysqlQuery()
19+
signIn *do.SignIn
20+
server *pb_auth.ServerInfo
2321
)
2422
switch req.AccountType {
2523
case pb_enum.ACCOUNT_TYPE_MOBILE:
@@ -39,10 +37,10 @@ func (s *authService) SignIn(ctx context.Context, req *pb_auth.SignInReq) (resp
3937
return
4038
}
4139
server = s.getWsServer()
42-
onOffResp = s.chatMemberOnOffLine(signIn.User.Uid, int64(server.ServerId), req.Platform)
43-
if onOffResp == nil {
40+
_, _, err := s.online.UserOnline(signIn.User.Uid, int64(server.ServerId), req.Platform)
41+
if err != nil {
4442
resp.Set(ERROR_CODE_AUTH_GRPC_SERVICE_FAILURE, ERROR_AUTH_GRPC_SERVICE_FAILURE)
45-
xlog.Warn(ERROR_CODE_AUTH_GRPC_SERVICE_FAILURE, ERROR_AUTH_GRPC_SERVICE_FAILURE)
43+
xlog.Warn(resp.Code, resp.Msg, err.Error())
4644
return
4745
}
4846
_ = copier.Copy(resp.UserInfo, signIn.User)

apps/auth/internal/service/svc_auth_sign_out.go

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,30 +4,23 @@ import (
44
"context"
55
"lark/pkg/common/xlog"
66
"lark/pkg/proto/pb_auth"
7-
"lark/pkg/proto/pb_chat_member"
87
)
98

109
func (s *authService) SignOut(ctx context.Context, req *pb_auth.SignOutReq) (resp *pb_auth.SignOutResp, _ error) {
1110
resp = new(pb_auth.SignOutResp)
1211
var (
13-
err error
14-
onOffResp *pb_chat_member.ChatMemberOnOffLineResp
12+
err error
1513
)
16-
onOffResp = s.chatMemberOnOffLine(req.Uid, 0, req.Platform)
17-
if onOffResp == nil {
14+
_, _, err = s.online.UserOnline(req.Uid, 0, req.Platform)
15+
if err != nil {
1816
resp.Set(ERROR_CODE_AUTH_GRPC_SERVICE_FAILURE, ERROR_AUTH_GRPC_SERVICE_FAILURE)
19-
xlog.Warn(ERROR_CODE_AUTH_GRPC_SERVICE_FAILURE, ERROR_AUTH_GRPC_SERVICE_FAILURE)
20-
return
21-
}
22-
if onOffResp.Code > 0 {
23-
resp.Set(onOffResp.Code, onOffResp.Msg)
24-
xlog.Warn(onOffResp.Code, onOffResp.Msg)
17+
xlog.Warn(resp.Code, resp.Msg, err.Error())
2518
return
2619
}
2720
err = s.userCache.SignOut(req.Uid, req.Platform)
2821
if err != nil {
2922
resp.Set(ERROR_CODE_AUTH_LOGOUT_FAILED, ERROR_AUTH_LOGOUT_FAILED)
30-
xlog.Warn(ERROR_CODE_AUTH_LOGOUT_FAILED, ERROR_AUTH_LOGOUT_FAILED, err.Error())
23+
xlog.Warn(resp.Code, resp.Msg, err.Error())
3124
return
3225
}
3326
return

apps/auth/internal/service/svc_auth_sign_up.go

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,13 @@ import (
66
"gorm.io/gorm"
77
"lark/domain/do"
88
"lark/domain/po"
9-
"lark/pkg/common/xants"
109
"lark/pkg/common/xjwt"
1110
"lark/pkg/common/xlog"
1211
"lark/pkg/common/xmysql"
1312
"lark/pkg/common/xsnowflake"
1413
"lark/pkg/constant"
1514
"lark/pkg/entity"
1615
"lark/pkg/proto/pb_auth"
17-
"lark/pkg/proto/pb_chat_member"
1816
"lark/pkg/proto/pb_enum"
1917
"lark/pkg/proto/pb_user"
2018
"lark/pkg/utils"
@@ -54,19 +52,19 @@ func (s *authService) SignUp(ctx context.Context, req *pb_auth.SignUpReq) (resp
5452
resp.Set(signUp.Code, signUp.Msg)
5553
return
5654
}
55+
err = s.userCache.SetServerId(user.Uid, user.ServerId)
56+
if err != nil {
57+
resp.Set(ERROR_CODE_AUTH_UPDATE_USER_SERVER_ID_FAILED, ERROR_AUTH_UPDATE_USER_SERVER_ID_FAILED)
58+
xlog.Warn(resp.Code, resp.Msg, err.Error())
59+
return
60+
}
5761

5862
_ = copier.Copy(resp.UserInfo, user)
5963
_ = copier.Copy(resp.UserInfo.Avatar, avatar)
6064
resp.AccessToken = signUp.AccessToken
6165
resp.RefreshToken = signUp.RefreshToken
6266
resp.Server = server
6367

64-
_ = xants.Submit(func() {
65-
terr := s.userCache.SetUserServer(user.Uid, user.ServerId)
66-
if terr != nil {
67-
xlog.Warn(terr.Error())
68-
}
69-
})
7068
return
7169
}
7270

@@ -149,15 +147,6 @@ func (s *authService) RecheckMobile(uid int64, mobile string, resp *pb_auth.Sign
149147
return
150148
}
151149

152-
func (s *authService) chatMemberOnOffLine(uid int64, serverId int64, platform pb_enum.PLATFORM_TYPE) (resp *pb_chat_member.ChatMemberOnOffLineResp) {
153-
req := &pb_chat_member.ChatMemberOnOffLineReq{
154-
Uid: uid,
155-
ServerId: serverId,
156-
Platform: platform,
157-
}
158-
return s.chatMemberClient.ChatMemberOnOffLine(req)
159-
}
160-
161150
func (s *authService) getWsServer() (wsServer *pb_auth.ServerInfo) {
162151
var (
163152
member string

0 commit comments

Comments
 (0)