From ca1cdbdeb7f4bafd3870746f95eecbaa39be4f3a Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 16:35:18 +0800 Subject: [PATCH 01/40] cobra --- internal/common/check/friend.go | 25 +- internal/common/check/msg.go | 18 - .../online_msg_to_mongo_handler.go | 2 +- internal/rpc/user/user.go | 4 +- internal/tools/msg.go | 12 +- internal/tools/msg_test.go | 322 +++++++++++++++--- pkg/common/db/controller/extend_msg.go | 1 + pkg/common/db/controller/msg.go | 13 +- pkg/common/db/table/unrelation/msg.go | 4 +- pkg/common/kafka/producer.go | 2 +- 10 files changed, 305 insertions(+), 98 deletions(-) diff --git a/internal/common/check/friend.go b/internal/common/check/friend.go index b4dfbad2f..e892ea701 100644 --- a/internal/common/check/friend.go +++ b/internal/common/check/friend.go @@ -2,9 +2,7 @@ package check import ( "OpenIM/pkg/common/config" - "OpenIM/pkg/common/constant" discoveryRegistry "OpenIM/pkg/discoveryregistry" - "OpenIM/pkg/errs" "OpenIM/pkg/proto/friend" sdkws "OpenIM/pkg/proto/sdkws" "context" @@ -51,26 +49,15 @@ func (f *FriendChecker) IsFriend(ctx context.Context, possibleFriendUserID, user } -func (f *FriendChecker) GetAllPageFriends(ctx context.Context, ownerUserID string) (resp []*sdkws.FriendInfo, err error) { +func (f *FriendChecker) GetFriendIDs(ctx context.Context, ownerUserID string) (friendIDs []string, err error) { cc, err := f.getConn() if err != nil { return nil, err } - page := int32(0) - req := friend.GetPaginationFriendsReq{UserID: ownerUserID} - for { - req.Pagination = &sdkws.RequestPagination{PageNumber: page, ShowNumber: constant.ShowNumber} - tmp, err := friend.NewFriendClient(cc).GetPaginationFriends(ctx, &req) - if err != nil { - return nil, err - } - if len(tmp.FriendsInfo) == 0 { - if tmp.Total == int32(len(resp)) { - return resp, nil - } - return nil, errs.ErrData.Wrap("The total number of results and expectations are different, but result is nil") - } - resp = append(resp, tmp.FriendsInfo...) - page++ + req := friend.GetFriendIDsReq{UserID: ownerUserID} + resp, err := friend.NewFriendClient(cc).GetFriendIDs(ctx, &req) + if err != nil { + return nil, err } + return resp.FriendIDs, err } diff --git a/internal/common/check/msg.go b/internal/common/check/msg.go index 12a3761a6..dba6cff73 100644 --- a/internal/common/check/msg.go +++ b/internal/common/check/msg.go @@ -47,21 +47,3 @@ func (m *MsgCheck) PullMessageBySeqList(ctx context.Context, req *sdkws.PullMess resp, err := msg.NewMsgClient(cc).PullMessageBySeqs(ctx, req) return resp, err } - -//func (m *MsgCheck) SendMsg(ctx context.Context, req *msg.SendMsgReq) (*msg.SendMsgResp, error) { -// cc, err := m.getConn() -// if err != nil { -// return nil, err -// } -// resp, err := msg.NewMsgClient(cc).SendMsg(ctx, req) -// return resp, err -//} -// -//func (m *MsgCheck) SendMsg(ctx context.Context, req *msg.SendMsgReq) (*msg.SendMsgResp, error) { -// cc, err := m.getConn() -// if err != nil { -// return nil, err -// } -// resp, err := msg.NewMsgClient(cc).SendMsg(ctx, req) -// return resp, err -//} diff --git a/internal/msgtransfer/online_msg_to_mongo_handler.go b/internal/msgtransfer/online_msg_to_mongo_handler.go index 2c206c29c..5b34c0ec0 100644 --- a/internal/msgtransfer/online_msg_to_mongo_handler.go +++ b/internal/msgtransfer/online_msg_to_mongo_handler.go @@ -24,7 +24,7 @@ func NewOnlineHistoryMongoConsumerHandler(database controller.MsgDatabase) *Onli mc := &OnlineHistoryMongoConsumerHandler{ historyConsumerGroup: kfk.NewMConsumerGroup(&kfk.MConsumerGroupConfig{KafkaVersion: sarama.V2_0_0_0, OffsetsInitial: sarama.OffsetNewest, IsReturnErr: false}, []string{config.Config.Kafka.MsgToMongo.Topic}, - config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongo), + config.Config.Kafka.MsgToMongo.Addr, config.Config.Kafka.ConsumerGroupID.MsgToMongo), msgDatabase: database, } return mc diff --git a/internal/rpc/user/user.go b/internal/rpc/user/user.go index d0b361b1b..c516f5663 100644 --- a/internal/rpc/user/user.go +++ b/internal/rpc/user/user.go @@ -83,13 +83,13 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbuser.UpdateUserI if err != nil { return nil, err } - friends, err := s.friendCheck.GetAllPageFriends(ctx, req.UserInfo.UserID) + friends, err := s.friendCheck.GetFriendIDs(ctx, req.UserInfo.UserID) if err != nil { return nil, err } go func() { for _, v := range friends { - s.notification.FriendInfoUpdatedNotification(ctx, req.UserInfo.UserID, v.FriendUser.UserID, tracelog.GetOpUserID(ctx)) + s.notification.FriendInfoUpdatedNotification(ctx, req.UserInfo.UserID, v, tracelog.GetOpUserID(ctx)) } }() s.notification.UserInfoUpdatedNotification(ctx, tracelog.GetOpUserID(ctx), req.UserInfo.UserID) diff --git a/internal/tools/msg.go b/internal/tools/msg.go index 18eb8e8de..f17af75e7 100644 --- a/internal/tools/msg.go +++ b/internal/tools/msg.go @@ -11,6 +11,7 @@ import ( "OpenIM/pkg/common/tracelog" "OpenIM/pkg/utils" "context" + "errors" "fmt" "github.com/go-redis/redis/v8" "math" @@ -22,6 +23,8 @@ type MsgTool struct { groupDatabase controller.GroupDatabase } +var errSeq = errors.New("cache max seq and mongo max seq is diff > 10") + func NewMsgTool(msgDatabase controller.MsgDatabase, userDatabase controller.UserDatabase, groupDatabase controller.GroupDatabase) *MsgTool { return &MsgTool{ msgDatabase: msgDatabase, @@ -125,7 +128,9 @@ func (c *MsgTool) fixGroupSeq(ctx context.Context, groupID string, userIDs []str continue } } - c.CheckMaxSeqWithMongo(ctx, groupID, maxSeqCache, maxSeqMongo, constant.WriteDiffusion) + if err := c.CheckMaxSeqWithMongo(ctx, groupID, maxSeqCache, maxSeqMongo, constant.WriteDiffusion); err != nil { + log.NewWarn(tracelog.GetOperationID(ctx), "cache max seq and mongo max seq is diff > 10", groupID, maxSeqCache, maxSeqMongo, constant.WriteDiffusion) + } return nil } @@ -162,10 +167,11 @@ func (c *MsgTool) GetAndFixGroupUserSeq(ctx context.Context, userID string, grou return minSeqCache, nil } -func (c *MsgTool) CheckMaxSeqWithMongo(ctx context.Context, sourceID string, maxSeqCache, maxSeqMongo int64, diffusionType int) { +func (c *MsgTool) CheckMaxSeqWithMongo(ctx context.Context, sourceID string, maxSeqCache, maxSeqMongo int64, diffusionType int) error { if math.Abs(float64(maxSeqMongo-maxSeqCache)) > 10 { - log.NewWarn(tracelog.GetOperationID(ctx), "cache max seq and mongo max seq is diff > 10", sourceID, maxSeqCache, maxSeqMongo, diffusionType) + return errSeq } + return nil } func (c *MsgTool) ShowUserSeqs(ctx context.Context, userID string) { diff --git a/internal/tools/msg_test.go b/internal/tools/msg_test.go index b5989de59..5a5e4a292 100644 --- a/internal/tools/msg_test.go +++ b/internal/tools/msg_test.go @@ -2,22 +2,24 @@ package tools import ( "OpenIM/pkg/common/constant" + "OpenIM/pkg/common/db/cache" + "OpenIM/pkg/common/tracelog" "OpenIM/pkg/proto/sdkws" + "OpenIM/pkg/utils" "context" - "fmt" + "github.com/golang/protobuf/proto" + "go.mongodb.org/mongo-driver/bson" "strconv" - "github.com/go-redis/redis/v8" - "github.com/golang/protobuf/proto" - "go.mongodb.org/mongo-driver/mongo" - "go.mongodb.org/mongo-driver/mongo/options" + unRelationTb "OpenIM/pkg/common/db/table/unrelation" + "OpenIM/pkg/common/db/unrelation" "testing" "time" ) -func GenUserChat(startSeq, stopSeq, delSeq, index int64, userID string) *mongo2.UserChat { - chat := &mongo2.UserChat{UID: userID + strconv.Itoa(int(index))} +func GenMsgDoc(startSeq, stopSeq, delSeq, index int64, userID string) *unRelationTb.MsgDocModel { + msgDoc := &unRelationTb.MsgDocModel{DocID: userID + strconv.Itoa(int(index))} for i := startSeq; i <= stopSeq; i++ { msg := sdkws.MsgData{ SendID: "sendID1", @@ -31,57 +33,281 @@ func GenUserChat(startSeq, stopSeq, delSeq, index int64, userID string) *mongo2. SessionType: 1, MsgFrom: 100, ContentType: 101, - Content: []byte("testFaceURL.com"), + Content: []byte("testFaceURL"), Seq: i, SendTime: time.Now().Unix(), CreateTime: time.Now().Unix(), Status: 1, } bytes, _ := proto.Marshal(&msg) - sendTime := 0 - chat.Msg = append(chat.Msg, mongo2.MsgInfo{SendTime: int64(sendTime), Msg: bytes}) + var sendTime int64 + if i <= delSeq { + sendTime = 10000 + } else { + sendTime = utils.GetCurrentTimestampByMill() + } + msgDoc.Msg = append(msgDoc.Msg, unRelationTb.MsgInfoModel{SendTime: int64(sendTime), Msg: bytes}) } - return chat + return msgDoc } -func SetUserMaxSeq(userID string, seq int) error { - return redisClient.Set(context.Background(), "REDIS_USER_INCR_SEQ"+userID, seq, 0).Err() -} +func TestDeleteMongoMsgAndResetRedisSeq(t *testing.T) { + operationID := "test" -func CreateChat(userChat *mongo2.UserChat) error { - _, err := mongoClient.InsertOne(context.Background(), userChat) - return err -} - -func TestDeleteUserMsgsAndSetMinSeq(t *testing.T) { - operationID := getCronTaskOperationID() - redisClient = redis.NewClient(&redis.Options{ - Addr: "127.0.0.1:16379", - Password: "openIM123", // no password set - DB: 13, // use default DB - }) - mongoUri := fmt.Sprintf("mongodb://%s:%s@%s/%s?maxPoolSize=%d&authSource=admin", - "root", "openIM123", "127.0.0.1:37017", - "openIM", 100) - client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(mongoUri)) - mongoClient = client.Database("openIM").Collection("msg") - testUID1 := "test_del_id1" - //testUID2 := "test_del_id2" - //testUID3 := "test_del_id3" - //testUID4 := "test_del_id4" - //testUID5 := "test_del_id5" - //testUID6 := "test_del_id6" - err = SetUserMaxSeq(testUID1, 600) - userChat := GenUserChat(1, 500, 200, 0, testUID1) - err = CreateChat(userChat) - - if err := DeleteUserMsgsAndSetMinSeq(operationID, testUID1); err != nil { - t.Error("checkMaxSeqWithMongo failed", testUID1) - } - if err := checkMaxSeqWithMongo(operationID, testUID1, constant.WriteDiffusion); err != nil { - t.Error("checkMaxSeqWithMongo failed", testUID1) - } + rdb, err := cache.NewRedis() if err != nil { - t.Error("err is not nil", testUID1, err.Error()) + return + } + mgo, err := unrelation.NewMongo() + if err != nil { + return + } + cacheModel := cache.NewCacheModel(rdb) + mongoClient := mgo.GetDatabase().Collection(unRelationTb.MsgDocModel{}.TableName()) + + ctx := context.Background() + tracelog.SetOperationID(ctx, operationID) + testUID1 := "test_del_id1" + _, err = mongoClient.DeleteOne(ctx, bson.M{"uid": testUID1 + ":" + strconv.Itoa(0)}) + if err != nil { + t.Error("DeleteOne failed") + return + } + err = cacheModel.SetUserMaxSeq(ctx, testUID1, 600) + if err != nil { + t.Error("SetUserMaxSeq failed") + } + msgDoc := GenMsgDoc(1, 600, 200, 0, testUID1) + if _, err := mongoClient.InsertOne(ctx, msgDoc); err != nil { + t.Error("InsertOne failed", testUID1) + } + + msgTools, err := InitMsgTool() + if err != nil { + t.Error("init failed") + return + } + msgTools.ClearUsersMsg(ctx, []string{testUID1}) + minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache, err := msgTools.msgDatabase.GetUserMinMaxSeqInMongoAndCache(ctx, testUID1) + if err != nil { + t.Error("GetSuperGroupMinMaxSeqInMongoAndCache failed") + return + } + if err := msgTools.CheckMaxSeqWithMongo(ctx, testUID1, maxSeqCache, maxSeqMongo, constant.WriteDiffusion); err != nil { + t.Error("checkMaxSeqWithMongo failed", testUID1) + } + if minSeqMongo != minSeqCache { + t.Error("minSeqMongo != minSeqCache", minSeqMongo, minSeqCache) + } + if minSeqCache != 201 { + t.Error("test1 is not the same", "minSeq:", minSeqCache, "targetSeq", 201) + } + + /////// uid2 + + testUID2 := "test_del_id2" + _, err = mongoClient.DeleteOne(ctx, bson.M{"uid": testUID2 + ":" + strconv.Itoa(0)}) + if err != nil { + t.Error("delete failed") + } + _, err = mongoClient.DeleteOne(ctx, bson.M{"uid": testUID2 + ":" + strconv.Itoa(1)}) + if err != nil { + t.Error("delete failed") + } + + err = cacheModel.SetUserMaxSeq(ctx, testUID2, 7000) + if err != nil { + t.Error("SetUserMaxSeq failed") + } + msgDoc = GenMsgDoc(1, 4999, 5000, 0, testUID2) + msgDoc2 := GenMsgDoc(5000, 7000, 6000, 1, testUID2) + if _, err := mongoClient.InsertOne(ctx, msgDoc); err != nil { + t.Error("InsertOne failed", testUID1) + } + if _, err := mongoClient.InsertOne(ctx, msgDoc2); err != nil { + t.Error("InsertOne failed", testUID1) + } + + msgTools.ClearUsersMsg(ctx, []string{testUID2}) + minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache, err = msgTools.msgDatabase.GetUserMinMaxSeqInMongoAndCache(ctx, testUID2) + if err != nil { + t.Error("GetSuperGroupMinMaxSeqInMongoAndCache failed") + return + } + if err := msgTools.CheckMaxSeqWithMongo(ctx, testUID2, maxSeqCache, maxSeqMongo, constant.WriteDiffusion); err != nil { + t.Error("checkMaxSeqWithMongo failed", testUID2) + } + if minSeqMongo != minSeqCache { + t.Error("minSeqMongo != minSeqCache", minSeqMongo, minSeqCache) + } + if minSeqCache != 6001 { + t.Error("test1 is not the same", "minSeq:", minSeqCache, "targetSeq", 201) + } + + /////// uid3 + testUID3 := "test_del_id3" + _, err = mongoClient.DeleteOne(ctx, bson.M{"uid": testUID3 + ":" + strconv.Itoa(0)}) + if err != nil { + t.Error("delete failed") + } + err = cacheModel.SetUserMaxSeq(ctx, testUID3, 4999) + if err != nil { + t.Error("SetUserMaxSeq failed") + } + msgDoc = GenMsgDoc(1, 4999, 5000, 0, testUID3) + if _, err := mongoClient.InsertOne(ctx, msgDoc); err != nil { + t.Error("InsertOne failed", testUID3) + } + + msgTools.ClearUsersMsg(ctx, []string{testUID3}) + minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache, err = msgTools.msgDatabase.GetUserMinMaxSeqInMongoAndCache(ctx, testUID3) + if err != nil { + t.Error("GetSuperGroupMinMaxSeqInMongoAndCache failed") + return + } + if err := msgTools.CheckMaxSeqWithMongo(ctx, testUID3, maxSeqCache, maxSeqMongo, constant.WriteDiffusion); err != nil { + t.Error("checkMaxSeqWithMongo failed", testUID3) + } + if minSeqMongo != minSeqCache { + t.Error("minSeqMongo != minSeqCache", minSeqMongo, minSeqCache) + } + if minSeqCache != 5000 { + t.Error("test1 is not the same", "minSeq:", minSeqCache, "targetSeq", 201) + } + + //// uid4 + testUID4 := "test_del_id4" + _, err = mongoClient.DeleteOne(ctx, bson.M{"uid": testUID4 + ":" + strconv.Itoa(0)}) + if err != nil { + t.Error("delete failed") + } + _, err = mongoClient.DeleteOne(ctx, bson.M{"uid": testUID4 + ":" + strconv.Itoa(1)}) + if err != nil { + t.Error("delete failed") + } + _, err = mongoClient.DeleteOne(ctx, bson.M{"uid": testUID4 + ":" + strconv.Itoa(2)}) + if err != nil { + t.Error("delete failed") + } + + err = cacheModel.SetUserMaxSeq(ctx, testUID4, 12000) + msgDoc = GenMsgDoc(1, 4999, 5000, 0, testUID4) + msgDoc2 = GenMsgDoc(5000, 9999, 10000, 1, testUID4) + msgDoc3 := GenMsgDoc(10000, 12000, 11000, 2, testUID4) + if _, err := mongoClient.InsertOne(ctx, msgDoc); err != nil { + t.Error("InsertOne failed", testUID4) + } + if _, err := mongoClient.InsertOne(ctx, msgDoc2); err != nil { + t.Error("InsertOne failed", testUID4) + } + if _, err := mongoClient.InsertOne(ctx, msgDoc3); err != nil { + t.Error("InsertOne failed", testUID4) + } + + msgTools.ClearUsersMsg(ctx, []string{testUID4}) + if err != nil { + t.Error("GetSuperGroupMinMaxSeqInMongoAndCache failed") + return + } + minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache, err = msgTools.msgDatabase.GetUserMinMaxSeqInMongoAndCache(ctx, testUID4) + if err != nil { + t.Error("GetSuperGroupMinMaxSeqInMongoAndCache failed") + return + } + if err := msgTools.CheckMaxSeqWithMongo(ctx, testUID4, maxSeqCache, maxSeqMongo, constant.WriteDiffusion); err != nil { + t.Error("checkMaxSeqWithMongo failed", testUID4) + } + if minSeqMongo != minSeqCache { + t.Error("minSeqMongo != minSeqCache", minSeqMongo, minSeqCache) + } + if minSeqCache != 5000 { + t.Error("test1 is not the same", "minSeq:", minSeqCache) + } + + testUID5 := "test_del_id5" + _, err = mongoClient.DeleteOne(ctx, bson.M{"uid": testUID5 + ":" + strconv.Itoa(0)}) + if err != nil { + t.Error("delete failed") + } + _, err = mongoClient.DeleteOne(ctx, bson.M{"uid": testUID5 + ":" + strconv.Itoa(1)}) + if err != nil { + t.Error("delete failed") + } + err = cacheModel.SetUserMaxSeq(ctx, testUID5, 9999) + msgDoc = GenMsgDoc(1, 4999, 5000, 0, testUID5) + msgDoc2 = GenMsgDoc(5000, 9999, 10000, 1, testUID5) + if _, err := mongoClient.InsertOne(ctx, msgDoc); err != nil { + t.Error("InsertOne failed", testUID5) + } + if _, err := mongoClient.InsertOne(ctx, msgDoc2); err != nil { + t.Error("InsertOne failed", testUID5) + } + + msgTools.ClearUsersMsg(ctx, []string{testUID5}) + if err != nil { + t.Error("GetSuperGroupMinMaxSeqInMongoAndCache failed") + return + } + minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache, err = msgTools.msgDatabase.GetUserMinMaxSeqInMongoAndCache(ctx, testUID5) + if err != nil { + t.Error("GetSuperGroupMinMaxSeqInMongoAndCache failed") + return + } + if err := msgTools.CheckMaxSeqWithMongo(ctx, testUID5, maxSeqCache, maxSeqMongo, constant.WriteDiffusion); err != nil { + t.Error("checkMaxSeqWithMongo failed", testUID5) + } + if minSeqMongo != minSeqCache { + t.Error("minSeqMongo != minSeqCache", minSeqMongo, minSeqCache) + } + if minSeqCache != 10000 { + t.Error("test1 is not the same", "minSeq:", minSeqCache) + } + + testUID6 := "test_del_id6" + _, err = mongoClient.DeleteOne(ctx, bson.M{"uid": testUID6 + ":" + strconv.Itoa(0)}) + if err != nil { + t.Error("delete failed") + } + _, err = mongoClient.DeleteOne(ctx, bson.M{"uid": testUID6 + ":" + strconv.Itoa(1)}) + if err != nil { + t.Error("delete failed") + } + _, err = mongoClient.DeleteOne(ctx, bson.M{"uid": testUID6 + ":" + strconv.Itoa(2)}) + if err != nil { + t.Error("delete failed") + } + _, err = mongoClient.DeleteOne(ctx, bson.M{"uid": testUID6 + ":" + strconv.Itoa(3)}) + if err != nil { + t.Error("delete failed") + } + msgDoc = GenMsgDoc(1, 4999, 5000, 0, testUID6) + msgDoc2 = GenMsgDoc(5000, 9999, 10000, 1, testUID6) + msgDoc3 = GenMsgDoc(10000, 14999, 13000, 2, testUID6) + msgDoc4 := GenMsgDoc(15000, 19999, 0, 3, testUID6) + if _, err := mongoClient.InsertOne(ctx, msgDoc); err != nil { + t.Error("InsertOne failed", testUID4) + } + if _, err := mongoClient.InsertOne(ctx, msgDoc2); err != nil { + t.Error("InsertOne failed", testUID4) + } + if _, err := mongoClient.InsertOne(ctx, msgDoc3); err != nil { + t.Error("InsertOne failed", testUID4) + } + if _, err := mongoClient.InsertOne(ctx, msgDoc4); err != nil { + t.Error("InsertOne failed", testUID4) + } + minSeqMongo, maxSeqMongo, minSeqCache, maxSeqCache, err = msgTools.msgDatabase.GetUserMinMaxSeqInMongoAndCache(ctx, testUID6) + if err != nil { + t.Error("GetSuperGroupMinMaxSeqInMongoAndCache failed") + return + } + if err := msgTools.CheckMaxSeqWithMongo(ctx, testUID6, maxSeqCache, maxSeqMongo, constant.WriteDiffusion); err != nil { + t.Error("checkMaxSeqWithMongo failed", testUID6) + } + if minSeqMongo != minSeqCache { + t.Error("minSeqMongo != minSeqCache", minSeqMongo, minSeqCache) + } + if minSeqCache != 13001 { + t.Error("test1 is not the same", "minSeq:", minSeqCache) } } diff --git a/pkg/common/db/controller/extend_msg.go b/pkg/common/db/controller/extend_msg.go index 3c5ceb14b..b9f8c31e5 100644 --- a/pkg/common/db/controller/extend_msg.go +++ b/pkg/common/db/controller/extend_msg.go @@ -5,6 +5,7 @@ import ( "context" ) +// for mongoDB type ExtendMsgDatabase interface { CreateExtendMsgSet(ctx context.Context, set *unRelationTb.ExtendMsgSetModel) error GetAllExtendMsgSet(ctx context.Context, ID string, opts *unRelationTb.GetAllExtendMsgSetOpts) (sets []*unRelationTb.ExtendMsgSetModel, err error) diff --git a/pkg/common/db/controller/msg.go b/pkg/common/db/controller/msg.go index e2488428e..56204f4db 100644 --- a/pkg/common/db/controller/msg.go +++ b/pkg/common/db/controller/msg.go @@ -1,10 +1,12 @@ package controller import ( + "OpenIM/pkg/common/config" "OpenIM/pkg/common/constant" "OpenIM/pkg/common/db/cache" unRelationTb "OpenIM/pkg/common/db/table/unrelation" "OpenIM/pkg/common/db/unrelation" + "OpenIM/pkg/common/kafka" "OpenIM/pkg/common/log" "OpenIM/pkg/common/prome" "OpenIM/pkg/common/tracelog" @@ -68,7 +70,7 @@ type MsgDatabase interface { DeleteReactionExtendMsgSet(ctx context.Context, sourceID string, sessionType int32, clientMsgID string, msgFirstModifyTime int64, reactionExtensionList map[string]*sdkws.KeyValue) error SetSendMsgStatus(ctx context.Context, id string, status int32) error GetSendMsgStatus(ctx context.Context, id string) (int32, error) - MsgToMQ(ctx context.Context, key string, mq *pbMsg.MsgDataToMQ) error + MsgToMQ(ctx context.Context, key string, msg2mq *pbMsg.MsgDataToMQ) error GetUserMaxSeq(ctx context.Context, userID string) (int64, error) GetUserMinSeq(ctx context.Context, userID string) (int64, error) GetGroupMaxSeq(ctx context.Context, groupID string) (int64, error) @@ -79,6 +81,7 @@ func NewMsgDatabase(msgDocModel unRelationTb.MsgDocModelInterface, cacheModel ca return &msgDatabase{ msgDocDatabase: msgDocModel, cache: cacheModel, + producer: kafka.NewKafkaProducer(config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.Ws2mschat.Topic), } } @@ -93,6 +96,8 @@ type msgDatabase struct { msgDocDatabase unRelationTb.MsgDocModelInterface extendMsgDatabase unRelationTb.ExtendMsgSetModelInterface cache cache.Model + producer *kafka.Producer + // model msg unRelationTb.MsgDocModel extendMsgSetModel unRelationTb.ExtendMsgSetModel } @@ -165,9 +170,9 @@ func (db *msgDatabase) GetSendMsgStatus(ctx context.Context, id string) (int32, return db.cache.GetSendMsgStatus(ctx, id) } -func (db *msgDatabase) MsgToMQ(ctx context.Context, key string, mq *pbMsg.MsgDataToMQ) error { - //TODO implement me - panic("implement me") +func (db *msgDatabase) MsgToMQ(ctx context.Context, key string, msg2mq *pbMsg.MsgDataToMQ) error { + _, _, err := db.producer.SendMessage(ctx, key, msg2mq) + return err } func (db *msgDatabase) GetUserMaxSeq(ctx context.Context, userID string) (int64, error) { diff --git a/pkg/common/db/table/unrelation/msg.go b/pkg/common/db/table/unrelation/msg.go index 6d07d4efb..270e69626 100644 --- a/pkg/common/db/table/unrelation/msg.go +++ b/pkg/common/db/table/unrelation/msg.go @@ -10,7 +10,7 @@ import ( const ( singleGocMsgNum = 5000 - CChat = "msg" + msg = "msg" OldestList = 0 NewestList = -1 ) @@ -38,7 +38,7 @@ type MsgDocModelInterface interface { } func (MsgDocModel) TableName() string { - return CChat + return msg } func (MsgDocModel) GetSingleGocMsgNum() int64 { diff --git a/pkg/common/kafka/producer.go b/pkg/common/kafka/producer.go index 65b6dc295..fb71104fc 100644 --- a/pkg/common/kafka/producer.go +++ b/pkg/common/kafka/producer.go @@ -46,7 +46,7 @@ func NewKafkaProducer(addr []string, topic string) *Producer { return &p } -func (p *Producer) SendMessage(ctx context.Context, m proto.Message, key string) (int32, int64, error) { +func (p *Producer) SendMessage(ctx context.Context, key string, m proto.Message) (int32, int64, error) { operationID := tracelog.GetOperationID(ctx) log.Info(operationID, "SendMessage", "key ", key, m.String(), p.producer) kMsg := &sarama.ProducerMessage{} From 9ce50095b5bc4e2d42e00360fb0ebe6f84e9d1f4 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 17:29:03 +0800 Subject: [PATCH 02/40] cobra --- cmd/api/main.go | 2 +- internal/api/auth.go | 10 ++--- internal/api/conversation.go | 10 ++--- internal/api/friend.go | 11 ++--- internal/api/group.go | 11 ++--- internal/api/msg.go | 12 ++--- internal/api/route.go | 5 +-- internal/api/third.go | 11 ++--- internal/api/user.go | 10 ++--- pkg/apistruct/auth.go | 6 +-- pkg/apistruct/aws.go | 1 - pkg/apistruct/common.go | 6 --- pkg/apistruct/conversation.go | 10 ----- pkg/apistruct/cos.go | 1 - pkg/apistruct/friend.go | 30 ++++++------- pkg/apistruct/group.go | 50 ++++++++++----------- pkg/apistruct/manage.go | 9 +--- pkg/apistruct/msg.go | 8 ---- pkg/apistruct/oss.go | 1 - pkg/apistruct/third.go | 6 --- pkg/common/db/table/unrelation/msg.go | 4 +- pkg/common/db/unrelation/mongo.go | 2 +- pkg/discoveryregistry/discovery_register.go | 1 + 23 files changed, 89 insertions(+), 128 deletions(-) delete mode 100644 pkg/apistruct/common.go diff --git a/cmd/api/main.go b/cmd/api/main.go index 488ff8491..c3b8ad9ac 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -28,7 +28,7 @@ func run(port int) error { if port == 0 { port = config.Config.Api.GinPort[0] } - zk, err := openKeeper.NewClient(config.Config.Zookeeper.ZkAddr, "", 10, "", "") + zk, err := openKeeper.NewClient(config.Config.Zookeeper.ZkAddr, "", 10, config.Config.Zookeeper.UserName, config.Config.Zookeeper.Password) if err != nil { return err } diff --git a/internal/api/auth.go b/internal/api/auth.go index d72079b40..e997ba6aa 100644 --- a/internal/api/auth.go +++ b/internal/api/auth.go @@ -3,24 +3,24 @@ package api import ( "OpenIM/internal/api/a2r" "OpenIM/pkg/common/config" + "OpenIM/pkg/discoveryregistry" auth "OpenIM/pkg/proto/auth" "context" - "github.com/OpenIMSDK/openKeeper" "github.com/gin-gonic/gin" ) var _ context.Context // 解决goland编辑器bug -func NewAuth(zk *openKeeper.ZkClient) *Auth { - return &Auth{zk: zk} +func NewAuth(c discoveryregistry.SvcDiscoveryRegistry) *Auth { + return &Auth{c: c} } type Auth struct { - zk *openKeeper.ZkClient + c discoveryregistry.SvcDiscoveryRegistry } func (o *Auth) client() (auth.AuthClient, error) { - conn, err := o.zk.GetConn(config.Config.RpcRegisterName.OpenImAuthName) + conn, err := o.c.GetConn(config.Config.RpcRegisterName.OpenImAuthName) if err != nil { return nil, err } diff --git a/internal/api/conversation.go b/internal/api/conversation.go index 146e27d74..a1af558e4 100644 --- a/internal/api/conversation.go +++ b/internal/api/conversation.go @@ -3,24 +3,24 @@ package api import ( "OpenIM/internal/api/a2r" "OpenIM/pkg/common/config" + "OpenIM/pkg/discoveryregistry" "OpenIM/pkg/proto/conversation" "context" - "github.com/OpenIMSDK/openKeeper" "github.com/gin-gonic/gin" ) var _ context.Context // 解决goland编辑器bug -func NewConversation(zk *openKeeper.ZkClient) *Conversation { - return &Conversation{zk: zk} +func NewConversation(c discoveryregistry.SvcDiscoveryRegistry) *Conversation { + return &Conversation{c: c} } type Conversation struct { - zk *openKeeper.ZkClient + c discoveryregistry.SvcDiscoveryRegistry } func (o *Conversation) client() (conversation.ConversationClient, error) { - conn, err := o.zk.GetConn(config.Config.RpcRegisterName.OpenImConversationName) + conn, err := o.c.GetConn(config.Config.RpcRegisterName.OpenImConversationName) if err != nil { return nil, err } diff --git a/internal/api/friend.go b/internal/api/friend.go index ee2412b1c..ee8aabb35 100644 --- a/internal/api/friend.go +++ b/internal/api/friend.go @@ -3,24 +3,25 @@ package api import ( "OpenIM/internal/api/a2r" "OpenIM/pkg/common/config" + "OpenIM/pkg/discoveryregistry" "OpenIM/pkg/proto/friend" "context" - "github.com/OpenIMSDK/openKeeper" + "github.com/gin-gonic/gin" ) var _ context.Context // 解决goland编辑器bug -func NewFriend(zk *openKeeper.ZkClient) *Friend { - return &Friend{zk: zk} +func NewFriend(c discoveryregistry.SvcDiscoveryRegistry) *Friend { + return &Friend{c: c} } type Friend struct { - zk *openKeeper.ZkClient + c discoveryregistry.SvcDiscoveryRegistry } func (o *Friend) client() (friend.FriendClient, error) { - conn, err := o.zk.GetConn(config.Config.RpcRegisterName.OpenImFriendName) + conn, err := o.c.GetConn(config.Config.RpcRegisterName.OpenImFriendName) if err != nil { return nil, err } diff --git a/internal/api/group.go b/internal/api/group.go index bd4e9bf56..0318193e0 100644 --- a/internal/api/group.go +++ b/internal/api/group.go @@ -3,24 +3,25 @@ package api import ( "OpenIM/internal/api/a2r" "OpenIM/pkg/common/config" + "OpenIM/pkg/discoveryregistry" "OpenIM/pkg/proto/group" "context" - "github.com/OpenIMSDK/openKeeper" + "github.com/gin-gonic/gin" ) var _ context.Context // 解决goland编辑器bug -func NewGroup(zk *openKeeper.ZkClient) *Group { - return &Group{zk: zk} +func NewGroup(c discoveryregistry.SvcDiscoveryRegistry) *Group { + return &Group{c: c} } type Group struct { - zk *openKeeper.ZkClient + c discoveryregistry.SvcDiscoveryRegistry } func (o *Group) client() (group.GroupClient, error) { - conn, err := o.zk.GetConn(config.Config.RpcRegisterName.OpenImGroupName) + conn, err := o.c.GetConn(config.Config.RpcRegisterName.OpenImGroupName) if err != nil { return nil, err } diff --git a/internal/api/msg.go b/internal/api/msg.go index 3f04e766c..edaf7ecaa 100644 --- a/internal/api/msg.go +++ b/internal/api/msg.go @@ -7,13 +7,13 @@ import ( "OpenIM/pkg/common/config" "OpenIM/pkg/common/constant" "OpenIM/pkg/common/log" + "OpenIM/pkg/discoveryregistry" "OpenIM/pkg/errs" "OpenIM/pkg/proto/msg" "OpenIM/pkg/proto/sdkws" "OpenIM/pkg/utils" "context" "errors" - "github.com/OpenIMSDK/openKeeper" "github.com/gin-gonic/gin" "github.com/go-playground/validator/v10" "github.com/golang/protobuf/proto" @@ -22,12 +22,12 @@ import ( var _ context.Context // 解决goland编辑器bug -func NewMsg(zk *openKeeper.ZkClient) *Msg { - return &Msg{zk: zk, validate: validator.New()} +func NewMsg(c discoveryregistry.SvcDiscoveryRegistry) *Msg { + return &Msg{c: c, validate: validator.New()} } type Msg struct { - zk *openKeeper.ZkClient + c discoveryregistry.SvcDiscoveryRegistry validate *validator.Validate } @@ -107,7 +107,7 @@ func newUserSendMsgReq(params *apistruct.ManagementSendMsgReq) *msg.SendMsgReq { } func (o *Msg) client() (msg.MsgClient, error) { - conn, err := o.zk.GetConn(config.Config.RpcRegisterName.OpenImMsgName) + conn, err := o.c.GetConn(config.Config.RpcRegisterName.OpenImMsgName) if err != nil { return nil, err } @@ -214,7 +214,7 @@ func (o *Msg) ManagementSendMsg(c *gin.Context) { } log.NewInfo(params.OperationID, "Ws call success to ManagementSendMsgReq", params) pbData := newUserSendMsgReq(¶ms) - conn, err := o.zk.GetConn(config.Config.RpcRegisterName.OpenImMsgName) + conn, err := o.c.GetConn(config.Config.RpcRegisterName.OpenImMsgName) if err != nil { apiresp.GinError(c, errs.ErrInternalServer) return diff --git a/internal/api/route.go b/internal/api/route.go index 7aa006d59..d05564cc7 100644 --- a/internal/api/route.go +++ b/internal/api/route.go @@ -5,13 +5,13 @@ import ( "OpenIM/pkg/common/log" "OpenIM/pkg/common/mw" "OpenIM/pkg/common/prome" - "github.com/OpenIMSDK/openKeeper" + "OpenIM/pkg/discoveryregistry" "github.com/gin-gonic/gin" "io" "os" ) -func NewGinRouter(zk *openKeeper.ZkClient) *gin.Engine { +func NewGinRouter(zk discoveryregistry.SvcDiscoveryRegistry) *gin.Engine { gin.SetMode(gin.ReleaseMode) f, _ := os.Create("../logs/api.log") gin.DefaultWriter = io.MultiWriter(f) @@ -27,7 +27,6 @@ func NewGinRouter(zk *openKeeper.ZkClient) *gin.Engine { r.GET("/metrics", prome.PrometheusHandler()) } zk.AddOption(mw.GrpcClient()) // 默认RPC中间件 - userRouterGroup := r.Group("/user") { u := NewUser(zk) diff --git a/internal/api/third.go b/internal/api/third.go index 8d2c4d081..b020b4930 100644 --- a/internal/api/third.go +++ b/internal/api/third.go @@ -3,24 +3,25 @@ package api import ( "OpenIM/internal/api/a2r" "OpenIM/pkg/common/config" + "OpenIM/pkg/discoveryregistry" "OpenIM/pkg/proto/third" "context" - "github.com/OpenIMSDK/openKeeper" + "github.com/gin-gonic/gin" ) var _ context.Context // 解决goland编辑器bug -func NewThird(zk *openKeeper.ZkClient) *Third { - return &Third{zk: zk} +func NewThird(c discoveryregistry.SvcDiscoveryRegistry) *Third { + return &Third{c: c} } type Third struct { - zk *openKeeper.ZkClient + c discoveryregistry.SvcDiscoveryRegistry } func (o *Third) client() (third.ThirdClient, error) { - conn, err := o.zk.GetConn(config.Config.RpcRegisterName.OpenImThirdName) + conn, err := o.c.GetConn(config.Config.RpcRegisterName.OpenImThirdName) if err != nil { return nil, err } diff --git a/internal/api/user.go b/internal/api/user.go index 34634faf8..738b369b7 100644 --- a/internal/api/user.go +++ b/internal/api/user.go @@ -3,24 +3,24 @@ package api import ( "OpenIM/internal/api/a2r" "OpenIM/pkg/common/config" + "OpenIM/pkg/discoveryregistry" "OpenIM/pkg/proto/user" "context" - "github.com/OpenIMSDK/openKeeper" "github.com/gin-gonic/gin" ) var _ context.Context // 解决goland编辑器bug -func NewUser(zk *openKeeper.ZkClient) *User { - return &User{zk: zk} +func NewUser(client discoveryregistry.SvcDiscoveryRegistry) *User { + return &User{c: client} } type User struct { - zk *openKeeper.ZkClient + c discoveryregistry.SvcDiscoveryRegistry } func (o *User) client() (user.UserClient, error) { - conn, err := o.zk.GetConn(config.Config.RpcRegisterName.OpenImUserName) + conn, err := o.c.GetConn(config.Config.RpcRegisterName.OpenImUserName) if err != nil { return nil, err } diff --git a/pkg/apistruct/auth.go b/pkg/apistruct/auth.go index 2942519c3..664919876 100644 --- a/pkg/apistruct/auth.go +++ b/pkg/apistruct/auth.go @@ -13,7 +13,6 @@ type UserTokenInfo struct { ExpiredTime int64 `json:"expiredTime"` } type UserRegisterResp struct { - CommResp UserToken UserTokenInfo `json:"data"` } @@ -25,7 +24,6 @@ type UserTokenReq struct { } type UserTokenResp struct { - CommResp UserToken UserTokenInfo `json:"data"` } @@ -36,7 +34,6 @@ type ForceLogoutReq struct { } type ForceLogoutResp struct { - CommResp } type ParseTokenReq struct { @@ -44,7 +41,7 @@ type ParseTokenReq struct { } //type ParseTokenResp struct { -// CommResp +// // ExpireTime int64 `json:"expireTime" binding:"required"` //} @@ -53,7 +50,6 @@ type ExpireTime struct { } type ParseTokenResp struct { - CommResp Data map[string]interface{} `json:"data" swaggerignore:"true"` ExpireTime ExpireTime `json:"-"` } diff --git a/pkg/apistruct/aws.go b/pkg/apistruct/aws.go index f7f275d62..0ef2640c5 100644 --- a/pkg/apistruct/aws.go +++ b/pkg/apistruct/aws.go @@ -14,7 +14,6 @@ type AwsStorageCredentialRespData struct { } type AwsStorageCredentialResp struct { - CommResp CosData AwsStorageCredentialRespData Data map[string]interface{} `json:"data"` } diff --git a/pkg/apistruct/common.go b/pkg/apistruct/common.go deleted file mode 100644 index c5adee56a..000000000 --- a/pkg/apistruct/common.go +++ /dev/null @@ -1,6 +0,0 @@ -package apistruct - -type RequestPagination struct { - PageNumber int `json:"pageNumber" binding:"required"` - ShowNumber int `json:"showNumber" binding:"required"` -} diff --git a/pkg/apistruct/conversation.go b/pkg/apistruct/conversation.go index aeb5b329c..2abd566e5 100644 --- a/pkg/apistruct/conversation.go +++ b/pkg/apistruct/conversation.go @@ -9,7 +9,6 @@ type GetAllConversationMessageOptReq struct { FromUserID string `json:"fromUserID" binding:"required"` } type GetAllConversationMessageOptResp struct { - CommResp ConversationOptResultList []*OptResult `json:"data"` } type GetReceiveMessageOptReq struct { @@ -18,7 +17,6 @@ type GetReceiveMessageOptReq struct { FromUserID string `json:"fromUserID" binding:"required"` } type GetReceiveMessageOptResp struct { - CommResp ConversationOptResultList []*OptResult `json:"data"` } type SetReceiveMessageOptReq struct { @@ -28,7 +26,6 @@ type SetReceiveMessageOptReq struct { ConversationIDList []string `json:"conversationIDList" binding:"required"` } type SetReceiveMessageOptResp struct { - CommResp ConversationOptResultList []*OptResult `json:"data"` } @@ -58,7 +55,6 @@ type SetConversationReq struct { } type SetConversationResp struct { - CommResp } type ModifyConversationFieldReq struct { Conversation @@ -67,7 +63,6 @@ type ModifyConversationFieldReq struct { OperationID string `json:"operationID" binding:"required"` } type ModifyConversationFieldResp struct { - CommResp } type BatchSetConversationsReq struct { @@ -78,7 +73,6 @@ type BatchSetConversationsReq struct { } type BatchSetConversationsResp struct { - CommResp Data struct { Success []string `json:"success"` Failed []string `json:"failed"` @@ -92,7 +86,6 @@ type GetConversationReq struct { } type GetConversationResp struct { - CommResp Conversation Conversation `json:"data"` } @@ -102,7 +95,6 @@ type GetAllConversationsReq struct { } type GetAllConversationsResp struct { - CommResp Conversations []Conversation `json:"data"` } @@ -113,7 +105,6 @@ type GetConversationsReq struct { } type GetConversationsResp struct { - CommResp Conversations []Conversation `json:"data"` } @@ -126,5 +117,4 @@ type SetRecvMsgOptReq struct { } type SetRecvMsgOptResp struct { - CommResp } diff --git a/pkg/apistruct/cos.go b/pkg/apistruct/cos.go index 60162fa47..2695b6bbf 100644 --- a/pkg/apistruct/cos.go +++ b/pkg/apistruct/cos.go @@ -13,7 +13,6 @@ type TencentCloudStorageCredentialRespData struct { } type TencentCloudStorageCredentialResp struct { - CommResp CosData TencentCloudStorageCredentialRespData `json:"-"` Data map[string]interface{} `json:"data"` diff --git a/pkg/apistruct/friend.go b/pkg/apistruct/friend.go index 70f552b9b..4bfc39a91 100644 --- a/pkg/apistruct/friend.go +++ b/pkg/apistruct/friend.go @@ -10,7 +10,7 @@ package apistruct // ParamsCommFriend //} //type AddBlacklistResp struct { -// CommResp +// //} // //type ImportFriendReq struct { @@ -23,7 +23,7 @@ package apistruct // Result int32 `json:"result"` //} //type ImportFriendResp struct { -// CommResp +// // UserIDResultList []UserIDResult `json:"data"` //} // @@ -32,7 +32,7 @@ package apistruct // ReqMsg string `json:"reqMsg"` //} //type AddFriendResp struct { -// CommResp +// //} // //type AddFriendResponseReq struct { @@ -41,14 +41,14 @@ package apistruct // HandleMsg string `json:"handleMsg"` //} //type AddFriendResponseResp struct { -// CommResp +// //} // //type DeleteFriendReq struct { // ParamsCommFriend //} //type DeleteFriendResp struct { -// CommResp +// //} // //type GetBlackListReq struct { @@ -56,7 +56,7 @@ package apistruct // FromUserID string `json:"fromUserID" binding:"required"` //} //type GetBlackListResp struct { -// CommResp +// // BlackUserInfoList []*sdkws.PublicUserInfo `json:"-"` // Map []map[string]interface{} `json:"data" swaggerignore:"true"` //} @@ -73,14 +73,14 @@ package apistruct // Remark string `json:"remark"` //} //type SetFriendRemarkResp struct { -// CommResp +// //} // //type RemoveBlacklistReq struct { // ParamsCommFriend //} //type RemoveBlacklistResp struct { -// CommResp +// //} // //type IsFriendReq struct { @@ -90,7 +90,7 @@ package apistruct // Friend bool `json:"isFriend"` //} //type IsFriendResp struct { -// CommResp +// // Response Response `json:"data"` //} // @@ -98,7 +98,7 @@ package apistruct // ParamsCommFriend //} //type GetFriendsInfoResp struct { -// CommResp +// // FriendInfoList []*sdkws.FriendInfo `json:"-"` // Map []map[string]interface{} `json:"data" swaggerignore:"true"` //} @@ -108,7 +108,7 @@ package apistruct // FromUserID string `json:"fromUserID" binding:"required"` //} //type GetFriendListResp struct { -// CommResp +// // FriendInfoList []*sdkws.FriendInfo `json:"-"` // Map []map[string]interface{} `json:"data" swaggerignore:"true"` //} @@ -118,7 +118,7 @@ package apistruct // FromUserID string `json:"fromUserID" binding:"required"` //} //type GetFriendApplyListResp struct { -// CommResp +// // FriendRequestList []*sdkws.FriendRequest `json:"-"` // Map []map[string]interface{} `json:"data" swaggerignore:"true"` //} @@ -128,7 +128,7 @@ package apistruct // FromUserID string `json:"fromUserID" binding:"required"` //} //type GetSelfApplyListResp struct { -// CommResp +// // FriendRequestList []*sdkws.FriendRequest `json:"-"` // Map []map[string]interface{} `json:"data" swaggerignore:"true"` //} @@ -180,7 +180,7 @@ type ImportFriendReq struct { } type ImportFriendResp struct { - //CommResp + // } type AddFriendReq struct { @@ -189,7 +189,7 @@ type AddFriendReq struct { ReqMsg string `json:"reqMsg"` } type AddFriendResp struct { - //CommResp + // } type AddFriendResponseReq struct { diff --git a/pkg/apistruct/group.go b/pkg/apistruct/group.go index 27f9cd647..5009a5f64 100644 --- a/pkg/apistruct/group.go +++ b/pkg/apistruct/group.go @@ -4,13 +4,13 @@ import ( sdkws "OpenIM/pkg/proto/sdkws" ) -type CommResp struct { +type struct { ErrCode int32 `json:"errCode"` ErrMsg string `json:"errMsg"` } type CommDataResp struct { - CommResp + Data []map[string]interface{} `json:"data"` } @@ -21,7 +21,7 @@ type KickGroupMemberReq struct { OperationID string `json:"operationID" binding:"required"` } type KickGroupMemberResp struct { - CommResp + //UserIDResultList []*UserIDResult `json:"data"` } @@ -31,7 +31,7 @@ type GetGroupMembersInfoReq struct { OperationID string `json:"operationID" binding:"required"` } type GetGroupMembersInfoResp struct { - CommResp + MemberList []*sdkws.GroupMemberFullInfo `json:"-"` Data []map[string]interface{} `json:"data" swaggerignore:"true"` } @@ -43,7 +43,7 @@ type InviteUserToGroupReq struct { OperationID string `json:"operationID" binding:"required"` } type InviteUserToGroupResp struct { - CommResp + //UserIDResultList []*UserIDResult `json:"data"` } @@ -52,7 +52,7 @@ type GetJoinedGroupListReq struct { FromUserID string `json:"fromUserID" binding:"required"` } type GetJoinedGroupListResp struct { - CommResp + GroupInfoList []*sdkws.GroupInfo `json:"-"` Data []map[string]interface{} `json:"data" swaggerignore:"true"` } @@ -64,7 +64,7 @@ type GetGroupMemberListReq struct { OperationID string `json:"operationID"` } type GetGroupMemberListResp struct { - CommResp + NextSeq int32 `json:"nextSeq"` MemberList []*sdkws.GroupMemberFullInfo `json:"-"` Data []map[string]interface{} `json:"data" swaggerignore:"true"` @@ -77,7 +77,7 @@ type GetGroupAllMemberReq struct { Count int32 `json:"count"` } type GetGroupAllMemberResp struct { - CommResp + MemberList []*sdkws.GroupMemberFullInfo `json:"-"` Data []map[string]interface{} `json:"data" swaggerignore:"true"` } @@ -90,7 +90,7 @@ type GetGroupAllMemberResp struct { // Count int32 `json:"count" binding:"required"` //} //type GetGroupAllMemberListBySplitResp struct { -// CommResp +// // MemberList []*sdkws.GroupMemberFullInfo `json:"-"` // Map []map[string]interface{} `json:"data" swaggerignore:"true"` //} @@ -108,7 +108,7 @@ type CreateGroupReq struct { GroupID string `json:"groupID"` } type CreateGroupResp struct { - CommResp + GroupInfo sdkws.GroupInfo `json:"-"` Data map[string]interface{} `json:"data" swaggerignore:"true"` } @@ -118,7 +118,7 @@ type GetGroupApplicationListReq struct { FromUserID string `json:"fromUserID" binding:"required"` //作为管理员或群主收到的 进群申请 } type GetGroupApplicationListResp struct { - CommResp + GroupRequestList []*sdkws.GroupRequest `json:"-"` Data []map[string]interface{} `json:"data" swaggerignore:"true"` } @@ -137,7 +137,7 @@ type GetGroupInfoReq struct { OperationID string `json:"operationID" binding:"required"` } type GetGroupInfoResp struct { - CommResp + GroupInfoList []*sdkws.GroupInfo `json:"-"` Data []map[string]interface{} `json:"data" swaggerignore:"true"` } @@ -171,7 +171,7 @@ type ApplicationGroupResponseReq struct { HandleResult int32 `json:"handleResult" binding:"required,oneof=-1 1"` } type ApplicationGroupResponseResp struct { - CommResp + } type JoinGroupReq struct { @@ -183,7 +183,7 @@ type JoinGroupReq struct { } type JoinGroupResp struct { - CommResp + } type QuitGroupReq struct { @@ -191,7 +191,7 @@ type QuitGroupReq struct { OperationID string `json:"operationID" binding:"required"` } type QuitGroupResp struct { - CommResp + } type SetGroupInfoReq struct { @@ -208,7 +208,7 @@ type SetGroupInfoReq struct { } type SetGroupInfoResp struct { - CommResp + } type TransferGroupOwnerReq struct { @@ -218,7 +218,7 @@ type TransferGroupOwnerReq struct { OperationID string `json:"operationID" binding:"required"` } type TransferGroupOwnerResp struct { - CommResp + } type DismissGroupReq struct { @@ -226,7 +226,7 @@ type DismissGroupReq struct { OperationID string `json:"operationID" binding:"required"` } type DismissGroupResp struct { - CommResp + } type MuteGroupMemberReq struct { @@ -236,7 +236,7 @@ type MuteGroupMemberReq struct { MutedSeconds uint32 `json:"mutedSeconds" binding:"required"` } type MuteGroupMemberResp struct { - CommResp + } type CancelMuteGroupMemberReq struct { @@ -245,7 +245,7 @@ type CancelMuteGroupMemberReq struct { UserID string `json:"userID" binding:"required"` } type CancelMuteGroupMemberResp struct { - CommResp + } type MuteGroupReq struct { @@ -253,7 +253,7 @@ type MuteGroupReq struct { GroupID string `json:"groupID" binding:"required"` } type MuteGroupResp struct { - CommResp + } type CancelMuteGroupReq struct { @@ -261,7 +261,7 @@ type CancelMuteGroupReq struct { GroupID string `json:"groupID" binding:"required"` } type CancelMuteGroupResp struct { - CommResp + } type SetGroupMemberNicknameReq struct { @@ -272,7 +272,7 @@ type SetGroupMemberNicknameReq struct { } type SetGroupMemberNicknameResp struct { - CommResp + } type SetGroupMemberInfoReq struct { @@ -286,7 +286,7 @@ type SetGroupMemberInfoReq struct { } type SetGroupMemberInfoResp struct { - CommResp + } type GetGroupAbstractInfoReq struct { @@ -295,7 +295,7 @@ type GetGroupAbstractInfoReq struct { } type GetGroupAbstractInfoResp struct { - CommResp + GroupMemberNumber int32 `json:"groupMemberNumber"` GroupMemberListHash uint64 `json:"groupMemberListHash"` } diff --git a/pkg/apistruct/manage.go b/pkg/apistruct/manage.go index 018280bf9..4bf48d36e 100644 --- a/pkg/apistruct/manage.go +++ b/pkg/apistruct/manage.go @@ -9,14 +9,12 @@ type DeleteUsersReq struct { DeleteUserIDList []string `json:"deleteUserIDList" binding:"required"` } type DeleteUsersResp struct { - CommResp FailedUserIDList []string `json:"data"` } type GetAllUsersUidReq struct { OperationID string `json:"operationID" binding:"required"` } type GetAllUsersUidResp struct { - CommResp UserIDList []string `json:"data"` } type GetUsersOnlineStatusReq struct { @@ -24,7 +22,7 @@ type GetUsersOnlineStatusReq struct { UserIDList []string `json:"userIDList" binding:"required,lte=200"` } type GetUsersOnlineStatusResp struct { - CommResp + //SuccessResult []*msggateway.GetUsersOnlineStatusResp_SuccessResult `json:"data"` } type AccountCheckReq struct { @@ -32,7 +30,7 @@ type AccountCheckReq struct { CheckUserIDList []string `json:"checkUserIDList" binding:"required,lte=100"` } type AccountCheckResp struct { - CommResp + //ResultList []*pbUser.AccountCheckResp_SingleUserStatus `json:"data"` } @@ -69,7 +67,6 @@ type ManagementBatchSendMsgReq struct { } type ManagementBatchSendMsgResp struct { - CommResp Data struct { ResultList []*SingleReturnResult `json:"resultList"` FailedIDList []string @@ -87,7 +84,6 @@ type CheckMsgIsSendSuccessReq struct { } type CheckMsgIsSendSuccessResp struct { - CommResp Status int32 `json:"status"` } @@ -119,7 +115,6 @@ type CMSUser struct { } type GetUsersResp struct { - CommResp Data struct { UserList []*CMSUser `json:"userList"` TotalNum int32 `json:"totalNum"` diff --git a/pkg/apistruct/msg.go b/pkg/apistruct/msg.go index 0d5927350..4b9667413 100644 --- a/pkg/apistruct/msg.go +++ b/pkg/apistruct/msg.go @@ -12,7 +12,6 @@ type DelMsgReq struct { } type DelMsgResp struct { - CommResp } type CleanUpMsgReq struct { @@ -21,7 +20,6 @@ type CleanUpMsgReq struct { } type CleanUpMsgResp struct { - CommResp } type DelSuperGroupMsgReq struct { @@ -33,7 +31,6 @@ type DelSuperGroupMsgReq struct { } type DelSuperGroupMsgResp struct { - CommResp } type MsgDeleteNotificationElem struct { @@ -50,7 +47,6 @@ type SetMsgMinSeqReq struct { } type SetMsgMinSeqResp struct { - CommResp } type ModifyMessageReactionExtensionsReq struct { @@ -67,7 +63,6 @@ type ModifyMessageReactionExtensionsReq struct { } type ModifyMessageReactionExtensionsResp struct { - CommResp Data struct { ResultKeyValue []*msg.KeyValueResp `json:"result"` MsgFirstModifyTime int64 `json:"msgFirstModifyTime"` @@ -83,7 +78,6 @@ type ModifyMessageReactionExtensionsResp struct { //} type OperateMessageListReactionExtensionsResp struct { - CommResp Data struct { SuccessList []*msg.ExtendMsgResp `json:"successList"` FailedList []*msg.ExtendMsgResp `json:"failedList"` @@ -97,7 +91,6 @@ type SetMessageReactionExtensionsCallbackResp ModifyMessageReactionExtensionsRes //type GetMessageListReactionExtensionsReq OperateMessageListReactionExtensionsReq type GetMessageListReactionExtensionsResp struct { - CommResp Data []*msg.SingleMessageExtensionResult `json:"data"` } @@ -116,7 +109,6 @@ type DeleteMessageReactionExtensionsReq struct { } type DeleteMessageReactionExtensionsResp struct { - CommResp Data []*msg.KeyValueResp } diff --git a/pkg/apistruct/oss.go b/pkg/apistruct/oss.go index d1ecae757..55370d50c 100644 --- a/pkg/apistruct/oss.go +++ b/pkg/apistruct/oss.go @@ -16,7 +16,6 @@ type OSSCredentialRespData struct { } type OSSCredentialResp struct { - CommResp OssData OSSCredentialRespData `json:"-"` Data map[string]interface{} `json:"data"` } diff --git a/pkg/apistruct/third.go b/pkg/apistruct/third.go index 0be86b141..355700fee 100644 --- a/pkg/apistruct/third.go +++ b/pkg/apistruct/third.go @@ -29,7 +29,6 @@ type MinioUploadFile struct { } type MinioUploadFileResp struct { - CommResp Data struct { MinioUploadFile } `json:"data"` @@ -46,7 +45,6 @@ type UploadUpdateAppReq struct { } type UploadUpdateAppResp struct { - CommResp } type GetDownloadURLReq struct { @@ -56,7 +54,6 @@ type GetDownloadURLReq struct { } type GetDownloadURLResp struct { - CommResp Data struct { HasNewVersion bool `json:"hasNewVersion"` ForceUpdate bool `json:"forceUpdate"` @@ -73,7 +70,6 @@ type GetRTCInvitationInfoReq struct { } type GetRTCInvitationInfoResp struct { - CommResp Data struct { OpUserID string `json:"opUserID"` Invitation struct { @@ -110,7 +106,6 @@ type FcmUpdateTokenReq struct { } type FcmUpdateTokenResp struct { - CommResp } type SetAppBadgeReq struct { OperationID string `json:"operationID" binding:"required"` @@ -119,5 +114,4 @@ type SetAppBadgeReq struct { } type SetAppBadgeResp struct { - CommResp } diff --git a/pkg/common/db/table/unrelation/msg.go b/pkg/common/db/table/unrelation/msg.go index 270e69626..78aab60cc 100644 --- a/pkg/common/db/table/unrelation/msg.go +++ b/pkg/common/db/table/unrelation/msg.go @@ -10,7 +10,7 @@ import ( const ( singleGocMsgNum = 5000 - msg = "msg" + Msg = "msg" OldestList = 0 NewestList = -1 ) @@ -38,7 +38,7 @@ type MsgDocModelInterface interface { } func (MsgDocModel) TableName() string { - return msg + return Msg } func (MsgDocModel) GetSingleGocMsgNum() int64 { diff --git a/pkg/common/db/unrelation/mongo.go b/pkg/common/db/unrelation/mongo.go index 3543ade76..7b68021d8 100644 --- a/pkg/common/db/unrelation/mongo.go +++ b/pkg/common/db/unrelation/mongo.go @@ -61,7 +61,7 @@ func (m *Mongo) GetDatabase() *mongo.Database { } func (m *Mongo) CreateMsgIndex() error { - return m.createMongoIndex(unrelation.CChat, false, "uid") + return m.createMongoIndex(unrelation.Msg, false, "uid") } func (m *Mongo) CreateSuperGroupIndex() error { diff --git a/pkg/discoveryregistry/discovery_register.go b/pkg/discoveryregistry/discovery_register.go index 45d2ff2ea..78922f2a0 100644 --- a/pkg/discoveryregistry/discovery_register.go +++ b/pkg/discoveryregistry/discovery_register.go @@ -9,6 +9,7 @@ type SvcDiscoveryRegistry interface { UnRegister() error GetConns(serviceName string, opts ...grpc.DialOption) ([]*grpc.ClientConn, error) GetConn(serviceName string, opts ...grpc.DialOption) (*grpc.ClientConn, error) + AddOption(opts ...grpc.DialOption) RegisterConf2Registry(key string, conf []byte) error GetConfFromRegistry(key string) ([]byte, error) From a87a8c1fb31ad7b01e90d1e1609c28fedfe6776e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 17:29:27 +0800 Subject: [PATCH 03/40] cobra --- pkg/apistruct/group.go | 30 ------------------------------ 1 file changed, 30 deletions(-) diff --git a/pkg/apistruct/group.go b/pkg/apistruct/group.go index 5009a5f64..804d8e8b3 100644 --- a/pkg/apistruct/group.go +++ b/pkg/apistruct/group.go @@ -4,16 +4,6 @@ import ( sdkws "OpenIM/pkg/proto/sdkws" ) -type struct { - ErrCode int32 `json:"errCode"` - ErrMsg string `json:"errMsg"` -} - -type CommDataResp struct { - - Data []map[string]interface{} `json:"data"` -} - type KickGroupMemberReq struct { GroupID string `json:"groupID" binding:"required"` KickedUserIDList []string `json:"kickedUserIDList" binding:"required"` @@ -31,7 +21,6 @@ type GetGroupMembersInfoReq struct { OperationID string `json:"operationID" binding:"required"` } type GetGroupMembersInfoResp struct { - MemberList []*sdkws.GroupMemberFullInfo `json:"-"` Data []map[string]interface{} `json:"data" swaggerignore:"true"` } @@ -52,7 +41,6 @@ type GetJoinedGroupListReq struct { FromUserID string `json:"fromUserID" binding:"required"` } type GetJoinedGroupListResp struct { - GroupInfoList []*sdkws.GroupInfo `json:"-"` Data []map[string]interface{} `json:"data" swaggerignore:"true"` } @@ -64,7 +52,6 @@ type GetGroupMemberListReq struct { OperationID string `json:"operationID"` } type GetGroupMemberListResp struct { - NextSeq int32 `json:"nextSeq"` MemberList []*sdkws.GroupMemberFullInfo `json:"-"` Data []map[string]interface{} `json:"data" swaggerignore:"true"` @@ -77,7 +64,6 @@ type GetGroupAllMemberReq struct { Count int32 `json:"count"` } type GetGroupAllMemberResp struct { - MemberList []*sdkws.GroupMemberFullInfo `json:"-"` Data []map[string]interface{} `json:"data" swaggerignore:"true"` } @@ -108,7 +94,6 @@ type CreateGroupReq struct { GroupID string `json:"groupID"` } type CreateGroupResp struct { - GroupInfo sdkws.GroupInfo `json:"-"` Data map[string]interface{} `json:"data" swaggerignore:"true"` } @@ -118,7 +103,6 @@ type GetGroupApplicationListReq struct { FromUserID string `json:"fromUserID" binding:"required"` //作为管理员或群主收到的 进群申请 } type GetGroupApplicationListResp struct { - GroupRequestList []*sdkws.GroupRequest `json:"-"` Data []map[string]interface{} `json:"data" swaggerignore:"true"` } @@ -137,7 +121,6 @@ type GetGroupInfoReq struct { OperationID string `json:"operationID" binding:"required"` } type GetGroupInfoResp struct { - GroupInfoList []*sdkws.GroupInfo `json:"-"` Data []map[string]interface{} `json:"data" swaggerignore:"true"` } @@ -171,7 +154,6 @@ type ApplicationGroupResponseReq struct { HandleResult int32 `json:"handleResult" binding:"required,oneof=-1 1"` } type ApplicationGroupResponseResp struct { - } type JoinGroupReq struct { @@ -183,7 +165,6 @@ type JoinGroupReq struct { } type JoinGroupResp struct { - } type QuitGroupReq struct { @@ -191,7 +172,6 @@ type QuitGroupReq struct { OperationID string `json:"operationID" binding:"required"` } type QuitGroupResp struct { - } type SetGroupInfoReq struct { @@ -208,7 +188,6 @@ type SetGroupInfoReq struct { } type SetGroupInfoResp struct { - } type TransferGroupOwnerReq struct { @@ -218,7 +197,6 @@ type TransferGroupOwnerReq struct { OperationID string `json:"operationID" binding:"required"` } type TransferGroupOwnerResp struct { - } type DismissGroupReq struct { @@ -226,7 +204,6 @@ type DismissGroupReq struct { OperationID string `json:"operationID" binding:"required"` } type DismissGroupResp struct { - } type MuteGroupMemberReq struct { @@ -236,7 +213,6 @@ type MuteGroupMemberReq struct { MutedSeconds uint32 `json:"mutedSeconds" binding:"required"` } type MuteGroupMemberResp struct { - } type CancelMuteGroupMemberReq struct { @@ -245,7 +221,6 @@ type CancelMuteGroupMemberReq struct { UserID string `json:"userID" binding:"required"` } type CancelMuteGroupMemberResp struct { - } type MuteGroupReq struct { @@ -253,7 +228,6 @@ type MuteGroupReq struct { GroupID string `json:"groupID" binding:"required"` } type MuteGroupResp struct { - } type CancelMuteGroupReq struct { @@ -261,7 +235,6 @@ type CancelMuteGroupReq struct { GroupID string `json:"groupID" binding:"required"` } type CancelMuteGroupResp struct { - } type SetGroupMemberNicknameReq struct { @@ -272,7 +245,6 @@ type SetGroupMemberNicknameReq struct { } type SetGroupMemberNicknameResp struct { - } type SetGroupMemberInfoReq struct { @@ -286,7 +258,6 @@ type SetGroupMemberInfoReq struct { } type SetGroupMemberInfoResp struct { - } type GetGroupAbstractInfoReq struct { @@ -295,7 +266,6 @@ type GetGroupAbstractInfoReq struct { } type GetGroupAbstractInfoResp struct { - GroupMemberNumber int32 `json:"groupMemberNumber"` GroupMemberListHash uint64 `json:"groupMemberListHash"` } From 4beb3483333061fba31bff4a0ce71798966cc4da Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 17:48:14 +0800 Subject: [PATCH 04/40] cobra --- internal/msgtransfer/online_history_msg_handler.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/msgtransfer/online_history_msg_handler.go b/internal/msgtransfer/online_history_msg_handler.go index 416474efa..2c470ef4a 100644 --- a/internal/msgtransfer/online_history_msg_handler.go +++ b/internal/msgtransfer/online_history_msg_handler.go @@ -242,7 +242,7 @@ func (och *OnlineHistoryRedisConsumerHandler) ConsumeClaim(sess sarama.ConsumerG func (och *OnlineHistoryRedisConsumerHandler) sendMessageToPushMQ(ctx context.Context, message *pbMsg.MsgDataToMQ, pushToUserID string) { mqPushMsg := pbMsg.PushMsgDataToMQ{MsgData: message.MsgData, SourceID: pushToUserID} - pid, offset, err := och.producerToPush.SendMessage(ctx, &mqPushMsg, mqPushMsg.SourceID) + pid, offset, err := och.producerToPush.SendMessage(ctx, mqPushMsg.SourceID, &mqPushMsg) if err != nil { log.Error(tracelog.GetOperationID(ctx), "kafka send failed", "send data", message.String(), "pid", pid, "offset", offset, "err", err.Error()) } @@ -251,7 +251,7 @@ func (och *OnlineHistoryRedisConsumerHandler) sendMessageToPushMQ(ctx context.Co func (och *OnlineHistoryRedisConsumerHandler) sendMessageToModifyMQ(ctx context.Context, aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ) { if len(messages) > 0 { - pid, offset, err := och.producerToModify.SendMessage(ctx, &pbMsg.MsgDataToModifyByMQ{AggregationID: aggregationID, Messages: messages, TriggerID: triggerID}, aggregationID) + pid, offset, err := och.producerToModify.SendMessage(ctx, aggregationID, &pbMsg.MsgDataToModifyByMQ{AggregationID: aggregationID, Messages: messages, TriggerID: triggerID}) if err != nil { log.Error(triggerID, "kafka send failed", "send data", len(messages), "pid", pid, "offset", offset, "err", err.Error(), "key", aggregationID) } @@ -260,7 +260,7 @@ func (och *OnlineHistoryRedisConsumerHandler) sendMessageToModifyMQ(ctx context. func (och *OnlineHistoryRedisConsumerHandler) SendMessageToMongoCH(ctx context.Context, aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq int64) { if len(messages) > 0 { - pid, offset, err := och.producerToMongo.SendMessage(ctx, &pbMsg.MsgDataToMongoByMQ{LastSeq: lastSeq, AggregationID: aggregationID, Messages: messages, TriggerID: triggerID}, aggregationID) + pid, offset, err := och.producerToMongo.SendMessage(ctx, aggregationID, &pbMsg.MsgDataToMongoByMQ{LastSeq: lastSeq, AggregationID: aggregationID, Messages: messages, TriggerID: triggerID}) if err != nil { log.Error(triggerID, "kafka send failed", "send data", len(messages), "pid", pid, "offset", offset, "err", err.Error(), "key", aggregationID) } From 4c4a8341c4d1c969cbd345c82d9ea3e0262bbd5e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 17:50:43 +0800 Subject: [PATCH 05/40] cobra --- pkg/common/cmd/msg_gateway.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/common/cmd/msg_gateway.go b/pkg/common/cmd/msg_gateway.go index 775708e84..9573b1616 100644 --- a/pkg/common/cmd/msg_gateway.go +++ b/pkg/common/cmd/msg_gateway.go @@ -1,7 +1,7 @@ package cmd import ( - "OpenIM/internal/msggateway" + //"OpenIM/internal/msggateway" "OpenIM/pkg/common/constant" "github.com/spf13/cobra" ) @@ -25,8 +25,8 @@ func (m *MsgGatewayCmd) getWsPortFlag(cmd *cobra.Command) int { func (m *MsgGatewayCmd) addRun() { m.Command.Run = func(cmd *cobra.Command, args []string) { - msggateway.Init(m.getPortFlag(cmd), m.getWsPortFlag(cmd)) - msggateway.Run(m.getPrometheusPortFlag(cmd)) + //msggateway.Init(m.getPortFlag(cmd), m.getWsPortFlag(cmd)) + //msggateway.Run(m.getPrometheusPortFlag(cmd)) } } From 1043142970391caf08a86e5028f375887603a207 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 18:19:56 +0800 Subject: [PATCH 06/40] cobra --- pkg/common/cmd/root.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/cmd/root.go b/pkg/common/cmd/root.go index c7fcd1995..990a4b68b 100644 --- a/pkg/common/cmd/root.go +++ b/pkg/common/cmd/root.go @@ -51,7 +51,7 @@ func (r *RootCmd) getPortFlag(cmd *cobra.Command) int { } func (r *RootCmd) AddPrometheusPortFlag() { - r.Command.Flags().StringP(constant.FlagPrometheusPort, "pp", "", "server prometheus listen port") + r.Command.Flags().String(constant.FlagPrometheusPort, "", "server prometheus listen port") } func (r *RootCmd) getPrometheusPortFlag(cmd *cobra.Command) int { From 74ba5ba614f51393f2741fd0ab182255bb4cced9 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 18:30:20 +0800 Subject: [PATCH 07/40] script --- script/msg_transfer_start.sh | 2 +- script/push_start.sh | 2 +- script/start_rpc_service.sh | 8 ++++++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/script/msg_transfer_start.sh b/script/msg_transfer_start.sh index 746cf3342..e4f703fcd 100755 --- a/script/msg_transfer_start.sh +++ b/script/msg_transfer_start.sh @@ -25,7 +25,7 @@ for ((i = 0; i < ${msg_transfer_service_num}; i++)); do prome_port=${prome_ports[$i]} cmd="nohup ./${msg_transfer_name}" if [ $prome_port != "" ]; then - cmd="$cmd -prometheus_port $prome_port" + cmd="$cmd --prometheus_port $prome_port" fi $cmd >>../logs/openIM.log 2>&1 & done diff --git a/script/push_start.sh b/script/push_start.sh index cbaffe7be..8c9998bee 100644 --- a/script/push_start.sh +++ b/script/push_start.sh @@ -25,7 +25,7 @@ sleep 1 cd ${push_binary_root} for ((i = 0; i < ${#rpc_ports[@]}; i++)); do - nohup ./${push_name} -port ${rpc_ports[$i]} -prometheus_port ${prome_ports[$i]} >>../logs/openIM.log 2>&1 & + nohup ./${push_name} --port ${rpc_ports[$i]} --prometheus_port ${prome_ports[$i]} >>../logs/openIM.log 2>&1 & done sleep 3 diff --git a/script/start_rpc_service.sh b/script/start_rpc_service.sh index 4f8f22508..d30511f8d 100644 --- a/script/start_rpc_service.sh +++ b/script/start_rpc_service.sh @@ -70,9 +70,13 @@ for ((i = 0; i < ${#service_filename[*]}; i++)); do #Start related rpc services based on the number of ports for ((j = 0; j < ${#service_ports[*]}; j++)); do #Start the service in the background - cmd="./${service_filename[$i]} -port ${service_ports[$j]} -prometheus_port ${prome_ports[$j]}" + if [ -z "${prome_ports[$j]}" ]; then + cmd="./${service_filename[$i]} --port ${service_ports[$j]}" + else + cmd="./${service_filename[$i]} --port ${service_ports[$j]} --prometheus_port ${prome_ports[$j]}" + fi if [ $i -eq 0 -o $i -eq 1 ]; then - cmd="./${service_filename[$i]} -port ${service_ports[$j]}" + cmd="./${service_filename[$i]} --port ${service_ports[$j]}" fi echo $cmd nohup $cmd >>../logs/openIM.log 2>&1 & From 540c33ba74942b98091e90cde6b7a9fa33549adb Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 18:38:35 +0800 Subject: [PATCH 08/40] script --- cmd/api/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/api/main.go b/cmd/api/main.go index c3b8ad9ac..0efcf56b9 100644 --- a/cmd/api/main.go +++ b/cmd/api/main.go @@ -28,7 +28,7 @@ func run(port int) error { if port == 0 { port = config.Config.Api.GinPort[0] } - zk, err := openKeeper.NewClient(config.Config.Zookeeper.ZkAddr, "", 10, config.Config.Zookeeper.UserName, config.Config.Zookeeper.Password) + zk, err := openKeeper.NewClient(config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema, 10, config.Config.Zookeeper.UserName, config.Config.Zookeeper.Password) if err != nil { return err } From 52e03b0149aca583e2037a55b318d67e3977744d Mon Sep 17 00:00:00 2001 From: Gordon <1432970085@qq.com> Date: Wed, 8 Mar 2023 18:39:18 +0800 Subject: [PATCH 09/40] gateway update --- cmd/Open-IM-SDK-Core | 2 +- cmd/msggateway/main.go | 14 +- go.sum | 74 +-- internal/msggateway/batch_push.go | 108 ---- internal/msggateway/{new => }/client.go | 93 ++-- internal/msggateway/{new => }/compressor.go | 2 +- internal/msggateway/constant.go | 27 + internal/msggateway/{new => }/context.go | 6 +- internal/msggateway/{new => }/encoder.go | 2 +- internal/msggateway/{new => }/http_error.go | 2 +- internal/msggateway/hub_server.go | 173 ++++++ internal/msggateway/init.go | 48 -- internal/msggateway/logic.go | 404 -------------- internal/msggateway/{new => }/long_conn.go | 2 +- .../msggateway/{new => }/message_handler.go | 7 +- internal/msggateway/{new => }/n_ws_server.go | 88 +-- internal/msggateway/new/constant.go | 12 - internal/msggateway/{new => }/options.go | 2 +- internal/msggateway/relay_rpc_server.go | 373 ------------- internal/msggateway/{new => }/user_map.go | 17 +- internal/msggateway/validate.go | 125 ----- internal/msggateway/ws_server.go | 514 ------------------ pkg/common/constant/constant.go | 10 - pkg/common/tokenverify/jwt_token.go | 3 + 24 files changed, 336 insertions(+), 1772 deletions(-) delete mode 100644 internal/msggateway/batch_push.go rename internal/msggateway/{new => }/client.go (64%) rename internal/msggateway/{new => }/compressor.go (98%) create mode 100644 internal/msggateway/constant.go rename internal/msggateway/{new => }/context.go (92%) rename internal/msggateway/{new => }/encoder.go (97%) rename internal/msggateway/{new => }/http_error.go (98%) create mode 100644 internal/msggateway/hub_server.go delete mode 100644 internal/msggateway/init.go delete mode 100644 internal/msggateway/logic.go rename internal/msggateway/{new => }/long_conn.go (99%) rename internal/msggateway/{new => }/message_handler.go (97%) rename internal/msggateway/{new => }/n_ws_server.go (69%) delete mode 100644 internal/msggateway/new/constant.go rename internal/msggateway/{new => }/options.go (97%) delete mode 100644 internal/msggateway/relay_rpc_server.go rename internal/msggateway/{new => }/user_map.go (79%) delete mode 100644 internal/msggateway/validate.go delete mode 100644 internal/msggateway/ws_server.go diff --git a/cmd/Open-IM-SDK-Core b/cmd/Open-IM-SDK-Core index 1667b0f4e..48fd66a6e 160000 --- a/cmd/Open-IM-SDK-Core +++ b/cmd/Open-IM-SDK-Core @@ -1 +1 @@ -Subproject commit 1667b0f4e205fc4ed7c690ab55b662087d61c277 +Subproject commit 48fd66a6eea7ff4c5ccacddd7929bf8d7b5b40fa diff --git a/cmd/msggateway/main.go b/cmd/msggateway/main.go index 8c3920c6b..e2f2a7af8 100644 --- a/cmd/msggateway/main.go +++ b/cmd/msggateway/main.go @@ -8,6 +8,7 @@ import ( "flag" "fmt" "sync" + "time" ) func main() { @@ -25,7 +26,16 @@ func main() { var wg sync.WaitGroup wg.Add(1) fmt.Println("start rpc/msg_gateway server, port: ", *rpcPort, *wsPort, *prometheusPort, ", OpenIM version: ", constant.CurrentVersion, "\n") - msggateway.Init(*rpcPort, *wsPort) - msggateway.Run(*prometheusPort) + longServer, err := msggateway.NewWsServer( + msggateway.WithPort(*wsPort), + msggateway.WithMaxConnNum(int64(config.Config.LongConnSvr.WebsocketMaxConnNum)), + msggateway.WithHandshakeTimeout(time.Duration(config.Config.LongConnSvr.WebsocketTimeOut)*time.Second), + msggateway.WithMessageMaxMsgLength(config.Config.LongConnSvr.WebsocketMaxMsgLen)) + if err != nil { + panic(err.Error()) + } + hubServer := msggateway.NewServer(*rpcPort, longServer) + go hubServer.Start() + go hubServer.LongConnServer.Run() wg.Wait() } diff --git a/go.sum b/go.sum index 46f64632b..af4db310f 100644 --- a/go.sum +++ b/go.sum @@ -26,7 +26,6 @@ cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+Y cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= @@ -39,7 +38,6 @@ cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= -cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= @@ -82,7 +80,6 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= -cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= @@ -145,7 +142,6 @@ cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4c cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= @@ -167,7 +163,6 @@ cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1 cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= -cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= @@ -195,7 +190,6 @@ cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZ cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= -cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= @@ -208,7 +202,6 @@ cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+ cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= -cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= @@ -217,13 +210,11 @@ cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiP cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= -cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -272,9 +263,6 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= -cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= -cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= @@ -329,7 +317,6 @@ cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5 cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= -cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= @@ -370,7 +357,6 @@ cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= -cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= @@ -389,8 +375,8 @@ firebase.google.com/go v3.13.0+incompatible/go.mod h1:xlah6XbEyW6tbfSklcfe5FHJIw github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenIMSDK/openKeeper v0.0.1 h1:JOz2nEcM/C7PeTnPnfIoYoaFA1X9BVt9W5OWNCDrNlo= -github.com/OpenIMSDK/openKeeper v0.0.1/go.mod h1:RvyRXEcvWbonkmHLtT8KxGSCNlXY7OfDohhu53E6INU= +github.com/OpenIMSDK/openKeeper v0.0.2 h1:TlYBlWcNPO9vWK65jjoI0R3cgpY3bfgHJiDUhdb3Qxk= +github.com/OpenIMSDK/openKeeper v0.0.2/go.mod h1:RvyRXEcvWbonkmHLtT8KxGSCNlXY7OfDohhu53E6INU= github.com/OpenIMSDK/open_utils v1.0.8 h1:IopxWgJwEF5ZAPsRuiZZOfcxNOQOCt/p8VDENcHN9r4= github.com/OpenIMSDK/open_utils v1.0.8/go.mod h1:FLoaQblWUVKQgqt2LrNzfSZLT6D3DICBn1kcOMDLUOI= github.com/Shopify/sarama v1.29.0 h1:ARid8o8oieau9XrHI55f/L3EoRAhm9px6sonbD7yuUE= @@ -413,8 +399,6 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= @@ -463,13 +447,10 @@ github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/frankban/quicktest v1.11.3 h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/gin-gonic/gin v1.8.2 h1:UzKToD9/PoFj/V4rvlKqTRKnQYyz8Sc1MJlv4JHPtvY= github.com/gin-gonic/gin v1.8.2/go.mod h1:qw5AYuDrzRTnhvusDsrov+fDIxp9Dleuu12h8nfB398= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -492,7 +473,6 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= @@ -502,11 +482,8 @@ github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfC github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg= github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= -github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -585,12 +562,10 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -610,7 +585,6 @@ github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMd github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= @@ -622,7 +596,6 @@ github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2I github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= @@ -660,13 +633,11 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.12.2/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= @@ -695,8 +666,6 @@ github.com/lithammer/shortuuid v3.0.0+incompatible h1:NcD0xWW/MZYXEHa6ITy6kaXN5n github.com/lithammer/shortuuid v3.0.0+incompatible/go.mod h1:FR74pbAuElzOUuenUHTK2Tciko1/vKuIKS9dSkDrA4w= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= @@ -725,24 +694,12 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/olivere/elastic/v7 v7.0.23 h1:b7tjMogDMhf2CisGI+L02LXLVa0ZyE82Z15XfW1e8t8= github.com/olivere/elastic/v7 v7.0.23/go.mod h1:OuWmD2DiuYhddWegBKPWQuelVKBLrW0fa/VUYgxuGTY= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/pierrec/lz4 v2.6.0+incompatible h1:Ix9yFKn1nSPBLFl/yZknTp8TU5G4Ps0JDmguYK6iH1A= @@ -797,13 +754,10 @@ github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414/go.mod h1:gi+0 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/gunit v1.4.2/go.mod h1:ZjM1ozSIMJlAz/ay4SG8PeKF00ckUp+zMHZXV9/bvak= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= @@ -828,9 +782,6 @@ github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20210325043845-84a0811633ca h1:G github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20210325043845-84a0811633ca/go.mod h1:b18KQa4IxHbxeseW1GcZox53d7J0z39VNONTxvvlkXw= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= -github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ugorji/go/codec v1.2.8 h1:sgBJS6COt0b/P40VouWKdseidkDgHxYGm0SAglUHfP0= github.com/ugorji/go/codec v1.2.8/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= @@ -870,7 +821,6 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= @@ -887,7 +837,6 @@ golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EH golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20220902085622-e7cb96979f69/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY= golang.org/x/image v0.3.0 h1:HTDXbdK9bjfSWkPzDJIw89W8CAtfFGduujWs33NLLsg= golang.org/x/image v0.3.0/go.mod h1:fXd9211C/0VTlYuAcOhW8dY/RtEJqODXOWBDpmYBf+A= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -916,7 +865,6 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -939,7 +887,6 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -953,7 +900,6 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210427231257-85d9c07bbe3a/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -1016,7 +962,6 @@ golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1027,11 +972,8 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1055,7 +997,6 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1100,7 +1041,6 @@ golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXR golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1118,7 +1058,6 @@ golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1127,7 +1066,6 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1168,7 +1106,6 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= @@ -1350,10 +1287,7 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= -google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -1391,7 +1325,6 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.52.3 h1:pf7sOysg4LdgBqduXveGKrcEwbStiK2rtfghdzlUYDQ= google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -1418,12 +1351,9 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/internal/msggateway/batch_push.go b/internal/msggateway/batch_push.go deleted file mode 100644 index ea2b138a7..000000000 --- a/internal/msggateway/batch_push.go +++ /dev/null @@ -1,108 +0,0 @@ -package msggateway - -import ( - "OpenIM/pkg/common/log" - pbChat "OpenIM/pkg/proto/msg" - sdkws "OpenIM/pkg/proto/sdkws" - "OpenIM/pkg/utils" - "context" - "google.golang.org/grpc" -) - -var MaxPullMsgNum = 100 - -func (r *RPCServer) GenPullSeqList(currentSeq uint32, operationID string, userID string) ([]uint32, error) { - maxSeq, err := db.DB.GetUserMaxSeq(userID) - if err != nil { - log.Error(operationID, "GetUserMaxSeq failed ", userID, err.Error()) - return nil, utils.Wrap(err, "") - } - - var seqList []uint32 - num := 0 - for i := currentSeq + 1; i < uint32(maxSeq); i++ { - seqList = append(seqList, i) - num++ - if num == MaxPullMsgNum { - break - } - } - log.Info(operationID, "GenPullSeqList ", seqList, "current seq", currentSeq) - return seqList, nil -} - -func (r *RPCServer) GetSingleUserMsgForPushPlatforms(operationID string, msgData *sdkws.MsgData, pushToUserID string, platformIDList []int) map[int]*sdkws.MsgDataList { - user2PushMsg := make(map[int]*sdkws.MsgDataList, 0) - for _, v := range platformIDList { - user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, pushToUserID, v) - //log.Info(operationID, "GetSingleUserMsgForPush", msgData.Seq, pushToUserID, v, "len:", len(user2PushMsg[v])) - } - return user2PushMsg -} - -func (r *RPCServer) GetSingleUserMsgForPush(operationID string, msgData *sdkws.MsgData, pushToUserID string, platformID int) *sdkws.MsgDataList { - //msgData.MsgDataList = nil - return &sdkws.MsgDataList{MsgDataList: []*sdkws.MsgData{msgData}} - - //userConn := ws.getUserConn(pushToUserID, platformID) - //if userConn == nil { - // log.Debug(operationID, "userConn == nil") - // return []*sdkws.MsgData{msgData} - //} - // - //if msgData.Seq <= userConn.PushedMaxSeq { - // log.Debug(operationID, "msgData.Seq <= userConn.PushedMaxSeq", msgData.Seq, userConn.PushedMaxSeq) - // return nil - //} - // - //msgList := r.GetSingleUserMsg(operationID, msgData.Seq, pushToUserID) - //if msgList == nil { - // log.Debug(operationID, "GetSingleUserMsg msgList == nil", msgData.Seq, userConn.PushedMaxSeq) - // userConn.PushedMaxSeq = msgData.Seq - // return []*sdkws.MsgData{msgData} - //} - //msgList = append(msgList, msgData) - // - //for _, v := range msgList { - // if v.Seq > userConn.PushedMaxSeq { - // userConn.PushedMaxSeq = v.Seq - // } - //} - //log.Debug(operationID, "GetSingleUserMsg msgList len ", len(msgList), userConn.PushedMaxSeq) - //return msgList -} - -func (r *RPCServer) GetSingleUserMsg(operationID string, currentMsgSeq uint32, userID string) []*sdkws.MsgData { - seqs, err := r.GenPullSeqList(currentMsgSeq, operationID, userID) - if err != nil { - log.Error(operationID, "GenPullSeqList failed ", err.Error(), currentMsgSeq, userID) - return nil - } - if len(seqs) == 0 { - log.Error(operationID, "GenPullSeqList len == 0 ", currentMsgSeq, userID) - return nil - } - rpcReq := sdkws.PullMessageBySeqsReq{} - //rpcReq.Seqs = seqs - rpcReq.UserID = userID - var grpcConn *grpc.ClientConn - - msgClient := pbChat.NewMsgClient(grpcConn) - reply, err := msgClient.PullMessageBySeqs(context.Background(), &rpcReq) - if err != nil { - log.Error(operationID, "PullMessageBySeqList failed ", err.Error(), rpcReq.String()) - return nil - } - if len(reply.List) == 0 { - return nil - } - return reply.List -} - -//func (r *RPCServer) GetBatchUserMsgForPush(operationID string, msgData *sdkws.MsgData, pushToUserIDList []string, platformID int) map[string][]*sdkws.MsgData { -// user2PushMsg := make(map[string][]*sdkws.MsgData, 0) -// for _, v := range pushToUserIDList { -// user2PushMsg[v] = r.GetSingleUserMsgForPush(operationID, msgData, v, platformID) -// } -// return user2PushMsg -//} diff --git a/internal/msggateway/new/client.go b/internal/msggateway/client.go similarity index 64% rename from internal/msggateway/new/client.go rename to internal/msggateway/client.go index 5af2d4f1c..369a4d84c 100644 --- a/internal/msggateway/new/client.go +++ b/internal/msggateway/client.go @@ -1,12 +1,11 @@ -package new +package msggateway import ( - "OpenIM/pkg/common/constant" + "OpenIM/pkg/proto/sdkws" "OpenIM/pkg/utils" "context" "errors" "fmt" - "github.com/go-playground/validator/v10" "runtime/debug" "sync" ) @@ -39,45 +38,30 @@ type Client struct { isBackground bool connID string onlineAt int64 // 上线时间戳(毫秒) - handler MessageHandler - unregisterChan chan *Client - compressor Compressor - encoder Encoder - validate *validator.Validate + longConnServer LongConnServer closed bool } -func newClient(ctx *UserConnContext, conn LongConn, isCompress bool, compressor Compressor, encoder Encoder, - handler MessageHandler, unregisterChan chan *Client, validate *validator.Validate) *Client { +func newClient(ctx *UserConnContext, conn LongConn, isCompress bool) *Client { return &Client{ - w: new(sync.Mutex), - conn: conn, - platformID: utils.StringToInt(ctx.GetPlatformID()), - isCompress: isCompress, - userID: ctx.GetUserID(), - compressor: compressor, - encoder: encoder, - connID: ctx.GetConnID(), - onlineAt: utils.GetCurrentTimestampByMill(), - handler: handler, - unregisterChan: unregisterChan, - validate: validate, + w: new(sync.Mutex), + conn: conn, + platformID: utils.StringToInt(ctx.GetPlatformID()), + isCompress: isCompress, + userID: ctx.GetUserID(), + connID: ctx.GetConnID(), + onlineAt: utils.GetCurrentTimestampByMill(), } } -func (c *Client) ResetClient(ctx *UserConnContext, conn LongConn, isCompress bool, compressor Compressor, encoder Encoder, - handler MessageHandler, unregisterChan chan *Client, validate *validator.Validate) { +func (c *Client) ResetClient(ctx *UserConnContext, conn LongConn, isCompress bool, longConnServer LongConnServer) { c.w = new(sync.Mutex) c.conn = conn c.platformID = utils.StringToInt(ctx.GetPlatformID()) c.isCompress = isCompress c.userID = ctx.GetUserID() - c.compressor = compressor - c.encoder = encoder c.connID = ctx.GetConnID() c.onlineAt = utils.GetCurrentTimestampByMill() - c.handler = handler - c.unregisterChan = unregisterChan - c.validate = validate + c.longConnServer = longConnServer } func (c *Client) readMessage() { defer func() { @@ -117,41 +101,41 @@ func (c *Client) readMessage() { func (c *Client) handleMessage(message []byte) error { if c.isCompress { var decompressErr error - message, decompressErr = c.compressor.DeCompress(message) + message, decompressErr = c.longConnServer.DeCompress(message) if decompressErr != nil { return utils.Wrap(decompressErr, "") } } var binaryReq Req - err := c.encoder.Decode(message, &binaryReq) + err := c.longConnServer.Decode(message, &binaryReq) if err != nil { return utils.Wrap(err, "") } - if err := c.validate.Struct(binaryReq); err != nil { + if err := c.longConnServer.Validate(binaryReq); err != nil { return utils.Wrap(err, "") } if binaryReq.SendID != c.userID { return errors.New("exception conn userID not same to req userID") } ctx := context.Background() - ctx = context.WithValue(ctx, CONN_ID, c.connID) - ctx = context.WithValue(ctx, OPERATION_ID, binaryReq.OperationID) - ctx = context.WithValue(ctx, COMMON_USERID, binaryReq.SendID) - ctx = context.WithValue(ctx, PLATFORM_ID, c.platformID) + ctx = context.WithValue(ctx, ConnID, c.connID) + ctx = context.WithValue(ctx, OperationID, binaryReq.OperationID) + ctx = context.WithValue(ctx, CommonUserID, binaryReq.SendID) + ctx = context.WithValue(ctx, PlatformID, c.platformID) var messageErr error var resp []byte switch binaryReq.ReqIdentifier { - case constant.WSGetNewestSeq: - resp, messageErr = c.handler.GetSeq(ctx, binaryReq) - case constant.WSSendMsg: - resp, messageErr = c.handler.SendMessage(ctx, binaryReq) - case constant.WSSendSignalMsg: - resp, messageErr = c.handler.SendSignalMessage(ctx, binaryReq) - case constant.WSPullMsgBySeqList: - resp, messageErr = c.handler.PullMessageBySeqList(ctx, binaryReq) - case constant.WsLogoutMsg: - resp, messageErr = c.handler.UserLogout(ctx, binaryReq) - case constant.WsSetBackgroundStatus: + case WSGetNewestSeq: + resp, messageErr = c.longConnServer.GetSeq(ctx, binaryReq) + case WSSendMsg: + resp, messageErr = c.longConnServer.SendMessage(ctx, binaryReq) + case WSSendSignalMsg: + resp, messageErr = c.longConnServer.SendSignalMessage(ctx, binaryReq) + case WSPullMsgBySeqList: + resp, messageErr = c.longConnServer.PullMessageBySeqList(ctx, binaryReq) + case WsLogoutMsg: + resp, messageErr = c.longConnServer.UserLogout(ctx, binaryReq) + case WsSetBackgroundStatus: resp, messageErr = c.setAppBackgroundStatus(ctx, binaryReq) default: return errors.New(fmt.Sprintf("ReqIdentifier failed,sendID:%d,msgIncr:%s,reqIdentifier:%s", binaryReq.SendID, binaryReq.MsgIncr, binaryReq.ReqIdentifier)) @@ -161,7 +145,7 @@ func (c *Client) handleMessage(message []byte) error { } func (c *Client) setAppBackgroundStatus(ctx context.Context, req Req) ([]byte, error) { - resp, isBackground, messageErr := c.handler.SetUserDeviceBackground(ctx, req) + resp, isBackground, messageErr := c.longConnServer.SetUserDeviceBackground(ctx, req) if messageErr != nil { return nil, messageErr } @@ -174,7 +158,7 @@ func (c *Client) close() { c.w.Lock() defer c.w.Unlock() c.conn.Close() - c.unregisterChan <- c + c.longConnServer.UnRegister(c) } func (c *Client) replyMessage(binaryReq *Req, err error, resp []byte) { @@ -186,6 +170,13 @@ func (c *Client) replyMessage(binaryReq *Req, err error, resp []byte) { } _ = c.writeMsg(mReply) } +func (c *Client) PushMessage(ctx context.Context, msgData *sdkws.MsgData) error { + return nil +} + +func (c *Client) KickOnlineMessage(ctx context.Context) error { + return nil +} func (c *Client) writeMsg(resp Resp) error { c.w.Lock() @@ -195,14 +186,14 @@ func (c *Client) writeMsg(resp Resp) error { } encodedBuf := bufferPool.Get().([]byte) resultBuf := bufferPool.Get().([]byte) - encodeBuf, err := c.encoder.Encode(resp) + encodeBuf, err := c.longConnServer.Encode(resp) if err != nil { return utils.Wrap(err, "") } _ = c.conn.SetWriteTimeout(60) if c.isCompress { var compressErr error - resultBuf, compressErr = c.compressor.Compress(encodeBuf) + resultBuf, compressErr = c.longConnServer.Compress(encodeBuf) if compressErr != nil { return utils.Wrap(compressErr, "") } diff --git a/internal/msggateway/new/compressor.go b/internal/msggateway/compressor.go similarity index 98% rename from internal/msggateway/new/compressor.go rename to internal/msggateway/compressor.go index 79b5a5e39..478863c05 100644 --- a/internal/msggateway/new/compressor.go +++ b/internal/msggateway/compressor.go @@ -1,4 +1,4 @@ -package new +package msggateway import ( "OpenIM/pkg/utils" diff --git a/internal/msggateway/constant.go b/internal/msggateway/constant.go new file mode 100644 index 000000000..21a0435b0 --- /dev/null +++ b/internal/msggateway/constant.go @@ -0,0 +1,27 @@ +package msggateway + +const ( + WsUserID = "sendID" + CommonUserID = "userID" + PlatformID = "platformID" + ConnID = "connID" + Token = "token" + OperationID = "operationID" + Compression = "compression" + GzipCompressionProtocol = "gzip" +) +const ( + WebSocket = iota + 1 +) +const ( + //Websocket Protocol + WSGetNewestSeq = 1001 + WSPullMsgBySeqList = 1002 + WSSendMsg = 1003 + WSSendSignalMsg = 1004 + WSPushMsg = 2001 + WSKickOnlineMsg = 2002 + WsLogoutMsg = 2003 + WsSetBackgroundStatus = 2004 + WSDataError = 3001 +) diff --git a/internal/msggateway/new/context.go b/internal/msggateway/context.go similarity index 92% rename from internal/msggateway/new/context.go rename to internal/msggateway/context.go index 678f3e6a2..93d62cb19 100644 --- a/internal/msggateway/new/context.go +++ b/internal/msggateway/context.go @@ -1,4 +1,4 @@ -package new +package msggateway import ( "OpenIM/pkg/utils" @@ -47,8 +47,8 @@ func (c *UserConnContext) GetConnID() string { return c.RemoteAddr + "_" + strconv.Itoa(int(utils.GetCurrentTimestampByMill())) } func (c *UserConnContext) GetUserID() string { - return c.Req.URL.Query().Get(WS_USERID) + return c.Req.URL.Query().Get(WsUserID) } func (c *UserConnContext) GetPlatformID() string { - return c.Req.URL.Query().Get(PLATFORM_ID) + return c.Req.URL.Query().Get(PlatformID) } diff --git a/internal/msggateway/new/encoder.go b/internal/msggateway/encoder.go similarity index 97% rename from internal/msggateway/new/encoder.go rename to internal/msggateway/encoder.go index 30530b541..56a1e15c0 100644 --- a/internal/msggateway/new/encoder.go +++ b/internal/msggateway/encoder.go @@ -1,4 +1,4 @@ -package new +package msggateway import ( "OpenIM/pkg/utils" diff --git a/internal/msggateway/new/http_error.go b/internal/msggateway/http_error.go similarity index 98% rename from internal/msggateway/new/http_error.go rename to internal/msggateway/http_error.go index 043539ba6..dc8e15c61 100644 --- a/internal/msggateway/new/http_error.go +++ b/internal/msggateway/http_error.go @@ -1,4 +1,4 @@ -package new +package msggateway import ( "OpenIM/pkg/errs" diff --git a/internal/msggateway/hub_server.go b/internal/msggateway/hub_server.go new file mode 100644 index 000000000..0e1bd6953 --- /dev/null +++ b/internal/msggateway/hub_server.go @@ -0,0 +1,173 @@ +package msggateway + +import ( + "OpenIM/internal/common/network" + "OpenIM/pkg/common/config" + "OpenIM/pkg/common/constant" + "OpenIM/pkg/common/mw" + "OpenIM/pkg/common/prome" + "OpenIM/pkg/common/tokenverify" + "OpenIM/pkg/errs" + "OpenIM/pkg/proto/msggateway" + "OpenIM/pkg/utils" + "context" + "fmt" + "github.com/OpenIMSDK/openKeeper" + grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus" + "google.golang.org/grpc" + "net" +) + +func (s *Server) Start() error { + zkClient, err := openKeeper.NewClient(config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema, 10, "", "") + if err != nil { + return err + } + defer zkClient.Close() + registerIP, err := network.GetRpcRegisterIP(config.Config.RpcRegisterIP) + if err != nil { + return err + } + listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", config.Config.ListenIP, s.rpcPort)) + if err != nil { + panic("listening err:" + err.Error()) + } + defer listener.Close() + var options []grpc.ServerOption + options = append(options, mw.GrpcServer()) // ctx 中间件 + if config.Config.Prometheus.Enable { + prome.NewGrpcRequestCounter() + prome.NewGrpcRequestFailedCounter() + prome.NewGrpcRequestSuccessCounter() + options = append(options, []grpc.ServerOption{ + //grpc.UnaryInterceptor(prome.UnaryServerInterceptorPrometheus), + grpc.StreamInterceptor(grpcPrometheus.StreamServerInterceptor), + grpc.UnaryInterceptor(grpcPrometheus.UnaryServerInterceptor), + }...) + } + srv := grpc.NewServer(options...) + defer srv.GracefulStop() + msggateway.RegisterMsgGatewayServer(srv, s) + err = zkClient.Register("", registerIP, s.rpcPort) + if err != nil { + return err + } + err = srv.Serve(listener) + if err != nil { + return err + } + return nil +} + +type Server struct { + rpcPort int + LongConnServer LongConnServer + pushTerminal []int + //rpcServer *RpcServer +} + +func NewServer(rpcPort int, longConnServer LongConnServer) *Server { + return &Server{rpcPort: rpcPort, LongConnServer: longConnServer, pushTerminal: []int{constant.IOSPlatformID, constant.AndroidPlatformID}} +} + +func (s *Server) OnlinePushMsg(context context.Context, req *msggateway.OnlinePushMsgReq) (*msggateway.OnlinePushMsgResp, error) { + panic("implement me") +} + +func (s *Server) GetUsersOnlineStatus(ctx context.Context, req *msggateway.GetUsersOnlineStatusReq) (*msggateway.GetUsersOnlineStatusResp, error) { + if !tokenverify.IsAppManagerUid(ctx) { + return nil, errs.ErrNoPermission.Wrap("only app manager") + } + var resp msggateway.GetUsersOnlineStatusResp + for _, userID := range req.UserIDs { + clients, ok := s.LongConnServer.GetUserAllCons(userID) + if !ok { + continue + } + temp := new(msggateway.GetUsersOnlineStatusResp_SuccessResult) + temp.UserID = userID + for _, client := range clients { + if client != nil { + ps := new(msggateway.GetUsersOnlineStatusResp_SuccessDetail) + ps.Platform = constant.PlatformIDToName(client.platformID) + ps.Status = constant.OnlineStatus + ps.ConnID = client.connID + ps.IsBackground = client.isBackground + temp.Status = constant.OnlineStatus + temp.DetailPlatformStatus = append(temp.DetailPlatformStatus, ps) + } + } + if temp.Status == constant.OnlineStatus { + resp.SuccessResult = append(resp.SuccessResult, temp) + } + } + return &resp, nil +} + +func (s *Server) OnlineBatchPushOneMsg(ctx context.Context, req *msggateway.OnlineBatchPushOneMsgReq) (*msggateway.OnlineBatchPushOneMsgResp, error) { + panic("implement me") +} + +func (s *Server) SuperGroupOnlineBatchPushOneMsg(ctx context.Context, req *msggateway.OnlineBatchPushOneMsgReq) (*msggateway.OnlineBatchPushOneMsgResp, error) { + var singleUserResult []*msggateway.SingleMsgToUserResults + for _, v := range req.PushToUserIDs { + var resp []*msggateway.SingleMsgToUserPlatform + tempT := &msggateway.SingleMsgToUserResults{ + UserID: v, + } + clients, ok := s.LongConnServer.GetUserAllCons(v) + if !ok { + continue + } + for _, client := range clients { + if client != nil { + temp := &msggateway.SingleMsgToUserPlatform{ + RecvID: v, + RecvPlatFormID: int32(client.platformID), + } + if !client.isBackground { + err := client.PushMessage(ctx, req.MsgData) + if err != nil { + temp.ResultCode = -2 + resp = append(resp, temp) + } else { + if utils.IsContainInt(client.platformID, s.pushTerminal) { + tempT.OnlinePush = true + prome.Inc(prome.MsgOnlinePushSuccessCounter) + resp = append(resp, temp) + } + } + } else { + temp.ResultCode = -3 + resp = append(resp, temp) + } + } + } + tempT.Resp = resp + singleUserResult = append(singleUserResult, tempT) + } + + return &msggateway.OnlineBatchPushOneMsgResp{ + SinglePushResult: singleUserResult, + }, nil +} + +func (s *Server) KickUserOffline(ctx context.Context, req *msggateway.KickUserOfflineReq) (*msggateway.KickUserOfflineResp, error) { + for _, v := range req.KickUserIDList { + + if clients, _, ok := s.LongConnServer.GetUserPlatformCons(v, int(req.PlatformID)); ok { + for _, client := range clients { + err := client.KickOnlineMessage(ctx) + if err != nil { + return nil, err + } + } + } + } + return &msggateway.KickUserOfflineResp{}, nil +} + +func (s *Server) MultiTerminalLoginCheck(ctx context.Context, req *msggateway.MultiTerminalLoginCheckReq) (*msggateway.MultiTerminalLoginCheckResp, error) { + //TODO implement me + panic("implement me") +} diff --git a/internal/msggateway/init.go b/internal/msggateway/init.go deleted file mode 100644 index 9945e3277..000000000 --- a/internal/msggateway/init.go +++ /dev/null @@ -1,48 +0,0 @@ -package msggateway - -import ( - "OpenIM/pkg/common/config" - "OpenIM/pkg/common/constant" - - "OpenIM/pkg/statistics" - "fmt" - "sync" - - prome "OpenIM/pkg/common/prome" - - "github.com/go-playground/validator/v10" -) - -var ( - rwLock *sync.RWMutex - validate *validator.Validate - ws WServer - rpcSvr RPCServer - sendMsgAllCount uint64 - sendMsgFailedCount uint64 - sendMsgSuccessCount uint64 - userCount uint64 - - sendMsgAllCountLock sync.RWMutex -) - -func Init(rpcPort, wsPort int) { - rwLock = new(sync.RWMutex) - validate = validator.New() - statistics.NewStatistics(&sendMsgAllCount, config.Config.ModuleName.LongConnSvrName, fmt.Sprintf("%d second recv to msg_gateway sendMsgCount", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) - statistics.NewStatistics(&userCount, config.Config.ModuleName.LongConnSvrName, fmt.Sprintf("%d second add user conn", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) - ws.onInit(wsPort) - rpcSvr.onInit(rpcPort) - initPrometheus() -} - -func Run(prometheusPort int) { - go ws.run() - go rpcSvr.run() - go func() { - err := prome.StartPrometheusSrv(prometheusPort) - if err != nil { - panic(err) - } - }() -} diff --git a/internal/msggateway/logic.go b/internal/msggateway/logic.go deleted file mode 100644 index c89751056..000000000 --- a/internal/msggateway/logic.go +++ /dev/null @@ -1,404 +0,0 @@ -package msggateway - -import ( - "OpenIM/pkg/common/config" - "OpenIM/pkg/common/constant" - "OpenIM/pkg/common/log" - "OpenIM/pkg/common/prome" - pbChat "OpenIM/pkg/proto/msg" - push "OpenIM/pkg/proto/push" - pbRtc "OpenIM/pkg/proto/rtc" - "OpenIM/pkg/proto/sdkws" - "OpenIM/pkg/utils" - "bytes" - "context" - "encoding/gob" - "github.com/golang/protobuf/proto" - "github.com/gorilla/websocket" - "google.golang.org/grpc" - "runtime" -) - -func (ws *WServer) msgParse(conn *UserConn, binaryMsg []byte) { - b := bytes.NewBuffer(binaryMsg) - m := Req{} - dec := gob.NewDecoder(b) - err := dec.Decode(&m) - if err != nil { - log.NewError("", "ws Decode err", err.Error()) - err = conn.Close() - if err != nil { - log.NewError("", "ws close err", err.Error()) - } - return - } - if err := validate.Struct(m); err != nil { - log.NewError("", "ws args validate err", err.Error()) - ws.sendErrMsg(conn, 201, err.Error(), m.ReqIdentifier, m.MsgIncr, m.OperationID) - return - } - log.NewInfo(m.OperationID, "Basic Info Authentication Success", m.SendID, m.MsgIncr, m.ReqIdentifier) - if m.SendID != conn.userID { - if err = conn.Close(); err != nil { - log.NewError(m.OperationID, "close ws conn failed", conn.userID, "send id", m.SendID, err.Error()) - return - } - } - switch m.ReqIdentifier { - case constant.WSGetNewestSeq: - log.NewInfo(m.OperationID, "getSeqReq ", m.SendID, m.MsgIncr, m.ReqIdentifier) - ws.getSeqReq(conn, &m) - prome.Inc(prome.GetNewestSeqTotalCounter) - case constant.WSSendMsg: - log.NewInfo(m.OperationID, "sendMsgReq ", m.SendID, m.MsgIncr, m.ReqIdentifier) - ws.sendMsgReq(conn, &m) - prome.Inc(prome.MsgRecvTotalCounter) - case constant.WSSendSignalMsg: - log.NewInfo(m.OperationID, "sendSignalMsgReq ", m.SendID, m.MsgIncr, m.ReqIdentifier) - ws.sendSignalMsgReq(conn, &m) - case constant.WSPullMsgBySeqList: - log.NewInfo(m.OperationID, "pullMsgBySeqListReq ", m.SendID, m.MsgIncr, m.ReqIdentifier) - ws.pullMsgBySeqListReq(conn, &m) - prome.Inc(prome.PullMsgBySeqListTotalCounter) - case constant.WsLogoutMsg: - log.NewInfo(m.OperationID, "conn.Close()", m.SendID, m.MsgIncr, m.ReqIdentifier) - ws.userLogoutReq(conn, &m) - case constant.WsSetBackgroundStatus: - log.NewInfo(m.OperationID, "WsSetBackgroundStatus", m.SendID, m.MsgIncr, m.ReqIdentifier) - ws.setUserDeviceBackground(conn, &m) - default: - log.Error(m.OperationID, "ReqIdentifier failed ", m.SendID, m.MsgIncr, m.ReqIdentifier) - } - log.NewInfo(m.OperationID, "goroutine num is ", runtime.NumGoroutine()) -} - -func (ws *WServer) getSeqReq(conn *UserConn, m *Req) { - log.NewInfo(m.OperationID, "Ws call success to getNewSeq", m.MsgIncr, m.SendID, m.ReqIdentifier) - nReply := new(sdkws.GetMaxAndMinSeqResp) - isPass, errCode, errMsg, data := ws.argsValidate(m, constant.WSGetNewestSeq, m.OperationID) - log.Info(m.OperationID, "argsValidate ", isPass, errCode, errMsg) - if isPass { - rpcReq := sdkws.GetMaxAndMinSeqReq{} - rpcReq.GroupIDs = data.(sdkws.GetMaxAndMinSeqReq).GroupIDs - rpcReq.UserID = m.SendID - log.Debug(m.OperationID, "Ws call success to getMaxAndMinSeq", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdkws.GetMaxAndMinSeqReq).GroupIDs) - var grpcConn *grpc.ClientConn - msgClient := pbChat.NewMsgClient(grpcConn) - rpcReply, err := msgClient.GetMaxAndMinSeq(context.Background(), &rpcReq) - if err != nil { - ws.getSeqResp(conn, m, nReply) - } else { - ws.getSeqResp(conn, m, rpcReply) - } - } else { - log.Error(m.OperationID, "argsValidate failed send resp: ", nReply.String()) - ws.getSeqResp(conn, m, nReply) - } -} - -func (ws *WServer) getSeqResp(conn *UserConn, m *Req, pb *sdkws.GetMaxAndMinSeqResp) { - - b, _ := proto.Marshal(pb) - mReply := Resp{ - ReqIdentifier: m.ReqIdentifier, - MsgIncr: m.MsgIncr, - OperationID: m.OperationID, - Data: b, - } - log.Debug(m.OperationID, "getSeqResp come here req: ", pb.String(), "send resp: ", - mReply.ReqIdentifier, mReply.MsgIncr, mReply.ErrCode, mReply.ErrMsg) - ws.sendMsg(conn, mReply) -} - -func (ws *WServer) pullMsgBySeqListReq(conn *UserConn, m *Req) { - log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq start", m.SendID, m.ReqIdentifier, m.MsgIncr, string(m.Data)) - nReply := new(sdkws.PullMessageBySeqsResp) - isPass, _, _, data := ws.argsValidate(m, constant.WSPullMsgBySeqList, m.OperationID) - if isPass { - rpcReq := sdkws.PullMessageBySeqsReq{} - rpcReq.Seqs = data.(sdkws.PullMessageBySeqsReq).Seqs - rpcReq.UserID = m.SendID - rpcReq.GroupSeqs = data.(sdkws.PullMessageBySeqsReq).GroupSeqs - log.NewInfo(m.OperationID, "Ws call success to pullMsgBySeqListReq middle", m.SendID, m.ReqIdentifier, m.MsgIncr, data.(sdkws.PullMessageBySeqsReq).Seqs) - var grpcConn *grpc.ClientConn - - //grpcConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMsgName, m.OperationID) - if grpcConn == nil { - ws.pullMsgBySeqListResp(conn, m, nReply) - return - } - msgClient := pbChat.NewMsgClient(grpcConn) - maxSizeOption := grpc.MaxCallRecvMsgSize(1024 * 1024 * 20) - reply, err := msgClient.PullMessageBySeqs(context.Background(), &rpcReq, maxSizeOption) - if err != nil { - ws.pullMsgBySeqListResp(conn, m, nReply) - } else { - //log.NewInfo(rpcReq.OperationID, "rpc call success to pullMsgBySeqListReq", reply.String(), len(reply.List)) - ws.pullMsgBySeqListResp(conn, m, reply) - } - } else { - ws.pullMsgBySeqListResp(conn, m, nReply) - } -} -func (ws *WServer) pullMsgBySeqListResp(conn *UserConn, m *Req, pb *sdkws.PullMessageBySeqsResp) { - log.NewInfo(m.OperationID, "pullMsgBySeqListResp come here ", pb.String()) - c, _ := proto.Marshal(pb) - mReply := Resp{ - ReqIdentifier: m.ReqIdentifier, - MsgIncr: m.MsgIncr, - //ErrCode: pb.GetErrCode(), - //ErrMsg: pb.GetErrMsg(), - OperationID: m.OperationID, - Data: c, - } - log.NewInfo(m.OperationID, "pullMsgBySeqListResp all data is ", mReply.ReqIdentifier, mReply.MsgIncr, mReply.ErrCode, mReply.ErrMsg, - len(mReply.Data)) - ws.sendMsg(conn, mReply) -} -func (ws *WServer) userLogoutReq(conn *UserConn, m *Req) { - log.NewInfo(m.OperationID, "Ws call success to userLogoutReq start", m.SendID, m.ReqIdentifier, m.MsgIncr, string(m.Data)) - - rpcReq := push.DelUserPushTokenReq{} - rpcReq.UserID = m.SendID - rpcReq.PlatformID = conn.PlatformID - //rpcReq.OperationID = m.OperationID - var grpcConn *grpc.ClientConn - - //grpcConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImPushName, m.OperationID) - if grpcConn == nil { - //errMsg := rpcReq.OperationID + "getcdv3.GetDefaultConn == nil" - //log.NewError(rpcReq.OperationID, errMsg) - ws.userLogoutResp(conn, m) - return - } - msgClient := push.NewPushMsgServiceClient(grpcConn) - _, err := msgClient.DelUserPushToken(context.Background(), &rpcReq) - if err != nil { - //log.NewError(rpcReq.OperationID, "DelUserPushToken err", err.Error()) - - ws.userLogoutResp(conn, m) - } else { - //log.NewInfo(rpcReq.OperationID, "rpc call success to DelUserPushToken", reply.String()) - ws.userLogoutResp(conn, m) - } - ws.userLogoutResp(conn, m) - -} -func (ws *WServer) userLogoutResp(conn *UserConn, m *Req) { - mReply := Resp{ - ReqIdentifier: m.ReqIdentifier, - MsgIncr: m.MsgIncr, - OperationID: m.OperationID, - } - ws.sendMsg(conn, mReply) - _ = conn.Close() -} -func (ws *WServer) sendMsgReq(conn *UserConn, m *Req) { - sendMsgAllCountLock.Lock() - sendMsgAllCount++ - sendMsgAllCountLock.Unlock() - log.NewInfo(m.OperationID, "Ws call success to sendMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID) - - nReply := new(pbChat.SendMsgResp) - isPass, _, _, pData := ws.argsValidate(m, constant.WSSendMsg, m.OperationID) - if isPass { - data := pData.(sdkws.MsgData) - pbData := pbChat.SendMsgReq{ - //Token: m.Token, - //OperationID: m.OperationID, - MsgData: &data, - } - log.NewInfo(m.OperationID, "Ws call success to sendMsgReq middle", m.ReqIdentifier, m.SendID, m.MsgIncr, data.String()) - var grpcConn *grpc.ClientConn - - //etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMsgName, m.OperationID) - if grpcConn == nil { - errMsg := m.OperationID + "getcdv3.GetDefaultConn == nil" - //nReply.ErrCode = 500 - //nReply.ErrMsg = errMsg - log.NewError(m.OperationID, errMsg) - ws.sendMsgResp(conn, m, nReply) - return - } - client := pbChat.NewMsgClient(grpcConn) - reply, err := client.SendMsg(context.Background(), &pbData) - if err != nil { - //log.NewError(pbData.OperationID, "UserSendMsg err", err.Error()) - //nReply.ErrCode = 200 - //nReply.ErrMsg = err.Error() - ws.sendMsgResp(conn, m, nReply) - } else { - //log.NewInfo(pbData.OperationID, "rpc call success to sendMsgReq", reply.String()) - ws.sendMsgResp(conn, m, reply) - } - - } else { - //nReply.ErrCode = errCode - //nReply.ErrMsg = errMsg - ws.sendMsgResp(conn, m, nReply) - } - -} -func (ws *WServer) sendMsgResp(conn *UserConn, m *Req, pb *pbChat.SendMsgResp) { - var mReplyData sdkws.UserSendMsgResp - mReplyData.ClientMsgID = pb.GetClientMsgID() - mReplyData.ServerMsgID = pb.GetServerMsgID() - mReplyData.SendTime = pb.GetSendTime() - b, _ := proto.Marshal(&mReplyData) - mReply := Resp{ - ReqIdentifier: m.ReqIdentifier, - MsgIncr: m.MsgIncr, - OperationID: m.OperationID, - Data: b, - } - ws.sendMsg(conn, mReply) - -} - -func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { - log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID, string(m.Data)) - //nReply := new(pbChat.SendMsgResp) - isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendSignalMsg, m.OperationID) - if isPass { - signalResp := sdkws.SignalResp{} - var grpcConn *grpc.ClientConn - //etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImRtcName, m.OperationID) - if grpcConn == nil { - errMsg := m.OperationID + "getcdv3.GetDefaultConn == nil" - log.NewError(m.OperationID, errMsg) - ws.sendSignalMsgResp(conn, 204, errMsg, m, &signalResp) - return - } - rtcClient := pbRtc.NewRtcServiceClient(grpcConn) - req := &pbRtc.SignalMessageAssembleReq{ - SignalReq: pData.(*sdkws.SignalReq), - OperationID: m.OperationID, - } - respPb, err := rtcClient.SignalMessageAssemble(context.Background(), req) - if err != nil { - log.NewError(m.OperationID, utils.GetSelfFuncName(), "SignalMessageAssemble", err.Error(), config.Config.RpcRegisterName.OpenImRtcName) - ws.sendSignalMsgResp(conn, 204, "grpc SignalMessageAssemble failed: "+err.Error(), m, &signalResp) - return - } - signalResp.Payload = respPb.SignalResp.Payload - msgData := sdkws.MsgData{} - utils.CopyStructFields(&msgData, respPb.MsgData) - log.NewInfo(m.OperationID, utils.GetSelfFuncName(), respPb.String()) - if respPb.IsPass { - pbData := pbChat.SendMsgReq{ - //Token: m.Token, - //OperationID: m.OperationID, - MsgData: &msgData, - } - log.NewInfo(m.OperationID, utils.GetSelfFuncName(), "pbData: ", pbData) - log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq middle", m.ReqIdentifier, m.SendID, m.MsgIncr, msgData) - var grpcConn *grpc.ClientConn - //etcdConn := rpc.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImMsgName, m.OperationID) - if grpcConn == nil { - errMsg := m.OperationID + "getcdv3.GetDefaultConn == nil" - log.NewError(m.OperationID, errMsg) - ws.sendSignalMsgResp(conn, 200, errMsg, m, &signalResp) - return - } - client := pbChat.NewMsgClient(grpcConn) - _, err := client.SendMsg(context.Background(), &pbData) - if err != nil { - //log.NewError(pbData.OperationID, utils.GetSelfFuncName(), "rpc sendMsg err", err.Error()) - //nReply.ErrCode = 200 - //nReply.ErrMsg = err.Error() - ws.sendSignalMsgResp(conn, 200, err.Error(), m, &signalResp) - } else { - //log.NewInfo(pbData.OperationID, "rpc call success to sendMsgReq", reply.String(), signalResp.String(), m) - ws.sendSignalMsgResp(conn, 0, "", m, &signalResp) - } - } else { - //log.NewError(m.OperationID, utils.GetSelfFuncName(), respPb.IsPass, respPb.CommonResp.ErrCode, respPb.CommonResp.ErrMsg) - //ws.sendSignalMsgResp(conn, respPb.CommonResp.ErrCode, respPb.CommonResp.ErrMsg, m, &signalResp) - } - } else { - ws.sendSignalMsgResp(conn, errCode, errMsg, m, nil) - } - -} -func (ws *WServer) sendSignalMsgResp(conn *UserConn, errCode int32, errMsg string, m *Req, pb *sdkws.SignalResp) { - // := make(map[string]interface{}) - log.Debug(m.OperationID, "sendSignalMsgResp is", pb.String()) - b, _ := proto.Marshal(pb) - mReply := Resp{ - ReqIdentifier: m.ReqIdentifier, - MsgIncr: m.MsgIncr, - ErrCode: errCode, - ErrMsg: errMsg, - OperationID: m.OperationID, - Data: b, - } - ws.sendMsg(conn, mReply) -} -func (ws *WServer) sendMsg(conn *UserConn, mReply interface{}) { - var b bytes.Buffer - enc := gob.NewEncoder(&b) - err := enc.Encode(mReply) - if err != nil { - // uid, platform := ws.getUserUid(conn) - log.NewError(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "Encode Msg error", conn.RemoteAddr().String(), err.Error()) - return - } - err = ws.writeMsg(conn, websocket.BinaryMessage, b.Bytes()) - if err != nil { - // uid, platform := ws.getUserUid(conn) - log.NewError(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "ws writeMsg error", conn.RemoteAddr().String(), err.Error()) - } else { - log.Debug(mReply.(Resp).OperationID, mReply.(Resp).ReqIdentifier, mReply.(Resp).ErrCode, mReply.(Resp).ErrMsg, "ws write response success") - } -} -func (ws *WServer) sendErrMsg(conn *UserConn, errCode int32, errMsg string, reqIdentifier int32, msgIncr string, operationID string) { - mReply := Resp{ - ReqIdentifier: reqIdentifier, - MsgIncr: msgIncr, - ErrCode: errCode, - ErrMsg: errMsg, - OperationID: operationID, - } - ws.sendMsg(conn, mReply) -} - -func SetTokenKicked(userID string, platformID int, operationID string) { - //m, err := db.DB.GetTokenMapByUidPid(userID, constant.PlatformIDToName(platformID)) - //if err != nil { - // log.Error(operationID, "GetTokenMapByUidPid failed ", err.Error(), userID, constant.PlatformIDToName(platformID)) - // return - //} - //for k, _ := range m { - // m[k] = constant.KickedToken - //} - //err = db.DB.SetTokenMapByUidPid(userID, platformID, m) - //if err != nil { - // log.Error(operationID, "SetTokenMapByUidPid failed ", err.Error(), userID, constant.PlatformIDToName(platformID)) - // return - //} -} - -func (ws *WServer) setUserDeviceBackground(conn *UserConn, m *Req) { - isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WsSetBackgroundStatus, m.OperationID) - if isPass { - req := pData.(*sdkws.SetAppBackgroundStatusReq) - conn.IsBackground = req.IsBackground - //callbackResp := callbackUserOnline(m.OperationID, conn.userID, int(conn.PlatformID), conn.token, conn.IsBackground, conn.connID) - //if callbackResp.ErrCode != 0 { - // log.NewError(m.OperationID, utils.GetSelfFuncName(), "callbackUserOffline failed", callbackResp) - //} - log.NewInfo(m.OperationID, "SetUserDeviceBackground", "success", *conn, req.IsBackground) - } - ws.setUserDeviceBackgroundResp(conn, m, errCode, errMsg) -} - -func (ws *WServer) setUserDeviceBackgroundResp(conn *UserConn, m *Req, errCode int32, errMsg string) { - mReply := Resp{ - ReqIdentifier: m.ReqIdentifier, - MsgIncr: m.MsgIncr, - OperationID: m.OperationID, - ErrCode: errCode, - ErrMsg: errMsg, - } - ws.sendMsg(conn, mReply) -} diff --git a/internal/msggateway/new/long_conn.go b/internal/msggateway/long_conn.go similarity index 99% rename from internal/msggateway/new/long_conn.go rename to internal/msggateway/long_conn.go index 8845504a7..0fc6f1f35 100644 --- a/internal/msggateway/new/long_conn.go +++ b/internal/msggateway/long_conn.go @@ -1,4 +1,4 @@ -package new +package msggateway import ( "github.com/gorilla/websocket" diff --git a/internal/msggateway/new/message_handler.go b/internal/msggateway/message_handler.go similarity index 97% rename from internal/msggateway/new/message_handler.go rename to internal/msggateway/message_handler.go index 08bf11e57..a211def9a 100644 --- a/internal/msggateway/new/message_handler.go +++ b/internal/msggateway/message_handler.go @@ -1,9 +1,8 @@ -package new +package msggateway import ( "OpenIM/internal/common/notification" "OpenIM/pkg/proto/msg" - pbRtc "OpenIM/pkg/proto/rtc" "OpenIM/pkg/proto/sdkws" "context" "github.com/go-playground/validator/v10" @@ -86,7 +85,7 @@ func (g GrpcHandler) SendMessage(context context.Context, data Req) ([]byte, err } func (g GrpcHandler) SendSignalMessage(context context.Context, data Req) ([]byte, error) { - signalReq := pbRtc.SignalReq{} + signalReq := sdkws.SignalReq{} if err := proto.Unmarshal(data.Data, &signalReq); err != nil { return nil, err } @@ -107,7 +106,7 @@ func (g GrpcHandler) SendSignalMessage(context context.Context, data Req) ([]byt } func (g GrpcHandler) PullMessageBySeqList(context context.Context, data Req) ([]byte, error) { - req := sdkws.PullMessageBySeqListReq{} + req := sdkws.PullMessageBySeqsReq{} if err := proto.Unmarshal(data.Data, &req); err != nil { return nil, err } diff --git a/internal/msggateway/new/n_ws_server.go b/internal/msggateway/n_ws_server.go similarity index 69% rename from internal/msggateway/new/n_ws_server.go rename to internal/msggateway/n_ws_server.go index 9d6535659..f8fc82e48 100644 --- a/internal/msggateway/new/n_ws_server.go +++ b/internal/msggateway/n_ws_server.go @@ -1,55 +1,71 @@ -package new +package msggateway import ( - "OpenIM/pkg/common/constant" "OpenIM/pkg/common/tokenverify" "OpenIM/pkg/errs" "OpenIM/pkg/utils" "errors" "fmt" "github.com/go-playground/validator/v10" - "github.com/gorilla/websocket" "net/http" "sync" "sync/atomic" "time" ) +type LongConnServer interface { + Run() error + wsHandler(w http.ResponseWriter, r *http.Request) + GetUserAllCons(userID string) ([]*Client, bool) + GetUserPlatformCons(userID string, platform int) ([]*Client, bool, bool) + Validate(s interface{}) error + UnRegister(c *Client) + Compressor + Encoder + MessageHandler +} + var bufferPool = sync.Pool{ New: func() interface{} { return make([]byte, 1024) }, } -type LongConnServer interface { - Run() error -} - -type Server struct { - rpcPort int - wsMaxConnNum int - longConnServer *LongConnServer - //rpcServer *RpcServer -} type WsServer struct { port int wsMaxConnNum int64 - wsUpGrader *websocket.Upgrader registerChan chan *Client unregisterChan chan *Client clients *UserMap clientPool sync.Pool onlineUserNum int64 onlineUserConnNum int64 - gzipCompressor Compressor - encoder Encoder - handler MessageHandler handshakeTimeout time.Duration readBufferSize, WriteBufferSize int validate *validator.Validate + Compressor + Encoder + MessageHandler } -func newWsServer(opts ...Option) (*WsServer, error) { +func (ws *WsServer) UnRegister(c *Client) { + ws.unregisterChan <- c +} + +func (ws *WsServer) Validate(s interface{}) error { + //TODO implement me + panic("implement me") +} + +func (ws *WsServer) GetUserAllCons(userID string) ([]*Client, bool) { + return ws.clients.GetAll(userID) +} + +func (ws *WsServer) GetUserPlatformCons(userID string, platform int) ([]*Client, bool, bool) { + return ws.clients.Get(userID, platform) +} + +func NewWsServer(opts ...Option) (*WsServer, error) { var config configs for _, o := range opts { o(&config) @@ -58,6 +74,7 @@ func newWsServer(opts ...Option) (*WsServer, error) { return nil, errors.New("port not allow to listen") } + v := validator.New() return &WsServer{ port: config.port, wsMaxConnNum: config.maxConnNum, @@ -68,8 +85,13 @@ func newWsServer(opts ...Option) (*WsServer, error) { return new(Client) }, }, - validate: validator.New(), - clients: newUserMap(), + registerChan: make(chan *Client, 1000), + unregisterChan: make(chan *Client, 1000), + validate: v, + clients: newUserMap(), + Compressor: NewGzipCompressor(), + Encoder: NewGobEncoder(), + MessageHandler: NewGrpcHandler(v, nil), //handler: NewGrpcHandler(validate), }, nil } @@ -93,7 +115,7 @@ func (ws *WsServer) registerClient(client *Client) { var ( userOK bool clientOK bool - cli *Client + cli []*Client ) cli, userOK, clientOK = ws.clients.Get(client.userID, client.platformID) if !userOK { @@ -116,10 +138,11 @@ func (ws *WsServer) registerClient(client *Client) { } -func (ws *WsServer) multiTerminalLoginChecker(client *Client) { +func (ws *WsServer) multiTerminalLoginChecker(client []*Client) { } func (ws *WsServer) unregisterClient(client *Client) { + defer ws.clientPool.Put(client) isDeleteUser := ws.clients.delete(client.userID, client.platformID) if isDeleteUser { atomic.AddInt64(&ws.onlineUserNum, -1) @@ -141,20 +164,19 @@ func (ws *WsServer) wsHandler(w http.ResponseWriter, r *http.Request) { platformID string exists bool compression bool - compressor Compressor ) - token, exists = context.Query(TOKEN) + token, exists = context.Query(Token) if !exists { httpError(context, errs.ErrConnArgsErr) return } - userID, exists = context.Query(WS_USERID) + userID, exists = context.Query(WsUserID) if !exists { httpError(context, errs.ErrConnArgsErr) return } - platformID, exists = context.Query(PLATFORM_ID) + platformID, exists = context.Query(PlatformID) if !exists { httpError(context, errs.ErrConnArgsErr) return @@ -164,28 +186,26 @@ func (ws *WsServer) wsHandler(w http.ResponseWriter, r *http.Request) { httpError(context, err) return } - wsLongConn := newGWebSocket(constant.WebSocket, ws.handshakeTimeout, ws.readBufferSize) + wsLongConn := newGWebSocket(WebSocket, ws.handshakeTimeout, ws.readBufferSize) err = wsLongConn.GenerateLongConn(w, r) if err != nil { httpError(context, err) return } - compressProtoc, exists := context.Query(COMPRESSION) + compressProtoc, exists := context.Query(Compression) if exists { - if compressProtoc == GZIP_COMPRESSION_PROTOCAL { + if compressProtoc == GzipCompressionProtocol { compression = true - compressor = ws.gzipCompressor } } - compressProtoc, exists = context.GetHeader(COMPRESSION) + compressProtoc, exists = context.GetHeader(Compression) if exists { - if compressProtoc == GZIP_COMPRESSION_PROTOCAL { + if compressProtoc == GzipCompressionProtocol { compression = true - compressor = ws.gzipCompressor } } client := ws.clientPool.Get().(*Client) - client.ResetClient(context, wsLongConn, compression, compressor, ws.encoder, ws.handler, ws.unregisterChan, ws.validate) + client.ResetClient(context, wsLongConn, compression, ws) ws.registerChan <- client go client.readMessage() } diff --git a/internal/msggateway/new/constant.go b/internal/msggateway/new/constant.go deleted file mode 100644 index 6b646e24e..000000000 --- a/internal/msggateway/new/constant.go +++ /dev/null @@ -1,12 +0,0 @@ -package new - -const ( - WS_USERID = "sendID" - COMMON_USERID = "userID" - PLATFORM_ID = "platformID" - CONN_ID = "connID" - TOKEN = "token" - OPERATION_ID = "operationID" - COMPRESSION = "compression" - GZIP_COMPRESSION_PROTOCAL = "gzip" -) diff --git a/internal/msggateway/new/options.go b/internal/msggateway/options.go similarity index 97% rename from internal/msggateway/new/options.go rename to internal/msggateway/options.go index 0fb575fc1..a54ffe880 100644 --- a/internal/msggateway/new/options.go +++ b/internal/msggateway/options.go @@ -1,4 +1,4 @@ -package new +package msggateway import "time" diff --git a/internal/msggateway/relay_rpc_server.go b/internal/msggateway/relay_rpc_server.go deleted file mode 100644 index 59a7c0415..000000000 --- a/internal/msggateway/relay_rpc_server.go +++ /dev/null @@ -1,373 +0,0 @@ -package msggateway - -import ( - "OpenIM/pkg/common/config" - "OpenIM/pkg/common/constant" - "OpenIM/pkg/common/log" - "OpenIM/pkg/common/prome" - "OpenIM/pkg/common/tokenverify" - "OpenIM/pkg/proto/msggateway" - "OpenIM/pkg/proto/sdkws" - "OpenIM/pkg/utils" - "bytes" - "context" - "encoding/gob" - "github.com/golang/protobuf/proto" - "github.com/gorilla/websocket" - grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus" - "google.golang.org/grpc" - "net" - "strconv" - "strings" -) - -type RPCServer struct { - rpcPort int - rpcRegisterName string - etcdSchema string - etcdAddr []string - platformList []int - pushTerminal []int - target string -} - -func initPrometheus() { - prome.NewMsgRecvTotalCounter() - prome.NewGetNewestSeqTotalCounter() - prome.NewPullMsgBySeqListTotalCounter() - prome.NewMsgOnlinePushSuccessCounter() - prome.NewOnlineUserGauges() - //prome.NewSingleChatMsgRecvSuccessCounter() - //prome.NewGroupChatMsgRecvSuccessCounter() - //prome.NewWorkSuperGroupChatMsgRecvSuccessCounter() -} - -func (r *RPCServer) onInit(rpcPort int) { - r.rpcPort = rpcPort - r.rpcRegisterName = config.Config.RpcRegisterName.OpenImMessageGatewayName - r.platformList = genPlatformArray() - r.pushTerminal = []int{constant.IOSPlatformID, constant.AndroidPlatformID} -} - -func (r *RPCServer) run() { - listenIP := "" - if config.Config.ListenIP == "" { - listenIP = constant.LocalHost - } else { - listenIP = config.Config.ListenIP - } - address := listenIP + ":" + strconv.Itoa(r.rpcPort) - listener, err := net.Listen("tcp", address) - if err != nil { - panic("listening err:" + err.Error() + r.rpcRegisterName) - } - defer listener.Close() - var grpcOpts []grpc.ServerOption - if config.Config.Prometheus.Enable { - prome.NewGrpcRequestCounter() - prome.NewGrpcRequestFailedCounter() - prome.NewGrpcRequestSuccessCounter() - grpcOpts = append(grpcOpts, []grpc.ServerOption{ - // grpc.UnaryInterceptor(prome.UnaryServerInterceptorProme), - grpc.StreamInterceptor(grpcPrometheus.StreamServerInterceptor), - grpc.UnaryInterceptor(grpcPrometheus.UnaryServerInterceptor), - }...) - } - srv := grpc.NewServer(grpcOpts...) - defer srv.GracefulStop() - msggateway.RegisterMsgGatewayServer(srv, r) - - rpcRegisterIP := config.Config.RpcRegisterIP - if config.Config.RpcRegisterIP == "" { - rpcRegisterIP, err = utils.GetLocalIP() - if err != nil { - log.Error("", "GetLocalIP failed ", err.Error()) - } - } - err = rpc.RegisterEtcd4Unique(r.etcdSchema, strings.Join(r.etcdAddr, ","), rpcRegisterIP, r.rpcPort, r.rpcRegisterName, 10) - if err != nil { - log.Error("", "register push message rpc to etcd err", "", "err", err.Error(), r.etcdSchema, strings.Join(r.etcdAddr, ","), rpcRegisterIP, r.rpcPort, r.rpcRegisterName) - panic(utils.Wrap(err, "register msg_gataway module rpc to etcd err")) - } - r.target = rpc.GetTarget(r.etcdSchema, rpcRegisterIP, r.rpcPort, r.rpcRegisterName) - err = srv.Serve(listener) - if err != nil { - log.Error("", "push message rpc listening err", "", "err", err.Error()) - return - } -} -func (r *RPCServer) OnlinePushMsg(ctx context.Context, in *msggateway.OnlinePushMsgReq) (*msggateway.OnlinePushMsgResp, error) { - log.NewInfo(in.OperationID, "PushMsgToUser is arriving", in.String()) - var resp []*msggateway.SingleMsgToUserPlatform - msgBytes, _ := proto.Marshal(in.MsgData) - mReply := Resp{ - ReqIdentifier: constant.WSPushMsg, - OperationID: in.OperationID, - Data: msgBytes, - } - var replyBytes bytes.Buffer - enc := gob.NewEncoder(&replyBytes) - err := enc.Encode(mReply) - if err != nil { - log.NewError(in.OperationID, "data encode err", err.Error()) - } - var tag bool - recvID := in.PushToUserID - for _, v := range r.platformList { - if conn := ws.getUserConn(recvID, v); conn != nil { - tag = true - resultCode := sendMsgToUser(conn, replyBytes.Bytes(), in, v, recvID) - temp := &msggateway.SingleMsgToUserPlatform{ - ResultCode: resultCode, - RecvID: recvID, - RecvPlatFormID: int32(v), - } - resp = append(resp, temp) - } else { - temp := &msggateway.SingleMsgToUserPlatform{ - ResultCode: -1, - RecvID: recvID, - RecvPlatFormID: int32(v), - } - resp = append(resp, temp) - } - } - if !tag { - log.NewDebug(in.OperationID, "push err ,no matched ws conn not in map", in.String()) - } - return &msggateway.OnlinePushMsgResp{ - Resp: resp, - }, nil -} -func (r *RPCServer) GetUsersOnlineStatus(_ context.Context, req *msggateway.GetUsersOnlineStatusReq) (*msggateway.GetUsersOnlineStatusResp, error) { - log.NewInfo(req.OperationID, "rpc GetUsersOnlineStatus arrived server", req.String()) - if !tokenverify.IsManagerUserID(req.OpUserID) { - log.NewError(req.OperationID, "no permission GetUsersOnlineStatus ", req.OpUserID) - return &msggateway.GetUsersOnlineStatusResp{ErrCode: errs.ErrAccess.ErrCode, ErrMsg: errs.ErrAccess.ErrMsg}, nil - } - var resp msggateway.GetUsersOnlineStatusResp - for _, userID := range req.UserIDList { - temp := new(msggateway.GetUsersOnlineStatusResp_SuccessResult) - temp.UserID = userID - userConnMap := ws.getUserAllCons(userID) - for platform, userConn := range userConnMap { - if userConn != nil { - ps := new(msggateway.GetUsersOnlineStatusResp_SuccessDetail) - ps.Platform = constant.PlatformIDToName(platform) - ps.Status = constant.OnlineStatus - ps.ConnID = userConn.connID - ps.IsBackground = userConn.IsBackground - temp.Status = constant.OnlineStatus - temp.DetailPlatformStatus = append(temp.DetailPlatformStatus, ps) - } - } - - if temp.Status == constant.OnlineStatus { - resp.SuccessResult = append(resp.SuccessResult, temp) - } - } - log.NewInfo(req.OperationID, "GetUsersOnlineStatus rpc return ", resp.String()) - return &resp, nil -} - -func (r *RPCServer) SuperGroupOnlineBatchPushOneMsg(_ context.Context, req *msggateway.OnlineBatchPushOneMsgReq) (*msggateway.OnlineBatchPushOneMsgResp, error) { - log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) - var singleUserResult []*msggateway.SingleMsgToUserResultList - //r.GetBatchMsgForPush(req.OperationID,req.MsgData,req.PushToUserIDList,) - msgBytes, _ := proto.Marshal(req.MsgData) - mReply := Resp{ - ReqIdentifier: constant.WSPushMsg, - OperationID: req.OperationID, - Data: msgBytes, - } - var replyBytes bytes.Buffer - enc := gob.NewEncoder(&replyBytes) - err := enc.Encode(mReply) - if err != nil { - log.NewError(req.OperationID, "data encode err", err.Error()) - } - for _, v := range req.PushToUserIDList { - var resp []*msggateway.SingleMsgToUserPlatform - tempT := &msggateway.SingleMsgToUserResultList{ - UserID: v, - } - userConnMap := ws.getUserAllCons(v) - for platform, userConn := range userConnMap { - if userConn != nil { - temp := &msggateway.SingleMsgToUserPlatform{ - RecvID: v, - RecvPlatFormID: int32(platform), - } - if !userConn.IsBackground { - resultCode := sendMsgBatchToUser(userConn, replyBytes.Bytes(), req, platform, v) - if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { - tempT.OnlinePush = true - prome.Inc(prome.MsgOnlinePushSuccessCounter) - log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recvPlatForm", constant.PlatformIDToName(platform), "recvID", v) - temp.ResultCode = resultCode - resp = append(resp, temp) - } - } else { - temp.ResultCode = -2 - resp = append(resp, temp) - } - } - } - tempT.Resp = resp - singleUserResult = append(singleUserResult, tempT) - } - - return &msggateway.OnlineBatchPushOneMsgResp{ - SinglePushResult: singleUserResult, - }, nil -} -func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *msggateway.OnlineBatchPushOneMsgReq) (*msggateway.OnlineBatchPushOneMsgResp, error) { - log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) - var singleUserResult []*msggateway.SingleMsgToUserResultList - - for _, v := range req.PushToUserIDList { - var resp []*msggateway.SingleMsgToUserPlatform - tempT := &msggateway.SingleMsgToUserResultList{ - UserID: v, - } - userConnMap := ws.getUserAllCons(v) - var platformList []int - for k, _ := range userConnMap { - platformList = append(platformList, k) - } - log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms begin", req.MsgData.Seq, v, platformList, req.MsgData.String()) - needPushMapList := r.GetSingleUserMsgForPushPlatforms(req.OperationID, req.MsgData, v, platformList) - log.Debug(req.OperationID, "GetSingleUserMsgForPushPlatforms end", req.MsgData.Seq, v, platformList, len(needPushMapList)) - for platform, list := range needPushMapList { - if list != nil { - log.Debug(req.OperationID, "needPushMapList ", "userID: ", v, "platform: ", platform, "push msg num:") - //for _, v := range list { - // log.Debug(req.OperationID, "req.MsgData.MsgDataList begin", "len: ", len(req.MsgData.MsgDataList), v.String()) - // req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) - // log.Debug(req.OperationID, "req.MsgData.MsgDataList end", "len: ", len(req.MsgData.MsgDataList)) - //} - msgBytes, err := proto.Marshal(list) - if err != nil { - log.Error(req.OperationID, "proto marshal err", err.Error()) - continue - } - req.MsgData.MsgDataList = msgBytes - //req.MsgData.MsgDataList = append(req.MsgData.MsgDataList, v) - log.Debug(req.OperationID, "r.encodeWsData no string") - //log.Debug(req.OperationID, "r.encodeWsData data0 list ", req.MsgData.MsgDataList[0].String()) - - log.Debug(req.OperationID, "r.encodeWsData ", req.MsgData.String()) - replyBytes, err := r.encodeWsData(req.MsgData, req.OperationID) - if err != nil { - log.Error(req.OperationID, "encodeWsData failed ", req.MsgData.String()) - continue - } - log.Debug(req.OperationID, "encodeWsData", "len: ", replyBytes.Len()) - resultCode := sendMsgBatchToUser(userConnMap[platform], replyBytes.Bytes(), req, platform, v) - if resultCode == 0 && utils.IsContainInt(platform, r.pushTerminal) { - tempT.OnlinePush = true - log.Info(req.OperationID, "PushSuperMsgToUser is success By Ws", "args", req.String(), "recv PlatForm", constant.PlatformIDToName(platform), "recvID", v) - temp := &msggateway.SingleMsgToUserPlatform{ - ResultCode: resultCode, - RecvID: v, - RecvPlatFormID: int32(platform), - } - resp = append(resp, temp) - } - } else { - if utils.IsContainInt(platform, r.pushTerminal) { - tempT.OnlinePush = true - temp := &msggateway.SingleMsgToUserPlatform{ - ResultCode: 0, - RecvID: v, - RecvPlatFormID: int32(platform), - } - resp = append(resp, temp) - } - } - } - tempT.Resp = resp - singleUserResult = append(singleUserResult, tempT) - } - return &msggateway.OnlineBatchPushOneMsgResp{ - SinglePushResult: singleUserResult, - }, nil -} -func (r *RPCServer) encodeWsData(wsData *sdkws.MsgData, operationID string) (bytes.Buffer, error) { - log.Debug(operationID, "encodeWsData begin", wsData.String()) - msgBytes, err := proto.Marshal(wsData) - if err != nil { - log.NewError(operationID, "Marshal", err.Error()) - return bytes.Buffer{}, utils.Wrap(err, "") - } - log.Debug(operationID, "encodeWsData begin", wsData.String()) - mReply := Resp{ - ReqIdentifier: constant.WSPushMsg, - OperationID: operationID, - Data: msgBytes, - } - var replyBytes bytes.Buffer - enc := gob.NewEncoder(&replyBytes) - err = enc.Encode(mReply) - if err != nil { - log.NewError(operationID, "data encode err", err.Error()) - return bytes.Buffer{}, utils.Wrap(err, "") - } - return replyBytes, nil -} - -func (r *RPCServer) KickUserOffline(_ context.Context, req *msggateway.KickUserOfflineReq) (*msggateway.KickUserOfflineResp, error) { - log.NewInfo(req.OperationID, "KickUserOffline is arriving", req.String()) - for _, v := range req.KickUserIDList { - log.NewWarn(req.OperationID, "SetTokenKicked ", v, req.PlatformID, req.OperationID) - SetTokenKicked(v, int(req.PlatformID), req.OperationID) - oldConnMap := ws.getUserAllCons(v) - if conn, ok := oldConnMap[int(req.PlatformID)]; ok { // user->map[platform->conn] - log.NewWarn(req.OperationID, "send kick msg, close connection ", req.PlatformID, v) - ws.sendKickMsg(conn) - conn.Close() - } - } - return &msggateway.KickUserOfflineResp{}, nil -} - -func (r *RPCServer) MultiTerminalLoginCheck(ctx context.Context, req *msggateway.MultiTerminalLoginCheckReq) (*msggateway.MultiTerminalLoginCheckResp, error) { - - ws.MultiTerminalLoginCheckerWithLock(req.UserID, int(req.PlatformID), req.Token, req.OperationID) - return &msggateway.MultiTerminalLoginCheckResp{}, nil -} - -func sendMsgToUser(conn *UserConn, bMsg []byte, in *msggateway.OnlinePushMsgReq, RecvPlatForm int, RecvID string) (ResultCode int64) { - err := ws.writeMsg(conn, websocket.BinaryMessage, bMsg) - if err != nil { - log.NewError(in.OperationID, "PushMsgToUser is failed By Ws", "Addr", conn.RemoteAddr().String(), - "error", err, "senderPlatform", constant.PlatformIDToName(int(in.MsgData.SenderPlatformID)), "recvPlatform", RecvPlatForm, "args", in.String(), "recvID", RecvID) - ResultCode = -2 - return ResultCode - } else { - log.NewDebug(in.OperationID, "PushMsgToUser is success By Ws", "args", in.String(), "recvPlatForm", RecvPlatForm, "recvID", RecvID) - ResultCode = 0 - return ResultCode - } - -} -func sendMsgBatchToUser(conn *UserConn, bMsg []byte, in *msggateway.OnlineBatchPushOneMsgReq, RecvPlatForm int, RecvID string) (ResultCode int64) { - err := ws.writeMsg(conn, websocket.BinaryMessage, bMsg) - if err != nil { - log.NewError(in.OperationID, "PushMsgToUser is failed By Ws", "Addr", conn.RemoteAddr().String(), - "error", err, "senderPlatform", constant.PlatformIDToName(int(in.MsgData.SenderPlatformID)), "recv Platform", RecvPlatForm, "args", in.String(), "recvID", RecvID) - ResultCode = -2 - return ResultCode - } else { - log.NewDebug(in.OperationID, "PushMsgToUser is success By Ws", "args", in.String(), "recv PlatForm", RecvPlatForm, "recvID", RecvID) - ResultCode = 0 - return ResultCode - } - -} -func genPlatformArray() (array []int) { - for i := 1; i <= constant.LinuxPlatformID; i++ { - array = append(array, i) - } - return array -} diff --git a/internal/msggateway/new/user_map.go b/internal/msggateway/user_map.go similarity index 79% rename from internal/msggateway/new/user_map.go rename to internal/msggateway/user_map.go index 0f45aa018..87699b915 100644 --- a/internal/msggateway/new/user_map.go +++ b/internal/msggateway/user_map.go @@ -1,4 +1,4 @@ -package new +package msggateway import "sync" @@ -16,15 +16,20 @@ func (u *UserMap) GetAll(key string) ([]*Client, bool) { } return nil, ok } -func (u *UserMap) Get(key string, platformID int) (*Client, bool, bool) { +func (u *UserMap) Get(key string, platformID int) ([]*Client, bool, bool) { allClients, userExisted := u.m.Load(key) if userExisted { + var clients []*Client for _, client := range allClients.([]*Client) { if client.platformID == platformID { - return client, userExisted, true + clients = append(clients, client) } } - return nil, userExisted, false + if len(clients) > 0 { + return clients, userExisted, true + + } + return clients, userExisted, false } return nil, userExisted, false } @@ -35,7 +40,7 @@ func (u *UserMap) Set(key string, v *Client) { oldClients = append(oldClients, v) u.m.Store(key, oldClients) } else { - clients := make([]*Client, 3) + var clients []*Client clients = append(clients, v) u.m.Store(key, clients) } @@ -44,7 +49,7 @@ func (u *UserMap) delete(key string, platformID int) (isDeleteUser bool) { allClients, existed := u.m.Load(key) if existed { oldClients := allClients.([]*Client) - a := make([]*Client, 3) + var a []*Client for _, client := range oldClients { if client.platformID != platformID { a = append(a, client) diff --git a/internal/msggateway/validate.go b/internal/msggateway/validate.go deleted file mode 100644 index 70ca395c5..000000000 --- a/internal/msggateway/validate.go +++ /dev/null @@ -1,125 +0,0 @@ -/* -** description(""). -** copyright('OpenIM,www.OpenIM.io'). -** author("fg,Gordon@tuoyun.net"). -** time(2021/5/21 15:29). - */ -package msggateway - -import ( - "OpenIM/pkg/common/constant" - "OpenIM/pkg/common/log" - pbRtc "OpenIM/pkg/proto/rtc" - sdkws "OpenIM/pkg/proto/sdkws" - "github.com/golang/protobuf/proto" -) - -type Req struct { - ReqIdentifier int32 `json:"reqIdentifier" validate:"required"` - Token string `json:"token" ` - SendID string `json:"sendID" validate:"required"` - OperationID string `json:"operationID" validate:"required"` - MsgIncr string `json:"msgIncr" validate:"required"` - Data []byte `json:"data"` -} -type Resp struct { - ReqIdentifier int32 `json:"reqIdentifier"` - MsgIncr string `json:"msgIncr"` - OperationID string `json:"operationID"` - ErrCode int32 `json:"errCode"` - ErrMsg string `json:"errMsg"` - Data []byte `json:"data"` -} - -type SeqData struct { - SeqBegin int64 `mapstructure:"seqBegin" validate:"required"` - SeqEnd int64 `mapstructure:"seqEnd" validate:"required"` -} -type MsgData struct { - PlatformID int32 `mapstructure:"platformID" validate:"required"` - SessionType int32 `mapstructure:"sessionType" validate:"required"` - MsgFrom int32 `mapstructure:"msgFrom" validate:"required"` - ContentType int32 `mapstructure:"contentType" validate:"required"` - RecvID string `mapstructure:"recvID" validate:"required"` - ForceList []string `mapstructure:"forceList"` - Content string `mapstructure:"content" validate:"required"` - Options map[string]interface{} `mapstructure:"options" validate:"required"` - ClientMsgID string `mapstructure:"clientMsgID" validate:"required"` - OfflineInfo map[string]interface{} `mapstructure:"offlineInfo" validate:"required"` - Ext map[string]interface{} `mapstructure:"ext"` -} -type MaxSeqResp struct { - MaxSeq int64 `json:"maxSeq"` -} -type PullMessageResp struct { -} -type SeqListData struct { - SeqList []int64 `mapstructure:"seqList" validate:"required"` -} - -func (ws *WServer) argsValidate(m *Req, r int32, operationID string) (isPass bool, errCode int32, errMsg string, returnData interface{}) { - switch r { - case constant.WSGetNewestSeq: - data := sdkws.GetMaxAndMinSeqReq{} - if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error(operationID, "Decode Map struct err", err.Error(), r) - return false, 203, err.Error(), nil - } - if err := validate.Struct(data); err != nil { - log.Error(operationID, "data args validate err", err.Error(), r) - return false, 204, err.Error(), nil - - } - return true, 0, "", data - case constant.WSSendMsg: - data := sdkws.MsgData{} - if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error(operationID, "Decode Map struct err", err.Error(), r) - return false, 203, err.Error(), nil - } - if err := validate.Struct(data); err != nil { - log.Error(operationID, "data args validate err", err.Error(), r) - return false, 204, err.Error(), nil - - } - return true, 0, "", data - case constant.WSSendSignalMsg: - data := pbRtc.SignalReq{} - if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error(operationID, "Decode Map struct err", err.Error(), r) - return false, 203, err.Error(), nil - } - if err := validate.Struct(data); err != nil { - log.Error(operationID, "data args validate err", err.Error(), r) - return false, 204, err.Error(), nil - - } - return true, 0, "", &data - case constant.WSPullMsgBySeqList: - data := sdkws.PullMessageBySeqListReq{} - if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error(operationID, "Decode Map struct err", err.Error(), r) - return false, 203, err.Error(), nil - } - if err := validate.Struct(data); err != nil { - log.Error(operationID, "data args validate err", err.Error(), r) - return false, 204, err.Error(), nil - - } - return true, 0, "", data - case constant.WsSetBackgroundStatus: - data := sdkws.SetAppBackgroundStatusReq{} - if err := proto.Unmarshal(m.Data, &data); err != nil { - log.Error(operationID, "Decode Map struct err", err.Error(), r) - return false, 203, err.Error(), nil - } - if err := validate.Struct(data); err != nil { - log.Error(operationID, "data args validate err", err.Error(), r) - return false, 204, err.Error(), nil - - } - return true, 0, "", &data - default: - } - return false, 204, "args err", nil -} diff --git a/internal/msggateway/ws_server.go b/internal/msggateway/ws_server.go deleted file mode 100644 index 042fa583b..000000000 --- a/internal/msggateway/ws_server.go +++ /dev/null @@ -1,514 +0,0 @@ -package msggateway - -import ( - "OpenIM/pkg/common/config" - "OpenIM/pkg/common/constant" - "OpenIM/pkg/common/log" - "OpenIM/pkg/common/prome" - "OpenIM/pkg/common/tokenverify" - "OpenIM/pkg/errs" - "OpenIM/pkg/proto/msggateway" - "OpenIM/pkg/utils" - "bytes" - "compress/gzip" - "context" - "encoding/gob" - "io/ioutil" - "strconv" - "strings" - - go_redis "github.com/go-redis/redis/v8" - "github.com/pkg/errors" - - //"gopkg.in/errgo.v2/errors" - "net/http" - "sync" - "time" - - "github.com/gorilla/websocket" -) - -type UserConn struct { - *websocket.Conn - w *sync.Mutex - PlatformID int32 - PushedMaxSeq uint32 - IsCompress bool - userID string - IsBackground bool - token string - connID string -} - -type WServer struct { - wsAddr string - wsMaxConnNum int - wsUpGrader *websocket.Upgrader - wsConnToUser map[*UserConn]map[int]string - wsUserToConn map[string]map[int]*UserConn -} - -func (ws *WServer) onInit(wsPort int) { - ws.wsAddr = ":" + utils.IntToString(wsPort) - ws.wsMaxConnNum = config.Config.LongConnSvr.WebsocketMaxConnNum - ws.wsConnToUser = make(map[*UserConn]map[int]string) - ws.wsUserToConn = make(map[string]map[int]*UserConn) - ws.wsUpGrader = &websocket.Upgrader{ - HandshakeTimeout: time.Duration(config.Config.LongConnSvr.WebsocketTimeOut) * time.Second, - ReadBufferSize: config.Config.LongConnSvr.WebsocketMaxMsgLen, - CheckOrigin: func(r *http.Request) bool { return true }, - } -} - -func (ws *WServer) run() { - http.HandleFunc("/", ws.wsHandler) //Get request from client to handle by wsHandler - err := http.ListenAndServe(ws.wsAddr, nil) //Start listening - if err != nil { - panic("Ws listening err:" + err.Error()) - } -} - -func (ws *WServer) wsHandler(w http.ResponseWriter, r *http.Request) { - query := r.URL.Query() - operationID := "" - if len(query[constant.OperationID]) != 0 { - operationID = query[constant.OperationID][0] - } else { - operationID = utils.OperationIDGenerator() - } - log.Debug(operationID, utils.GetSelfFuncName(), " args: ", query) - if isPass, compression := ws.headerCheck(w, r, operationID); isPass { - conn, err := ws.wsUpGrader.Upgrade(w, r, nil) //Conn is obtained through the upgraded escalator - if err != nil { - log.Error(operationID, "upgrade http conn err", err.Error(), query) - return - } else { - newConn := &UserConn{conn, new(sync.Mutex), utils.StringToInt32(query["platformID"][0]), 0, compression, query["sendID"][0], false, query["token"][0], conn.RemoteAddr().String() + "_" + strconv.Itoa(int(utils.GetCurrentTimestampByMill()))} - userCount++ - ws.addUserConn(query["sendID"][0], utils.StringToInt(query["platformID"][0]), newConn, query["token"][0], newConn.connID, operationID) - go ws.readMsg(newConn) - } - } else { - log.Error(operationID, "headerCheck failed ") - } -} - -func (ws *WServer) readMsg(conn *UserConn) { - for { - messageType, msg, err := conn.ReadMessage() - if messageType == websocket.PingMessage { - log.NewInfo("", "this is a pingMessage") - } - if err != nil { - log.NewWarn("", "WS ReadMsg error ", " userIP", conn.RemoteAddr().String(), "userUid", "platform", "error", err.Error()) - userCount-- - ws.delUserConn(conn) - return - } - log.NewDebug("", "size", utils.ByteSize(uint64(len(msg)))) - if conn.IsCompress { - buff := bytes.NewBuffer(msg) - reader, err := gzip.NewReader(buff) - if err != nil { - log.NewWarn("", "un gzip read failed") - continue - } - msg, err = ioutil.ReadAll(reader) - if err != nil { - log.NewWarn("", "ReadAll failed") - continue - } - err = reader.Close() - if err != nil { - log.NewWarn("", "reader close failed") - } - } - ws.msgParse(conn, msg) - } -} - -func (ws *WServer) SetWriteTimeout(conn *UserConn, timeout int) { - conn.w.Lock() - defer conn.w.Unlock() - conn.SetWriteDeadline(time.Now().Add(time.Duration(timeout) * time.Second)) -} - -func (ws *WServer) writeMsg(conn *UserConn, a int, msg []byte) error { - conn.w.Lock() - defer conn.w.Unlock() - if conn.IsCompress { - var buffer bytes.Buffer - gz := gzip.NewWriter(&buffer) - if _, err := gz.Write(msg); err != nil { - return utils.Wrap(err, "") - } - if err := gz.Close(); err != nil { - return utils.Wrap(err, "") - } - msg = buffer.Bytes() - } - conn.SetWriteDeadline(time.Now().Add(time.Duration(60) * time.Second)) - return conn.WriteMessage(a, msg) -} - -func (ws *WServer) SetWriteTimeoutWriteMsg(conn *UserConn, a int, msg []byte, timeout int) error { - conn.w.Lock() - defer conn.w.Unlock() - conn.SetWriteDeadline(time.Now().Add(time.Duration(timeout) * time.Second)) - return conn.WriteMessage(a, msg) -} - -func (ws *WServer) MultiTerminalLoginRemoteChecker(userID string, platformID int32, token string, operationID string) { - grpcCons := rpc.GetDefaultGatewayConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), operationID) - log.NewInfo(operationID, utils.GetSelfFuncName(), "args grpcCons: ", userID, platformID, grpcCons) - for _, v := range grpcCons { - if v.Target() == rpcSvr.target { - log.Debug(operationID, "Filter out this node ", rpcSvr.target) - continue - } - log.Debug(operationID, "call this node ", v.Target(), rpcSvr.target) - client := msggateway.NewRelayClient(v) - req := &msggateway.MultiTerminalLoginCheckReq{OperationID: operationID, PlatformID: platformID, UserID: userID, Token: token} - log.NewInfo(operationID, "MultiTerminalLoginCheckReq ", client, req.String()) - resp, err := client.MultiTerminalLoginCheck(context.Background(), req) - if err != nil { - log.Error(operationID, "MultiTerminalLoginCheck failed ", err.Error()) - continue - } - if resp.ErrCode != 0 { - log.Error(operationID, "MultiTerminalLoginCheck errCode, errMsg: ", resp.ErrCode, resp.ErrMsg) - continue - } - log.Debug(operationID, "MultiTerminalLoginCheck resp ", resp.String()) - } -} - -func (ws *WServer) MultiTerminalLoginCheckerWithLock(uid string, platformID int, token string, operationID string) { - rwLock.Lock() - defer rwLock.Unlock() - log.NewInfo(operationID, utils.GetSelfFuncName(), " rpc args: ", uid, platformID, token) - switch config.Config.MultiLoginPolicy { - case constant.PCAndOther: - if constant.PlatformNameToClass(constant.PlatformIDToName(platformID)) == constant.TerminalPC { - return - } - fallthrough - case constant.AllLoginButSameTermKick: - if oldConnMap, ok := ws.wsUserToConn[uid]; ok { // user->map[platform->conn] - if oldConn, ok := oldConnMap[platformID]; ok { - log.NewDebug(operationID, uid, platformID, "kick old conn") - m, err := db.DB.GetTokenMapByUidPid(uid, constant.PlatformIDToName(platformID)) - if err != nil && err != go_redis.Nil { - log.NewError(operationID, "get token from redis err", err.Error(), uid, constant.PlatformIDToName(platformID)) - return - } - if m == nil { - log.NewError(operationID, "get token from redis err", "m is nil", uid, constant.PlatformIDToName(platformID)) - return - } - log.NewDebug(operationID, "get token map is ", m, uid, constant.PlatformIDToName(platformID)) - - for k, _ := range m { - if k != token { - m[k] = constant.KickedToken - } - } - log.NewDebug(operationID, "set token map is ", m, uid, constant.PlatformIDToName(platformID)) - err = db.DB.SetTokenMapByUidPid(uid, platformID, m) - if err != nil { - log.NewError(operationID, "SetTokenMapByUidPid err", err.Error(), uid, platformID, m) - return - } - err = oldConn.Close() - //delete(oldConnMap, platformID) - ws.wsUserToConn[uid] = oldConnMap - if len(oldConnMap) == 0 { - delete(ws.wsUserToConn, uid) - } - delete(ws.wsConnToUser, oldConn) - if err != nil { - log.NewError(operationID, "conn close err", err.Error(), uid, platformID) - } - } else { - log.NewWarn(operationID, "abnormal uid-conn ", uid, platformID, oldConnMap[platformID]) - } - - } else { - log.NewDebug(operationID, "no other conn", ws.wsUserToConn, uid, platformID) - } - case constant.SingleTerminalLogin: - case constant.WebAndOther: - } -} - -func (ws *WServer) MultiTerminalLoginChecker(uid string, platformID int, newConn *UserConn, token string, operationID string) { - switch config.Config.MultiLoginPolicy { - case constant.PCAndOther: - if constant.PlatformNameToClass(constant.PlatformIDToName(platformID)) == constant.TerminalPC { - return - } - fallthrough - case constant.AllLoginButSameTermKick: - if oldConnMap, ok := ws.wsUserToConn[uid]; ok { // user->map[platform->conn] - if oldConn, ok := oldConnMap[platformID]; ok { - log.NewDebug(operationID, uid, platformID, "kick old conn") - ws.sendKickMsg(oldConn) - m, err := db.DB.GetTokenMapByUidPid(uid, constant.PlatformIDToName(platformID)) - if err != nil && err != go_redis.Nil { - log.NewError(operationID, "get token from redis err", err.Error(), uid, constant.PlatformIDToName(platformID)) - return - } - if m == nil { - log.NewError(operationID, "get token from redis err", "m is nil", uid, constant.PlatformIDToName(platformID)) - return - } - log.NewDebug(operationID, "get token map is ", m, uid, constant.PlatformIDToName(platformID)) - - for k, _ := range m { - if k != token { - m[k] = constant.KickedToken - } - } - log.NewDebug(operationID, "set token map is ", m, uid, constant.PlatformIDToName(platformID)) - err = db.DB.SetTokenMapByUidPid(uid, platformID, m) - if err != nil { - log.NewError(operationID, "SetTokenMapByUidPid err", err.Error(), uid, platformID, m) - return - } - err = oldConn.Close() - delete(oldConnMap, platformID) - ws.wsUserToConn[uid] = oldConnMap - if len(oldConnMap) == 0 { - delete(ws.wsUserToConn, uid) - } - delete(ws.wsConnToUser, oldConn) - if err != nil { - log.NewError(operationID, "conn close err", err.Error(), uid, platformID) - } - callbackResp := callbackUserKickOff(operationID, uid, platformID) - if callbackResp.ErrCode != 0 { - log.NewError(operationID, utils.GetSelfFuncName(), "callbackUserOffline failed", callbackResp) - } - } else { - log.Debug(operationID, "normal uid-conn ", uid, platformID, oldConnMap[platformID]) - } - - } else { - log.NewDebug(operationID, "no other conn", ws.wsUserToConn, uid, platformID) - } - - case constant.SingleTerminalLogin: - case constant.WebAndOther: - } -} -func (ws *WServer) sendKickMsg(oldConn *UserConn) { - mReply := Resp{ - ReqIdentifier: constant.WSKickOnlineMsg, - ErrCode: int32(errs.ErrTokenInvalid.Code()), - ErrMsg: errs.ErrTokenInvalid.Msg(), - } - var b bytes.Buffer - enc := gob.NewEncoder(&b) - err := enc.Encode(mReply) - if err != nil { - log.NewError(mReply.OperationID, mReply.ReqIdentifier, mReply.ErrCode, mReply.ErrMsg, "Encode Msg error", oldConn.RemoteAddr().String(), err.Error()) - return - } - err = ws.writeMsg(oldConn, websocket.BinaryMessage, b.Bytes()) - if err != nil { - log.NewError(mReply.OperationID, mReply.ReqIdentifier, mReply.ErrCode, mReply.ErrMsg, "sendKickMsg WS WriteMsg error", oldConn.RemoteAddr().String(), err.Error()) - } -} - -func (ws *WServer) addUserConn(uid string, platformID int, conn *UserConn, token string, connID, operationID string) { - rwLock.Lock() - defer rwLock.Unlock() - log.Info(operationID, utils.GetSelfFuncName(), " args: ", uid, platformID, conn, token, "ip: ", conn.RemoteAddr().String()) - callbackResp := callbackUserOnline(operationID, uid, platformID, token, false, connID) - if callbackResp.ErrCode != 0 { - log.NewError(operationID, utils.GetSelfFuncName(), "callbackUserOnline resp:", callbackResp) - } - go ws.MultiTerminalLoginRemoteChecker(uid, int32(platformID), token, operationID) - ws.MultiTerminalLoginChecker(uid, platformID, conn, token, operationID) - if oldConnMap, ok := ws.wsUserToConn[uid]; ok { - oldConnMap[platformID] = conn - ws.wsUserToConn[uid] = oldConnMap - log.Debug(operationID, "user not first come in, add conn ", uid, platformID, conn, oldConnMap) - } else { - i := make(map[int]*UserConn) - i[platformID] = conn - ws.wsUserToConn[uid] = i - log.Debug(operationID, "user first come in, new user, conn", uid, platformID, conn, ws.wsUserToConn[uid]) - } - if oldStringMap, ok := ws.wsConnToUser[conn]; ok { - oldStringMap[platformID] = uid - ws.wsConnToUser[conn] = oldStringMap - } else { - i := make(map[int]string) - i[platformID] = uid - ws.wsConnToUser[conn] = i - } - count := 0 - for _, v := range ws.wsUserToConn { - count = count + len(v) - } - prome.GaugeInc(prome.OnlineUserGauge) - log.Debug(operationID, "WS Add operation", "", "wsUser added", ws.wsUserToConn, "connection_uid", uid, "connection_platform", constant.PlatformIDToName(platformID), "online_user_num", len(ws.wsUserToConn), "online_conn_num", count) -} - -func (ws *WServer) delUserConn(conn *UserConn) { - rwLock.Lock() - defer rwLock.Unlock() - operationID := utils.OperationIDGenerator() - var uid string - var platform int - if oldStringMap, okg := ws.wsConnToUser[conn]; okg { - for k, v := range oldStringMap { - platform = k - uid = v - } - if oldConnMap, ok := ws.wsUserToConn[uid]; ok { - delete(oldConnMap, platform) - ws.wsUserToConn[uid] = oldConnMap - if len(oldConnMap) == 0 { - delete(ws.wsUserToConn, uid) - } - count := 0 - for _, v := range ws.wsUserToConn { - count = count + len(v) - } - log.Debug(operationID, "WS delete operation", "", "wsUser deleted", ws.wsUserToConn, "disconnection_uid", uid, "disconnection_platform", platform, "online_user_num", len(ws.wsUserToConn), "online_conn_num", count) - } else { - log.Debug(operationID, "WS delete operation", "", "wsUser deleted", ws.wsUserToConn, "disconnection_uid", uid, "disconnection_platform", platform, "online_user_num", len(ws.wsUserToConn)) - } - delete(ws.wsConnToUser, conn) - } - err := conn.Close() - if err != nil { - log.Error(operationID, " close err", "", "uid", uid, "platform", platform) - } - if conn.PlatformID == 0 || conn.connID == "" { - log.NewWarn(operationID, utils.GetSelfFuncName(), "PlatformID or connID is null", conn.PlatformID, conn.connID) - } - callbackResp := callbackUserOffline(operationID, conn.userID, int(conn.PlatformID), conn.connID) - if callbackResp.ErrCode != 0 { - log.NewError(operationID, utils.GetSelfFuncName(), "callbackUserOffline failed", callbackResp) - } - prome.GaugeDec(prome.OnlineUserGauge) - -} - -func (ws *WServer) getUserConn(uid string, platform int) *UserConn { - rwLock.RLock() - defer rwLock.RUnlock() - if connMap, ok := ws.wsUserToConn[uid]; ok { - if conn, flag := connMap[platform]; flag { - return conn - } - } - return nil -} -func (ws *WServer) getUserAllCons(uid string) map[int]*UserConn { - rwLock.RLock() - defer rwLock.RUnlock() - if connMap, ok := ws.wsUserToConn[uid]; ok { - newConnMap := make(map[int]*UserConn) - for k, v := range connMap { - newConnMap[k] = v - } - return newConnMap - } - return nil -} - -// func (ws *WServer) getUserUid(conn *UserConn) (uid string, platform int) { -// rwLock.RLock() -// defer rwLock.RUnlock() -// -// if stringMap, ok := ws.wsConnToUser[conn]; ok { -// for k, v := range stringMap { -// platform = k -// uid = v -// } -// return uid, platform -// } -// return "", 0 -// } - -func WsVerifyToken(token, uid string, platformID string, operationID string) (bool, error, string) { - -} - -func (ws *WServer) headerCheck(w http.ResponseWriter, r *http.Request, operationID string) (isPass, compression bool) { - status := http.StatusUnauthorized - query := r.URL.Query() - if len(query["token"]) != 0 && len(query["sendID"]) != 0 && len(query["platformID"]) != 0 { - if ok, err, msg := tokenverify.WsVerifyToken(query["token"][0], query["sendID"][0], query["platformID"][0], operationID); !ok { - if errors.Is(err, errs.ErrTokenExpired) { - status = int(errs.ErrTokenExpired.ErrCode) - } - if errors.Is(err, errs.ErrTokenInvalid) { - status = int(errs.ErrTokenInvalid.ErrCode) - } - if errors.Is(err, errs.ErrTokenMalformed) { - status = int(errs.ErrTokenMalformed.ErrCode) - } - if errors.Is(err, errs.ErrTokenNotValidYet) { - status = int(errs.ErrTokenNotValidYet.ErrCode) - } - if errors.Is(err, errs.ErrTokenUnknown) { - status = int(errs.ErrTokenUnknown.ErrCode) - } - if errors.Is(err, errs.ErrTokenKicked) { - status = int(errs.ErrTokenKicked.ErrCode) - } - if errors.Is(err, errs.ErrTokenDifferentPlatformID) { - status = int(errs.ErrTokenDifferentPlatformID.ErrCode) - } - if errors.Is(err, errs.ErrTokenDifferentUserID) { - status = int(errs.ErrTokenDifferentUserID.ErrCode) - } - //switch errors.Cause(err) { - //case errs.ErrTokenExpired: - // status = int(errs.ErrTokenExpired.ErrCode) - //case errs.ErrTokenInvalid: - // status = int(errs.ErrTokenInvalid.ErrCode) - //case errs.ErrTokenMalformed: - // status = int(errs.ErrTokenMalformed.ErrCode) - //case errs.ErrTokenNotValidYet: - // status = int(errs.ErrTokenNotValidYet.ErrCode) - //case errs.ErrTokenUnknown: - // status = int(errs.ErrTokenUnknown.ErrCode) - //case errs.ErrTokenKicked: - // status = int(errs.ErrTokenKicked.ErrCode) - //case errs.ErrTokenDifferentPlatformID: - // status = int(errs.ErrTokenDifferentPlatformID.ErrCode) - //case errs.ErrTokenDifferentUserID: - // status = int(errs.ErrTokenDifferentUserID.ErrCode) - //} - - log.Error(operationID, "Token verify failed ", "query ", query, msg, err.Error(), "status: ", status) - w.Header().Set("Sec-Websocket-Version", "13") - w.Header().Set("ws_err_msg", err.Error()) - http.Error(w, err.Error(), status) - return false, false - } else { - if r.Header.Get("compression") == "gzip" { - compression = true - } - if len(query["compression"]) != 0 && query["compression"][0] == "gzip" { - compression = true - } - log.Info(operationID, "Connection Authentication Success", "", "token ", query["token"][0], "userID ", query["sendID"][0], "platformID ", query["platformID"][0], "compression", compression) - return true, compression - } - } else { - status = int(errs.ErrArgs.ErrCode) - log.Error(operationID, "Args err ", "query ", query) - w.Header().Set("Sec-Websocket-Version", "13") - errMsg := "args err, need token, sendID, platformID" - w.Header().Set("ws_err_msg", errMsg) - http.Error(w, errMsg, status) - return false, false - } -} diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 16069a82a..a6bb4edd0 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -1,16 +1,6 @@ package constant const ( - //Websocket Protocol - WSGetNewestSeq = 1001 - WSPullMsgBySeqList = 1002 - WSSendMsg = 1003 - WSSendSignalMsg = 1004 - WSPushMsg = 2001 - WSKickOnlineMsg = 2002 - WsLogoutMsg = 2003 - WsSetBackgroundStatus = 2004 - WSDataError = 3001 ///ContentType //UserRelated diff --git a/pkg/common/tokenverify/jwt_token.go b/pkg/common/tokenverify/jwt_token.go index 311712a2a..4065c39cc 100644 --- a/pkg/common/tokenverify/jwt_token.go +++ b/pkg/common/tokenverify/jwt_token.go @@ -90,3 +90,6 @@ func ParseRedisInterfaceToken(redisToken interface{}) (*Claims, error) { func IsManagerUserID(opUserID string) bool { return utils.IsContain(opUserID, config.Config.Manager.AppManagerUid) } +func WsVerifyToken(token, userID, platformID string) error { + return nil +} From d3b711e91b001f125daf90bf1c2003d237a3112d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 19:25:27 +0800 Subject: [PATCH 10/40] script --- cmd/msggateway/main.go | 41 ++++------------- go.mod | 2 +- go.sum | 74 ++++++++++++++++++++++++++++++- internal/msggateway/hub_server.go | 53 ++++------------------ internal/msggateway/init.go | 30 +++++++++++++ internal/rpc/auth/auth.go | 6 +-- internal/startrpc/start.go | 14 +++--- pkg/common/cmd/msg_gateway.go | 10 ++--- script/check_all.sh | 2 +- script/start_all.sh | 2 +- 10 files changed, 137 insertions(+), 97 deletions(-) create mode 100644 internal/msggateway/init.go diff --git a/cmd/msggateway/main.go b/cmd/msggateway/main.go index e2f2a7af8..60722813c 100644 --- a/cmd/msggateway/main.go +++ b/cmd/msggateway/main.go @@ -1,41 +1,18 @@ package main import ( - "OpenIM/internal/msggateway" - "OpenIM/pkg/common/config" - "OpenIM/pkg/common/constant" - "OpenIM/pkg/common/log" - "flag" + "OpenIM/pkg/common/cmd" "fmt" - "sync" - "time" + "os" ) func main() { - if err := config.InitConfig(""); err != nil { - panic(err.Error()) + msgGatewayCmd := cmd.NewMsgGatewayCmd() + msgGatewayCmd.AddWsPortFlag() + msgGatewayCmd.AddPortFlag() + msgGatewayCmd.AddPrometheusPortFlag() + if err := msgGatewayCmd.Exec(); err != nil { + fmt.Println(err.Error()) + os.Exit(1) } - log.NewPrivateLog(constant.LogFileName) - defaultRpcPorts := config.Config.RpcPort.OpenImMessageGatewayPort - defaultWsPorts := config.Config.LongConnSvr.WebsocketPort - defaultPromePorts := config.Config.Prometheus.MessageGatewayPrometheusPort - rpcPort := flag.Int("rpc_port", defaultRpcPorts[0], "rpc listening port") - wsPort := flag.Int("ws_port", defaultWsPorts[0], "ws listening port") - prometheusPort := flag.Int("prometheus_port", defaultPromePorts[0], "PushrometheusPort default listen port") - flag.Parse() - var wg sync.WaitGroup - wg.Add(1) - fmt.Println("start rpc/msg_gateway server, port: ", *rpcPort, *wsPort, *prometheusPort, ", OpenIM version: ", constant.CurrentVersion, "\n") - longServer, err := msggateway.NewWsServer( - msggateway.WithPort(*wsPort), - msggateway.WithMaxConnNum(int64(config.Config.LongConnSvr.WebsocketMaxConnNum)), - msggateway.WithHandshakeTimeout(time.Duration(config.Config.LongConnSvr.WebsocketTimeOut)*time.Second), - msggateway.WithMessageMaxMsgLength(config.Config.LongConnSvr.WebsocketMaxMsgLen)) - if err != nil { - panic(err.Error()) - } - hubServer := msggateway.NewServer(*rpcPort, longServer) - go hubServer.Start() - go hubServer.LongConnServer.Run() - wg.Wait() } diff --git a/go.mod b/go.mod index ea1f058f2..78ed767d7 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module OpenIM -go 1.18 +go 1.16 require ( firebase.google.com/go v3.13.0+incompatible diff --git a/go.sum b/go.sum index af4db310f..80061fabc 100644 --- a/go.sum +++ b/go.sum @@ -26,6 +26,7 @@ cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+Y cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= @@ -38,6 +39,7 @@ cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= +cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= @@ -80,6 +82,7 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= +cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= @@ -142,6 +145,7 @@ cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4c cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= +cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= @@ -163,6 +167,7 @@ cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1 cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= @@ -190,6 +195,7 @@ cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZ cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= +cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= @@ -202,6 +208,7 @@ cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+ cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= +cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= @@ -210,11 +217,13 @@ cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiP cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= +cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= cloud.google.com/go/longrunning v0.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= +cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -263,6 +272,9 @@ cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2k cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= +cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= +cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= @@ -317,6 +329,7 @@ cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5 cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= +cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= @@ -357,6 +370,7 @@ cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= +cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= @@ -375,8 +389,8 @@ firebase.google.com/go v3.13.0+incompatible/go.mod h1:xlah6XbEyW6tbfSklcfe5FHJIw github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenIMSDK/openKeeper v0.0.2 h1:TlYBlWcNPO9vWK65jjoI0R3cgpY3bfgHJiDUhdb3Qxk= -github.com/OpenIMSDK/openKeeper v0.0.2/go.mod h1:RvyRXEcvWbonkmHLtT8KxGSCNlXY7OfDohhu53E6INU= +github.com/OpenIMSDK/openKeeper v0.0.3 h1:pkyLFuIau58SjQLeg4CWMSkP79nbmR3DP0NfBJZ7Kr8= +github.com/OpenIMSDK/openKeeper v0.0.3/go.mod h1:RvyRXEcvWbonkmHLtT8KxGSCNlXY7OfDohhu53E6INU= github.com/OpenIMSDK/open_utils v1.0.8 h1:IopxWgJwEF5ZAPsRuiZZOfcxNOQOCt/p8VDENcHN9r4= github.com/OpenIMSDK/open_utils v1.0.8/go.mod h1:FLoaQblWUVKQgqt2LrNzfSZLT6D3DICBn1kcOMDLUOI= github.com/Shopify/sarama v1.29.0 h1:ARid8o8oieau9XrHI55f/L3EoRAhm9px6sonbD7yuUE= @@ -399,6 +413,8 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bwmarrin/snowflake v0.3.0 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0= github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= @@ -447,10 +463,13 @@ github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/frankban/quicktest v1.11.3 h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/gin-gonic/gin v1.8.2 h1:UzKToD9/PoFj/V4rvlKqTRKnQYyz8Sc1MJlv4JHPtvY= github.com/gin-gonic/gin v1.8.2/go.mod h1:qw5AYuDrzRTnhvusDsrov+fDIxp9Dleuu12h8nfB398= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= @@ -473,6 +492,7 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-playground/validator/v10 v10.10.0/go.mod h1:74x4gJWsvQexRdW8Pn3dXSGrTK4nAUsbPlLADvpJkos= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI= @@ -482,8 +502,11 @@ github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfC github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-zookeeper/zk v1.0.3 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg= github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= +github.com/goccy/go-json v0.9.7/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/goccy/go-json v0.10.0 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA= github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= @@ -562,10 +585,12 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -585,6 +610,7 @@ github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMd github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+HVt/4epWDjd4= github.com/gorilla/sessions v1.2.1/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc= @@ -596,6 +622,7 @@ github.com/hashicorp/go-uuid v1.0.2 h1:cfejS+Tpcp13yd5nYHWDI6qVCny6wyX2Mt5SGur2I github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= @@ -633,11 +660,13 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.12.2/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= +github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek= @@ -666,6 +695,8 @@ github.com/lithammer/shortuuid v3.0.0+incompatible h1:NcD0xWW/MZYXEHa6ITy6kaXN5n github.com/lithammer/shortuuid v3.0.0+incompatible/go.mod h1:FR74pbAuElzOUuenUHTK2Tciko1/vKuIKS9dSkDrA4w= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= @@ -694,12 +725,24 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ= github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= github.com/olivere/elastic/v7 v7.0.23 h1:b7tjMogDMhf2CisGI+L02LXLVa0ZyE82Z15XfW1e8t8= github.com/olivere/elastic/v7 v7.0.23/go.mod h1:OuWmD2DiuYhddWegBKPWQuelVKBLrW0fa/VUYgxuGTY= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/pierrec/lz4 v2.6.0+incompatible h1:Ix9yFKn1nSPBLFl/yZknTp8TU5G4Ps0JDmguYK6iH1A= @@ -754,10 +797,13 @@ github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414/go.mod h1:gi+0 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/assertions v1.1.1/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= github.com/smartystreets/go-aws-auth v0.0.0-20180515143844-0c1422d1fdb9/go.mod h1:SnhjPscd9TpLiy1LpzGSKh3bXCfxxXuqd9xmQJy3slM= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/smartystreets/gunit v1.4.2/go.mod h1:ZjM1ozSIMJlAz/ay4SG8PeKF00ckUp+zMHZXV9/bvak= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA= @@ -782,6 +828,9 @@ github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20210325043845-84a0811633ca h1:G github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20210325043845-84a0811633ca/go.mod h1:b18KQa4IxHbxeseW1GcZox53d7J0z39VNONTxvvlkXw= github.com/tidwall/pretty v1.0.0 h1:HsD+QiTn7sK6flMKIvNmpqz1qrpP3Ps6jOKIKMooyg4= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= +github.com/ugorji/go v1.2.7 h1:qYhyWUUd6WbiM+C6JZAUkIJt/1WrjzNHY9+KCIjVqTo= +github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ugorji/go/codec v1.2.8 h1:sgBJS6COt0b/P40VouWKdseidkDgHxYGm0SAglUHfP0= github.com/ugorji/go/codec v1.2.8/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= @@ -821,6 +870,7 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20201112155050-0c6587e931a9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE= @@ -837,6 +887,7 @@ golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EH golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/image v0.0.0-20220902085622-e7cb96979f69/go.mod h1:doUCurBvlfPMKfmIpRIywoHmhN3VyhnoFDbvIEWF4hY= golang.org/x/image v0.3.0 h1:HTDXbdK9bjfSWkPzDJIw89W8CAtfFGduujWs33NLLsg= golang.org/x/image v0.3.0/go.mod h1:fXd9211C/0VTlYuAcOhW8dY/RtEJqODXOWBDpmYBf+A= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -865,6 +916,7 @@ golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -887,6 +939,7 @@ golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= @@ -900,6 +953,7 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210427231257-85d9c07bbe3a/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -962,6 +1016,7 @@ golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -972,8 +1027,11 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -997,6 +1055,7 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1041,6 +1100,7 @@ golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXR golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1058,6 +1118,7 @@ golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1066,6 +1127,7 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1106,6 +1168,7 @@ golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82u golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= @@ -1287,7 +1350,10 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= +google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= +google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w= google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -1325,6 +1391,7 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= google.golang.org/grpc v1.52.3 h1:pf7sOysg4LdgBqduXveGKrcEwbStiK2rtfghdzlUYDQ= google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= @@ -1351,9 +1418,12 @@ gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/ini.v1 v1.57.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.2 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/internal/msggateway/hub_server.go b/internal/msggateway/hub_server.go index 0e1bd6953..a33e9f5e6 100644 --- a/internal/msggateway/hub_server.go +++ b/internal/msggateway/hub_server.go @@ -1,66 +1,31 @@ package msggateway import ( - "OpenIM/internal/common/network" + "OpenIM/internal/startrpc" "OpenIM/pkg/common/config" "OpenIM/pkg/common/constant" - "OpenIM/pkg/common/mw" "OpenIM/pkg/common/prome" "OpenIM/pkg/common/tokenverify" + "OpenIM/pkg/discoveryregistry" "OpenIM/pkg/errs" "OpenIM/pkg/proto/msggateway" "OpenIM/pkg/utils" "context" - "fmt" - "github.com/OpenIMSDK/openKeeper" - grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus" "google.golang.org/grpc" - "net" ) -func (s *Server) Start() error { - zkClient, err := openKeeper.NewClient(config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema, 10, "", "") - if err != nil { - return err - } - defer zkClient.Close() - registerIP, err := network.GetRpcRegisterIP(config.Config.RpcRegisterIP) - if err != nil { - return err - } - listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", config.Config.ListenIP, s.rpcPort)) - if err != nil { - panic("listening err:" + err.Error()) - } - defer listener.Close() - var options []grpc.ServerOption - options = append(options, mw.GrpcServer()) // ctx 中间件 - if config.Config.Prometheus.Enable { - prome.NewGrpcRequestCounter() - prome.NewGrpcRequestFailedCounter() - prome.NewGrpcRequestSuccessCounter() - options = append(options, []grpc.ServerOption{ - //grpc.UnaryInterceptor(prome.UnaryServerInterceptorPrometheus), - grpc.StreamInterceptor(grpcPrometheus.StreamServerInterceptor), - grpc.UnaryInterceptor(grpcPrometheus.UnaryServerInterceptor), - }...) - } - srv := grpc.NewServer(options...) - defer srv.GracefulStop() - msggateway.RegisterMsgGatewayServer(srv, s) - err = zkClient.Register("", registerIP, s.rpcPort) - if err != nil { - return err - } - err = srv.Serve(listener) - if err != nil { - return err - } +func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error { + msggateway.RegisterMsgGatewayServer(server, &Server{}) return nil } +func (s *Server) Start() error { + return startrpc.Start(s.rpcPort, config.Config.RpcRegisterName.OpenImMessageGatewayName, s.prometheusPort, Start) +} + type Server struct { rpcPort int + prometheusPort int LongConnServer LongConnServer pushTerminal []int //rpcServer *RpcServer diff --git a/internal/msggateway/init.go b/internal/msggateway/init.go new file mode 100644 index 000000000..0370e9e1b --- /dev/null +++ b/internal/msggateway/init.go @@ -0,0 +1,30 @@ +package msggateway + +import ( + "OpenIM/pkg/common/config" + "OpenIM/pkg/common/constant" + "OpenIM/pkg/common/log" + "fmt" + "sync" + "time" +) + +func RunWsAndServer(rpcPort, wsPort, prometheusPort int) error { + var wg sync.WaitGroup + wg.Add(1) + log.NewPrivateLog(constant.LogFileName) + fmt.Println("start rpc/msg_gateway server, port: ", rpcPort, wsPort, prometheusPort, ", OpenIM version: ", config.Version) + longServer, err := NewWsServer( + WithPort(wsPort), + WithMaxConnNum(int64(config.Config.LongConnSvr.WebsocketMaxConnNum)), + WithHandshakeTimeout(time.Duration(config.Config.LongConnSvr.WebsocketTimeOut)*time.Second), + WithMessageMaxMsgLength(config.Config.LongConnSvr.WebsocketMaxMsgLen)) + if err != nil { + return err + } + hubServer := NewServer(rpcPort, longServer) + go hubServer.Start() + go hubServer.LongConnServer.Run() + wg.Wait() + return nil +} diff --git a/internal/rpc/auth/auth.go b/internal/rpc/auth/auth.go index 28ac8d000..9ca100a02 100644 --- a/internal/rpc/auth/auth.go +++ b/internal/rpc/auth/auth.go @@ -9,7 +9,7 @@ import ( "OpenIM/pkg/common/log" "OpenIM/pkg/common/tokenverify" "OpenIM/pkg/common/tracelog" - discoveryRegistry "OpenIM/pkg/discoveryregistry" + "OpenIM/pkg/discoveryregistry" "OpenIM/pkg/errs" pbAuth "OpenIM/pkg/proto/auth" "OpenIM/pkg/proto/msggateway" @@ -21,10 +21,10 @@ import ( type authServer struct { authDatabase controller.AuthDatabase userCheck *check.UserCheck - RegisterCenter discoveryRegistry.SvcDiscoveryRegistry + RegisterCenter discoveryregistry.SvcDiscoveryRegistry } -func Start(client discoveryRegistry.SvcDiscoveryRegistry, server *grpc.Server) error { +func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error { rdb, err := cache.NewRedis() if err != nil { return err diff --git a/internal/startrpc/start.go b/internal/startrpc/start.go index 4e2fb8727..3b9dfdc40 100644 --- a/internal/startrpc/start.go +++ b/internal/startrpc/start.go @@ -16,13 +16,11 @@ import ( "net" ) -func start(rpcPort int, rpcRegisterName string, prometheusPorts int, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error, options []grpc.ServerOption) error { - flagRpcPort := flag.Int("port", rpcPort, "get RpcGroupPort from cmd,default 16000 as port") - flagPrometheusPort := flag.Int("prometheus_port", prometheusPorts, "groupPrometheusPort default listen port") +func start(rpcPort int, rpcRegisterName string, prometheusPort int, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error, options []grpc.ServerOption) error { flag.Parse() - fmt.Println("start group rpc server, port: ", *flagRpcPort, ", OpenIM version: ", config.Version) + fmt.Println("start group rpc server, port: ", rpcPort, ", OpenIM version: ", config.Version) log.NewPrivateLog(constant.LogFileName) - listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", config.Config.ListenIP, *flagRpcPort)) + listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", config.Config.ListenIP, rpcPort)) if err != nil { return err } @@ -49,12 +47,12 @@ func start(rpcPort int, rpcRegisterName string, prometheusPorts int, rpcFn func( } srv := grpc.NewServer(options...) defer srv.GracefulStop() - err = zkClient.Register(rpcRegisterName, registerIP, *flagRpcPort) + err = zkClient.Register(rpcRegisterName, registerIP, rpcPort) if err != nil { return err } - if config.Config.Prometheus.Enable { - err := prome.StartPrometheusSrv(*flagPrometheusPort) + if config.Config.Prometheus.Enable && prometheusPort != 0 { + err := prome.StartPrometheusSrv(prometheusPort) if err != nil { return err } diff --git a/pkg/common/cmd/msg_gateway.go b/pkg/common/cmd/msg_gateway.go index 9573b1616..489d12485 100644 --- a/pkg/common/cmd/msg_gateway.go +++ b/pkg/common/cmd/msg_gateway.go @@ -1,6 +1,7 @@ package cmd import ( + "OpenIM/internal/msggateway" //"OpenIM/internal/msggateway" "OpenIM/pkg/common/constant" "github.com/spf13/cobra" @@ -23,14 +24,13 @@ func (m *MsgGatewayCmd) getWsPortFlag(cmd *cobra.Command) int { return port } -func (m *MsgGatewayCmd) addRun() { - m.Command.Run = func(cmd *cobra.Command, args []string) { - //msggateway.Init(m.getPortFlag(cmd), m.getWsPortFlag(cmd)) - //msggateway.Run(m.getPrometheusPortFlag(cmd)) +func (m *MsgGatewayCmd) addRunE() { + m.Command.RunE = func(cmd *cobra.Command, args []string) error { + return msggateway.RunWsAndServer(m.getPortFlag(cmd), m.getWsPortFlag(cmd), m.getPrometheusPortFlag(cmd)) } } func (m *MsgGatewayCmd) Exec() error { - m.addRun() + m.addRunE() return m.Execute() } diff --git a/script/check_all.sh b/script/check_all.sh index 914b96670..d8f3c4df3 100644 --- a/script/check_all.sh +++ b/script/check_all.sh @@ -10,7 +10,7 @@ service_port_name=( openImUserPort openImFriendPort openImMessagePort -# openImMessageGatewayPort + openImMessageGatewayPort openImGroupPort openImAuthPort openImPushPort diff --git a/script/start_all.sh b/script/start_all.sh index 9f45ee012..efb064c96 100644 --- a/script/start_all.sh +++ b/script/start_all.sh @@ -8,7 +8,7 @@ need_to_start_server_shell=( push_start.sh msg_transfer_start.sh sdk_svr_start.sh -# msg_gateway_start.sh + msg_gateway_start.sh start_cron.sh ) time=`date +"%Y-%m-%d %H:%M:%S"` From c8717c88eaeaa6498082aa95e8826c1ac096a4d1 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 19:26:17 +0800 Subject: [PATCH 11/40] script --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 78ed767d7..ea1f058f2 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module OpenIM -go 1.16 +go 1.18 require ( firebase.google.com/go v3.13.0+incompatible From 7789b2251a470e091418984c1f247203926b8109 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 19:28:18 +0800 Subject: [PATCH 12/40] script --- script/path_info.cfg | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/script/path_info.cfg b/script/path_info.cfg index 5b999cbe4..5cb47772f 100644 --- a/script/path_info.cfg +++ b/script/path_info.cfg @@ -49,7 +49,7 @@ service_source_root=( ../cmd/rpc/third/ ../cmd/crontask ../cmd/cmdutils - # ${msg_gateway_source_root} + ${msg_gateway_source_root} ${msg_transfer_source_root/} ${msg_source_root} ${push_source_root} @@ -68,7 +68,7 @@ service_names=( open_im_third open_im_cron_task open_im_cmd_utils - # ${msg_gateway_name} + ${msg_gateway_name} ${msg_transfer_name} ${msg_name} ${push_name} From 6d4cee96c87557f6e36902bf9d35c7ea79063c54 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 19:34:36 +0800 Subject: [PATCH 13/40] script --- pkg/common/db/controller/group.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pkg/common/db/controller/group.go b/pkg/common/db/controller/group.go index 43254ec0a..dbd1896e8 100644 --- a/pkg/common/db/controller/group.go +++ b/pkg/common/db/controller/group.go @@ -76,6 +76,9 @@ func NewGroupDatabase( } func InitGroupDatabase(db *gorm.DB, rdb redis.UniversalClient, database *mongo.Database) GroupDatabase { + rcOptions := rockscache.NewDefaultOptions() + rcOptions.StrongConsistency = true + rcOptions.RandomExpireAdjustment = 0.2 return NewGroupDatabase( relation.NewGroupDB(db), relation.NewGroupMemberDB(db), @@ -83,10 +86,7 @@ func InitGroupDatabase(db *gorm.DB, rdb redis.UniversalClient, database *mongo.D tx.NewGorm(db), tx.NewMongo(database.Client()), unrelation.NewSuperGroupMongoDriver(database), - cache.NewGroupCacheRedis(rdb, relation.NewGroupDB(db), relation.NewGroupMemberDB(db), relation.NewGroupRequest(db), unrelation.NewSuperGroupMongoDriver(database), rockscache.Options{ - StrongConsistency: true, - RandomExpireAdjustment: 2.0, - }), + cache.NewGroupCacheRedis(rdb, relation.NewGroupDB(db), relation.NewGroupMemberDB(db), relation.NewGroupRequest(db), unrelation.NewSuperGroupMongoDriver(database), rcOptions), ) } From 415f1f41c75ffe4a86602143921fcd9d67e9093c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 19:37:53 +0800 Subject: [PATCH 14/40] script --- script/msg_gateway_start.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/script/msg_gateway_start.sh b/script/msg_gateway_start.sh index f09973d84..88e1aea08 100755 --- a/script/msg_gateway_start.sh +++ b/script/msg_gateway_start.sh @@ -31,7 +31,7 @@ fi sleep 1 cd ${msg_gateway_binary_root} for ((i = 0; i < ${#ws_ports[@]}; i++)); do - nohup ./${msg_gateway_name} -port ${rpc_ports[$i]} -ws_port ${ws_ports[$i]} -prometheus_port ${prome_ports[$i]} >>../logs/openIM.log 2>&1 & + nohup ./${msg_gateway_name} --port ${rpc_ports[$i]} --ws_port ${ws_ports[$i]} --prometheus_port ${prome_ports[$i]} >>../logs/openIM.log 2>&1 & done #Check launched service process From b9edc903492bfaf92bb09a64024361cf60025783 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 19:42:22 +0800 Subject: [PATCH 15/40] script --- internal/startrpc/start.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/internal/startrpc/start.go b/internal/startrpc/start.go index 3b9dfdc40..f112b8f50 100644 --- a/internal/startrpc/start.go +++ b/internal/startrpc/start.go @@ -8,7 +8,6 @@ import ( "OpenIM/pkg/common/mw" "OpenIM/pkg/common/prome" "OpenIM/pkg/discoveryregistry" - "flag" "fmt" "github.com/OpenIMSDK/openKeeper" grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus" @@ -17,7 +16,6 @@ import ( ) func start(rpcPort int, rpcRegisterName string, prometheusPort int, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error, options []grpc.ServerOption) error { - flag.Parse() fmt.Println("start group rpc server, port: ", rpcPort, ", OpenIM version: ", config.Version) log.NewPrivateLog(constant.LogFileName) listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", config.Config.ListenIP, rpcPort)) From 4c5210af59bfaa4a1b661db6134cca4fb3c4dd01 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 19:59:22 +0800 Subject: [PATCH 16/40] script --- pkg/common/config/config.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 818a17b15..59a23fd5e 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -516,8 +516,9 @@ func (c *config) initConfig(config interface{}, configName, configFolderPath str } configPath = filepath.Join(Root, "config", configName) fmt.Println(configPath, "not exist, use", configPath) + } else { + Root = filepath.Dir(configPath) } - Root = filepath.Dir(configPath) return c.unmarshalConfig(config, configPath) } From 040fd345e06f228376fb4f2c6b8931269f0985f0 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Wed, 8 Mar 2023 20:02:34 +0800 Subject: [PATCH 17/40] script --- pkg/common/config/config.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 59a23fd5e..69b303218 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -511,6 +511,7 @@ func (c *config) initConfig(config interface{}, configName, configFolderPath str }() _, err := os.Stat(configPath) if err != nil { + fmt.Println(err.Error()) if !os.IsNotExist(err) { return err } From e10b0743dc1b0ed4c93a0f63b36e4d2c3075d5dc Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 10:28:48 +0800 Subject: [PATCH 18/40] script --- internal/startrpc/start.go | 1 + pkg/common/config/config.go | 5 ++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/startrpc/start.go b/internal/startrpc/start.go index f112b8f50..7b91978f0 100644 --- a/internal/startrpc/start.go +++ b/internal/startrpc/start.go @@ -23,6 +23,7 @@ func start(rpcPort int, rpcRegisterName string, prometheusPort int, rpcFn func(c return err } defer listener.Close() + fmt.Println(config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema) zkClient, err := openKeeper.NewClient(config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema, 10, "", "") if err != nil { return err diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 69b303218..ed0f5a0d9 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -176,7 +176,7 @@ type config struct { ZkAddr []string `yaml:"zkAddr"` UserName string `yaml:"userName"` Password string `yaml:"password"` - } + } `yaml:"zookeeper"` Log struct { StorageLocation string `yaml:"storageLocation"` RotationTime int `yaml:"rotationTime"` @@ -511,12 +511,11 @@ func (c *config) initConfig(config interface{}, configName, configFolderPath str }() _, err := os.Stat(configPath) if err != nil { - fmt.Println(err.Error()) if !os.IsNotExist(err) { return err } configPath = filepath.Join(Root, "config", configName) - fmt.Println(configPath, "not exist, use", configPath) + fmt.Println("use", configPath) } else { Root = filepath.Dir(configPath) } From 90974298cd336450083f413ac610cb540d665778 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 10:30:15 +0800 Subject: [PATCH 19/40] script --- internal/startrpc/start.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/startrpc/start.go b/internal/startrpc/start.go index 7b91978f0..499685654 100644 --- a/internal/startrpc/start.go +++ b/internal/startrpc/start.go @@ -23,7 +23,7 @@ func start(rpcPort int, rpcRegisterName string, prometheusPort int, rpcFn func(c return err } defer listener.Close() - fmt.Println(config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema) + fmt.Println(config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema, rpcRegisterName) zkClient, err := openKeeper.NewClient(config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema, 10, "", "") if err != nil { return err From 0aa0b257eeedf8e8c8ae993e4023e8a55d1283ed Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 10:33:54 +0800 Subject: [PATCH 20/40] script --- internal/startrpc/start.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/startrpc/start.go b/internal/startrpc/start.go index 499685654..e9e619af3 100644 --- a/internal/startrpc/start.go +++ b/internal/startrpc/start.go @@ -8,6 +8,7 @@ import ( "OpenIM/pkg/common/mw" "OpenIM/pkg/common/prome" "OpenIM/pkg/discoveryregistry" + "OpenIM/pkg/utils" "fmt" "github.com/OpenIMSDK/openKeeper" grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus" @@ -26,7 +27,7 @@ func start(rpcPort int, rpcRegisterName string, prometheusPort int, rpcFn func(c fmt.Println(config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema, rpcRegisterName) zkClient, err := openKeeper.NewClient(config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema, 10, "", "") if err != nil { - return err + return utils.Wrap1(err) } defer zkClient.Close() registerIP, err := network.GetRpcRegisterIP(config.Config.RpcRegisterIP) @@ -48,7 +49,7 @@ func start(rpcPort int, rpcRegisterName string, prometheusPort int, rpcFn func(c defer srv.GracefulStop() err = zkClient.Register(rpcRegisterName, registerIP, rpcPort) if err != nil { - return err + return utils.Wrap1(err) } if config.Config.Prometheus.Enable && prometheusPort != 0 { err := prome.StartPrometheusSrv(prometheusPort) From 2ccf040fbb1dd83a28a9900d169ea24cac3d4d21 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 10:43:49 +0800 Subject: [PATCH 21/40] script --- pkg/utils/utils.go | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 213d93200..112691a34 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -22,22 +22,19 @@ func CopyStructFields(a interface{}, b interface{}, fields ...string) (err error } func Wrap1(err error) error { - if err != nil { - return Wrap(err, "") - } - return nil + return errors.Wrap(err, "==> " + printCallerNameAndLine()) } func Wrap2[T any](a T, err error) (T, error) { if err != nil { - return a, Wrap(err, "") + return a, errors.Wrap(err, "==> " + printCallerNameAndLine()) } return a, nil } func Wrap3[T any, V any](a T, b V, err error) (T, V, error) { if err != nil { - return a, b, Wrap(err, "") + return a, b, errors.Wrap(err, "==> " + printCallerNameAndLine()) } return a, b, nil } From 12a0ab8ae8e9b7897130c3873d08a232fdbf1f9c Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 10:57:55 +0800 Subject: [PATCH 22/40] script --- internal/push/offlinepush/fcm/push.go | 2 +- internal/push/push_to_client.go | 1 - pkg/common/cmd/rpc.go | 2 ++ 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/internal/push/offlinepush/fcm/push.go b/internal/push/offlinepush/fcm/push.go index 77b8c8f7a..0d29d4d1c 100644 --- a/internal/push/offlinepush/fcm/push.go +++ b/internal/push/offlinepush/fcm/push.go @@ -39,7 +39,7 @@ func NewClient(cache cache.Model) *Fcm { panic(err.Error()) return nil } - return &Fcm{fcmMsgCli: fcmMsgClient} + return &Fcm{fcmMsgCli: fcmMsgClient, cache: cache} } func (f *Fcm) Push(ctx context.Context, userIDs []string, title, content string, opts *offlinepush.Opts) error { diff --git a/internal/push/push_to_client.go b/internal/push/push_to_client.go index c83abd28f..6a4da0914 100644 --- a/internal/push/push_to_client.go +++ b/internal/push/push_to_client.go @@ -95,7 +95,6 @@ func (p *Pusher) MsgToUser(ctx context.Context, userID string, msg *sdkws.MsgDat return nil } } - if err := callbackOfflinePush(ctx, userIDs, msg, &[]string{}); err != nil { return err } diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go index 5212ddf6e..048f91a04 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -3,6 +3,7 @@ package cmd import ( "OpenIM/internal/startrpc" "OpenIM/pkg/discoveryregistry" + "fmt" "github.com/spf13/cobra" "google.golang.org/grpc" ) @@ -18,6 +19,7 @@ func NewRpcCmd(rpcRegisterName string) *RpcCmd { func (r *RpcCmd) AddRpc(rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) { r.Command.RunE = func(cmd *cobra.Command, args []string) error { + fmt.Println(r.getPortFlag(cmd), r.rpcRegisterName, r.getPrometheusPortFlag(cmd), rpcFn) return startrpc.Start(r.getPortFlag(cmd), r.rpcRegisterName, r.getPrometheusPortFlag(cmd), rpcFn) } } From 9aea3b4981edca41cf71704a387f505b7c7ae711 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 11:08:28 +0800 Subject: [PATCH 23/40] script --- pkg/common/cmd/rpc.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go index 048f91a04..f05c3f43c 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -2,6 +2,7 @@ package cmd import ( "OpenIM/internal/startrpc" + "OpenIM/pkg/common/config" "OpenIM/pkg/discoveryregistry" "fmt" "github.com/spf13/cobra" @@ -19,7 +20,7 @@ func NewRpcCmd(rpcRegisterName string) *RpcCmd { func (r *RpcCmd) AddRpc(rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) { r.Command.RunE = func(cmd *cobra.Command, args []string) error { - fmt.Println(r.getPortFlag(cmd), r.rpcRegisterName, r.getPrometheusPortFlag(cmd), rpcFn) + fmt.Println(r.getPortFlag(cmd), r.rpcRegisterName, r.getPrometheusPortFlag(cmd), config.Config.RpcRegisterName) return startrpc.Start(r.getPortFlag(cmd), r.rpcRegisterName, r.getPrometheusPortFlag(cmd), rpcFn) } } From 2bc2b4cf2458de5a316c7228d93028a454ed7f4d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 11:10:12 +0800 Subject: [PATCH 24/40] script --- pkg/common/config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index ed0f5a0d9..ea29fe504 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -170,7 +170,7 @@ type config struct { OpenImCacheName string `yaml:"openImCacheName"` OpenImRtcName string `yaml:"openImRtcName"` OpenImThirdName string `yaml:"openImThirdName"` - } + } `yaml:"rpcregistername"` Zookeeper struct { Schema string `yaml:"schema"` ZkAddr []string `yaml:"zkAddr"` From 4c25686060778af8f4a3159bace5b6abe828f180 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 11:16:01 +0800 Subject: [PATCH 25/40] script --- pkg/common/cmd/rpc.go | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go index f05c3f43c..7c5ff5ec2 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -2,7 +2,6 @@ package cmd import ( "OpenIM/internal/startrpc" - "OpenIM/pkg/common/config" "OpenIM/pkg/discoveryregistry" "fmt" "github.com/spf13/cobra" @@ -20,12 +19,14 @@ func NewRpcCmd(rpcRegisterName string) *RpcCmd { func (r *RpcCmd) AddRpc(rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) { r.Command.RunE = func(cmd *cobra.Command, args []string) error { - fmt.Println(r.getPortFlag(cmd), r.rpcRegisterName, r.getPrometheusPortFlag(cmd), config.Config.RpcRegisterName) return startrpc.Start(r.getPortFlag(cmd), r.rpcRegisterName, r.getPrometheusPortFlag(cmd), rpcFn) } } func (r *RpcCmd) Exec(rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) error { + fmt.Println(r) + r.AddRpc(rpcFn) + fmt.Println(r) return r.Execute() } From 3421610acb85a0ab58291f2f9e146d7bc03c446d Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 11:20:36 +0800 Subject: [PATCH 26/40] script --- pkg/common/cmd/rpc.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go index 7c5ff5ec2..ebeaeb178 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -14,7 +14,9 @@ type RpcCmd struct { } func NewRpcCmd(rpcRegisterName string) *RpcCmd { - return &RpcCmd{NewRootCmd(), rpcRegisterName} + rpcCmd := &RpcCmd{NewRootCmd(), rpcRegisterName} + fmt.Println(*rpcCmd) + return rpcCmd } func (r *RpcCmd) AddRpc(rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) { From 90c6130bc6e21ceb56bc7779c63eadaf2b537e86 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 11:26:01 +0800 Subject: [PATCH 27/40] script --- pkg/common/cmd/rpc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go index ebeaeb178..e9cb20289 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -15,7 +15,7 @@ type RpcCmd struct { func NewRpcCmd(rpcRegisterName string) *RpcCmd { rpcCmd := &RpcCmd{NewRootCmd(), rpcRegisterName} - fmt.Println(*rpcCmd) + fmt.Println("line 18", *rpcCmd, rpcCmd) return rpcCmd } From 471b9cbea6ccb945647df0bb159df9dc48bd9226 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 11:28:11 +0800 Subject: [PATCH 28/40] script --- pkg/common/cmd/rpc.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go index e9cb20289..9e5f5160a 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -15,7 +15,7 @@ type RpcCmd struct { func NewRpcCmd(rpcRegisterName string) *RpcCmd { rpcCmd := &RpcCmd{NewRootCmd(), rpcRegisterName} - fmt.Println("line 18", *rpcCmd, rpcCmd) + fmt.Println("line 18", *rpcCmd, rpcCmd, rpcRegisterName) return rpcCmd } From ee11636d7e467c4361705af4c189e46f29207c01 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 11:30:13 +0800 Subject: [PATCH 29/40] script --- pkg/common/cmd/rpc.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go index 9e5f5160a..463db5762 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -2,6 +2,7 @@ package cmd import ( "OpenIM/internal/startrpc" + "OpenIM/pkg/common/config" "OpenIM/pkg/discoveryregistry" "fmt" "github.com/spf13/cobra" @@ -15,7 +16,7 @@ type RpcCmd struct { func NewRpcCmd(rpcRegisterName string) *RpcCmd { rpcCmd := &RpcCmd{NewRootCmd(), rpcRegisterName} - fmt.Println("line 18", *rpcCmd, rpcCmd, rpcRegisterName) + fmt.Println("line 18", *rpcCmd, rpcCmd, rpcRegisterName, config.Config.RpcRegisterName) return rpcCmd } From 889f3031bfe6e7b42ac25a3da460abcee6bd3ad6 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 11:35:52 +0800 Subject: [PATCH 30/40] script --- pkg/common/config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index ea29fe504..ed0f5a0d9 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -170,7 +170,7 @@ type config struct { OpenImCacheName string `yaml:"openImCacheName"` OpenImRtcName string `yaml:"openImRtcName"` OpenImThirdName string `yaml:"openImThirdName"` - } `yaml:"rpcregistername"` + } Zookeeper struct { Schema string `yaml:"schema"` ZkAddr []string `yaml:"zkAddr"` From fae6fdc3ed0506a43a32fbcdde8643bd8975b71b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 12:34:08 +0800 Subject: [PATCH 31/40] script --- cmd/rpc/auth/main.go | 4 ++-- cmd/rpc/conversation/main.go | 4 ++-- cmd/rpc/friend/main.go | 4 ++-- cmd/rpc/group/main.go | 4 ++-- cmd/rpc/msg/main.go | 4 ++-- cmd/rpc/third/main.go | 4 ++-- cmd/rpc/user/main.go | 4 ++-- pkg/common/cmd/push.go | 2 +- pkg/common/cmd/rpc.go | 19 ++++++------------- 9 files changed, 21 insertions(+), 28 deletions(-) diff --git a/cmd/rpc/auth/main.go b/cmd/rpc/auth/main.go index a63401a71..609eab4a1 100644 --- a/cmd/rpc/auth/main.go +++ b/cmd/rpc/auth/main.go @@ -9,10 +9,10 @@ import ( ) func main() { - rpcCmd := cmd.NewRpcCmd(config.Config.RpcRegisterName.OpenImAuthName) + rpcCmd := cmd.NewRpcCmd() rpcCmd.AddPortFlag() rpcCmd.AddPrometheusPortFlag() - if err := rpcCmd.Exec(auth.Start); err != nil { + if err := rpcCmd.Exec(config.Config.RpcRegisterName.OpenImAuthName, auth.Start); err != nil { fmt.Println(err.Error()) os.Exit(1) } diff --git a/cmd/rpc/conversation/main.go b/cmd/rpc/conversation/main.go index 4bd600a16..4e5006815 100644 --- a/cmd/rpc/conversation/main.go +++ b/cmd/rpc/conversation/main.go @@ -9,10 +9,10 @@ import ( ) func main() { - rpcCmd := cmd.NewRpcCmd(config.Config.RpcRegisterName.OpenImConversationName) + rpcCmd := cmd.NewRpcCmd() rpcCmd.AddPortFlag() rpcCmd.AddPrometheusPortFlag() - if err := rpcCmd.Exec(conversation.Start); err != nil { + if err := rpcCmd.Exec(config.Config.RpcRegisterName.OpenImConversationName, conversation.Start); err != nil { fmt.Println(err.Error()) os.Exit(1) } diff --git a/cmd/rpc/friend/main.go b/cmd/rpc/friend/main.go index 5e8293ba6..caf5750bf 100644 --- a/cmd/rpc/friend/main.go +++ b/cmd/rpc/friend/main.go @@ -9,10 +9,10 @@ import ( ) func main() { - rpcCmd := cmd.NewRpcCmd(config.Config.RpcRegisterName.OpenImFriendName) + rpcCmd := cmd.NewRpcCmd() rpcCmd.AddPortFlag() rpcCmd.AddPrometheusPortFlag() - if err := rpcCmd.Exec(friend.Start); err != nil { + if err := rpcCmd.Exec(config.Config.RpcRegisterName.OpenImFriendName, friend.Start); err != nil { fmt.Println(err.Error()) os.Exit(1) } diff --git a/cmd/rpc/group/main.go b/cmd/rpc/group/main.go index 098733e1c..1a4fa1355 100644 --- a/cmd/rpc/group/main.go +++ b/cmd/rpc/group/main.go @@ -9,10 +9,10 @@ import ( ) func main() { - rpcCmd := cmd.NewRpcCmd(config.Config.RpcRegisterName.OpenImGroupName) + rpcCmd := cmd.NewRpcCmd() rpcCmd.AddPortFlag() rpcCmd.AddPrometheusPortFlag() - if err := rpcCmd.Exec(friend.Start); err != nil { + if err := rpcCmd.Exec(config.Config.RpcRegisterName.OpenImGroupName, friend.Start); err != nil { fmt.Println(err.Error()) os.Exit(1) } diff --git a/cmd/rpc/msg/main.go b/cmd/rpc/msg/main.go index 661fa9817..be88b22a8 100644 --- a/cmd/rpc/msg/main.go +++ b/cmd/rpc/msg/main.go @@ -9,10 +9,10 @@ import ( ) func main() { - rpcCmd := cmd.NewRpcCmd(config.Config.RpcRegisterName.OpenImMsgName) + rpcCmd := cmd.NewRpcCmd() rpcCmd.AddPortFlag() rpcCmd.AddPrometheusPortFlag() - if err := rpcCmd.Exec(msg.Start); err != nil { + if err := rpcCmd.Exec(config.Config.RpcRegisterName.OpenImMsgName, msg.Start); err != nil { fmt.Println(err.Error()) os.Exit(1) } diff --git a/cmd/rpc/third/main.go b/cmd/rpc/third/main.go index 5b14a1ad1..20dcbb421 100644 --- a/cmd/rpc/third/main.go +++ b/cmd/rpc/third/main.go @@ -9,10 +9,10 @@ import ( ) func main() { - rpcCmd := cmd.NewRpcCmd(config.Config.RpcRegisterName.OpenImThirdName) + rpcCmd := cmd.NewRpcCmd() rpcCmd.AddPortFlag() rpcCmd.AddPrometheusPortFlag() - if err := rpcCmd.Exec(third.Start); err != nil { + if err := rpcCmd.Exec(config.Config.RpcRegisterName.OpenImThirdName, third.Start); err != nil { fmt.Println(err.Error()) os.Exit(1) } diff --git a/cmd/rpc/user/main.go b/cmd/rpc/user/main.go index 72d5ee4e9..9f82776b2 100644 --- a/cmd/rpc/user/main.go +++ b/cmd/rpc/user/main.go @@ -9,10 +9,10 @@ import ( ) func main() { - rpcCmd := cmd.NewRpcCmd(config.Config.RpcRegisterName.OpenImUserName) + rpcCmd := cmd.NewRpcCmd() rpcCmd.AddPortFlag() rpcCmd.AddPrometheusPortFlag() - if err := rpcCmd.Exec(user.Start); err != nil { + if err := rpcCmd.Exec(config.Config.RpcRegisterName.OpenImUserName, user.Start); err != nil { fmt.Println(err.Error()) os.Exit(1) } diff --git a/pkg/common/cmd/push.go b/pkg/common/cmd/push.go index db6144af4..a53286507 100644 --- a/pkg/common/cmd/push.go +++ b/pkg/common/cmd/push.go @@ -12,7 +12,7 @@ type PushCmd struct { } func NewPushCmd() *PushCmd { - return &PushCmd{NewRpcCmd(config.Config.RpcRegisterName.OpenImPushName)} + return &PushCmd{NewRpcCmd()} } func (r *RpcCmd) AddPush() { diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go index 463db5762..17ad0794d 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -2,34 +2,27 @@ package cmd import ( "OpenIM/internal/startrpc" - "OpenIM/pkg/common/config" "OpenIM/pkg/discoveryregistry" - "fmt" "github.com/spf13/cobra" "google.golang.org/grpc" ) type RpcCmd struct { *RootCmd - rpcRegisterName string } -func NewRpcCmd(rpcRegisterName string) *RpcCmd { - rpcCmd := &RpcCmd{NewRootCmd(), rpcRegisterName} - fmt.Println("line 18", *rpcCmd, rpcCmd, rpcRegisterName, config.Config.RpcRegisterName) +func NewRpcCmd() *RpcCmd { + rpcCmd := &RpcCmd{NewRootCmd()} return rpcCmd } -func (r *RpcCmd) AddRpc(rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) { +func (r *RpcCmd) addRpc(rpcRegisterName string, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) { r.Command.RunE = func(cmd *cobra.Command, args []string) error { - return startrpc.Start(r.getPortFlag(cmd), r.rpcRegisterName, r.getPrometheusPortFlag(cmd), rpcFn) + return startrpc.Start(r.getPortFlag(cmd), rpcRegisterName, r.getPrometheusPortFlag(cmd), rpcFn) } } -func (r *RpcCmd) Exec(rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) error { - fmt.Println(r) - - r.AddRpc(rpcFn) - fmt.Println(r) +func (r *RpcCmd) Exec(rpcRegisterName string, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) error { + r.addRpc(rpcRegisterName, rpcFn) return r.Execute() } From 8904ebccbc792505a5d91e3c583f32a41d61b14b Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 12:46:56 +0800 Subject: [PATCH 32/40] script --- cmd/rpc/auth/main.go | 2 +- internal/api/auth.go | 2 +- pkg/common/cmd/auth.go | 5 +++++ pkg/common/cmd/rpc.go | 11 +++++++++++ pkg/common/config/config.go | 22 +++++++++++----------- 5 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 pkg/common/cmd/auth.go diff --git a/cmd/rpc/auth/main.go b/cmd/rpc/auth/main.go index 609eab4a1..0e298263a 100644 --- a/cmd/rpc/auth/main.go +++ b/cmd/rpc/auth/main.go @@ -12,7 +12,7 @@ func main() { rpcCmd := cmd.NewRpcCmd() rpcCmd.AddPortFlag() rpcCmd.AddPrometheusPortFlag() - if err := rpcCmd.Exec(config.Config.RpcRegisterName.OpenImAuthName, auth.Start); err != nil { + if err := rpcCmd.Exec(*config.Config.RpcRegisterName.OpenImAuthName, auth.Start); err != nil { fmt.Println(err.Error()) os.Exit(1) } diff --git a/internal/api/auth.go b/internal/api/auth.go index e997ba6aa..209196f78 100644 --- a/internal/api/auth.go +++ b/internal/api/auth.go @@ -20,7 +20,7 @@ type Auth struct { } func (o *Auth) client() (auth.AuthClient, error) { - conn, err := o.c.GetConn(config.Config.RpcRegisterName.OpenImAuthName) + conn, err := o.c.GetConn(*config.Config.RpcRegisterName.OpenImAuthName) if err != nil { return nil, err } diff --git a/pkg/common/cmd/auth.go b/pkg/common/cmd/auth.go new file mode 100644 index 000000000..1d8f84aad --- /dev/null +++ b/pkg/common/cmd/auth.go @@ -0,0 +1,5 @@ +package cmd + +type AuthCmd struct { + *RpcCmd +} diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go index 17ad0794d..5f204e096 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -26,3 +26,14 @@ func (r *RpcCmd) Exec(rpcRegisterName string, rpcFn func(client discoveryregistr r.addRpc(rpcRegisterName, rpcFn) return r.Execute() } + +func (r *RpcCmd) addRpc2(rpcRegisterName *string, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) { + r.Command.RunE = func(cmd *cobra.Command, args []string) error { + return startrpc.Start(r.getPortFlag(cmd), *rpcRegisterName, r.getPrometheusPortFlag(cmd), rpcFn) + } +} + +func (r *RpcCmd) Exec2(rpcRegisterName *string, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) error { + r.addRpc2(rpcRegisterName, rpcFn) + return r.Execute() +} diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index ed0f5a0d9..97badb317 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -159,17 +159,17 @@ type config struct { OpenImThirdPort []int `yaml:"openImThirdPort"` } RpcRegisterName struct { - OpenImUserName string `yaml:"openImUserName"` - OpenImFriendName string `yaml:"openImFriendName"` - OpenImMsgName string `yaml:"openImMsgName"` - OpenImPushName string `yaml:"openImPushName"` - OpenImMessageGatewayName string `yaml:"openImMessageGatewayName"` - OpenImGroupName string `yaml:"openImGroupName"` - OpenImAuthName string `yaml:"openImAuthName"` - OpenImConversationName string `yaml:"openImConversationName"` - OpenImCacheName string `yaml:"openImCacheName"` - OpenImRtcName string `yaml:"openImRtcName"` - OpenImThirdName string `yaml:"openImThirdName"` + OpenImUserName string `yaml:"openImUserName"` + OpenImFriendName string `yaml:"openImFriendName"` + OpenImMsgName string `yaml:"openImMsgName"` + OpenImPushName string `yaml:"openImPushName"` + OpenImMessageGatewayName string `yaml:"openImMessageGatewayName"` + OpenImGroupName string `yaml:"openImGroupName"` + OpenImAuthName *string `yaml:"openImAuthName"` + OpenImConversationName string `yaml:"openImConversationName"` + OpenImCacheName string `yaml:"openImCacheName"` + OpenImRtcName string `yaml:"openImRtcName"` + OpenImThirdName string `yaml:"openImThirdName"` } Zookeeper struct { Schema string `yaml:"schema"` From 944b1a6680532f1c64aca918ee0ee74d17e9ebf5 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 12:48:21 +0800 Subject: [PATCH 33/40] script --- pkg/common/cmd/push.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/common/cmd/push.go b/pkg/common/cmd/push.go index a53286507..d348cf6eb 100644 --- a/pkg/common/cmd/push.go +++ b/pkg/common/cmd/push.go @@ -17,6 +17,6 @@ func NewPushCmd() *PushCmd { func (r *RpcCmd) AddPush() { r.Command.RunE = func(cmd *cobra.Command, args []string) error { - return startrpc.Start(r.getPortFlag(cmd), r.rpcRegisterName, r.getPrometheusPortFlag(cmd), push.Start) + return startrpc.Start(r.getPortFlag(cmd), config.Config.RpcRegisterName.OpenImPushName, r.getPrometheusPortFlag(cmd), push.Start) } } From 046d645ef65875fa439fde6b7c644fef3cc989fe Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 12:50:39 +0800 Subject: [PATCH 34/40] script --- cmd/rpc/auth/main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/rpc/auth/main.go b/cmd/rpc/auth/main.go index 0e298263a..93626f3f8 100644 --- a/cmd/rpc/auth/main.go +++ b/cmd/rpc/auth/main.go @@ -12,7 +12,7 @@ func main() { rpcCmd := cmd.NewRpcCmd() rpcCmd.AddPortFlag() rpcCmd.AddPrometheusPortFlag() - if err := rpcCmd.Exec(*config.Config.RpcRegisterName.OpenImAuthName, auth.Start); err != nil { + if err := rpcCmd.Exec2(config.Config.RpcRegisterName.OpenImAuthName, auth.Start); err != nil { fmt.Println(err.Error()) os.Exit(1) } From 0c98231fcd9931c0c958969d6f88b4389c8f74c2 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 13:26:58 +0800 Subject: [PATCH 35/40] script --- cmd/rpc/auth/main.go | 12 ++++++++---- internal/api/auth.go | 2 +- pkg/common/cmd/auth.go | 5 ----- pkg/common/cmd/root.go | 12 +++++++++++- pkg/common/cmd/rpc.go | 32 +++++++++++--------------------- pkg/common/config/config.go | 22 +++++++++++----------- 6 files changed, 42 insertions(+), 43 deletions(-) delete mode 100644 pkg/common/cmd/auth.go diff --git a/cmd/rpc/auth/main.go b/cmd/rpc/auth/main.go index 93626f3f8..634162e4b 100644 --- a/cmd/rpc/auth/main.go +++ b/cmd/rpc/auth/main.go @@ -9,10 +9,14 @@ import ( ) func main() { - rpcCmd := cmd.NewRpcCmd() - rpcCmd.AddPortFlag() - rpcCmd.AddPrometheusPortFlag() - if err := rpcCmd.Exec2(config.Config.RpcRegisterName.OpenImAuthName, auth.Start); err != nil { + authCmd := cmd.NewAuthCmd() + authCmd.AddPortFlag() + authCmd.AddPrometheusPortFlag() + if err := authCmd.Execute(); err != nil { + fmt.Println(err.Error()) + os.Exit(1) + } + if err := authCmd.StartSvr(config.Config.RpcRegisterName.OpenImAuthName, auth.Start); err != nil { fmt.Println(err.Error()) os.Exit(1) } diff --git a/internal/api/auth.go b/internal/api/auth.go index 209196f78..e997ba6aa 100644 --- a/internal/api/auth.go +++ b/internal/api/auth.go @@ -20,7 +20,7 @@ type Auth struct { } func (o *Auth) client() (auth.AuthClient, error) { - conn, err := o.c.GetConn(*config.Config.RpcRegisterName.OpenImAuthName) + conn, err := o.c.GetConn(config.Config.RpcRegisterName.OpenImAuthName) if err != nil { return nil, err } diff --git a/pkg/common/cmd/auth.go b/pkg/common/cmd/auth.go deleted file mode 100644 index 1d8f84aad..000000000 --- a/pkg/common/cmd/auth.go +++ /dev/null @@ -1,5 +0,0 @@ -package cmd - -type AuthCmd struct { - *RpcCmd -} diff --git a/pkg/common/cmd/root.go b/pkg/common/cmd/root.go index 990a4b68b..c2f43f266 100644 --- a/pkg/common/cmd/root.go +++ b/pkg/common/cmd/root.go @@ -7,7 +7,9 @@ import ( ) type RootCmd struct { - Command cobra.Command + Command cobra.Command + port int + prometheusPort int } func NewRootCmd() (rootCmd *RootCmd) { @@ -50,6 +52,10 @@ func (r *RootCmd) getPortFlag(cmd *cobra.Command) int { return port } +func (r *RootCmd) GetPortFlag() int { + return r.port +} + func (r *RootCmd) AddPrometheusPortFlag() { r.Command.Flags().String(constant.FlagPrometheusPort, "", "server prometheus listen port") } @@ -59,6 +65,10 @@ func (r *RootCmd) getPrometheusPortFlag(cmd *cobra.Command) int { return port } +func (r *RootCmd) GetPrometheusPortFlag() int { + return r.prometheusPort +} + func (r *RootCmd) getConfFromCmdAndInit(cmdLines *cobra.Command) error { configFolderPath, _ := cmdLines.Flags().GetString(constant.FlagConf) return config.InitConfig(configFolderPath) diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go index 5f204e096..38c006909 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -7,33 +7,23 @@ import ( "google.golang.org/grpc" ) -type RpcCmd struct { +type AuthCmd struct { *RootCmd } -func NewRpcCmd() *RpcCmd { - rpcCmd := &RpcCmd{NewRootCmd()} - return rpcCmd +func NewAuthCmd() *AuthCmd { + authCmd := &AuthCmd{NewRootCmd()} + return authCmd } -func (r *RpcCmd) addRpc(rpcRegisterName string, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) { - r.Command.RunE = func(cmd *cobra.Command, args []string) error { - return startrpc.Start(r.getPortFlag(cmd), rpcRegisterName, r.getPrometheusPortFlag(cmd), rpcFn) +func (a *AuthCmd) Execute() error { + a.Command.Run = func(cmd *cobra.Command, args []string) { + a.port = a.getPortFlag(cmd) + a.prometheusPort = a.getPrometheusPortFlag(cmd) } + return a.Execute() } -func (r *RpcCmd) Exec(rpcRegisterName string, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) error { - r.addRpc(rpcRegisterName, rpcFn) - return r.Execute() -} - -func (r *RpcCmd) addRpc2(rpcRegisterName *string, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) { - r.Command.RunE = func(cmd *cobra.Command, args []string) error { - return startrpc.Start(r.getPortFlag(cmd), *rpcRegisterName, r.getPrometheusPortFlag(cmd), rpcFn) - } -} - -func (r *RpcCmd) Exec2(rpcRegisterName *string, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) error { - r.addRpc2(rpcRegisterName, rpcFn) - return r.Execute() +func (a *AuthCmd) StartSvr(name string, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error) error { + return startrpc.Start(a.GetPortFlag(), name, a.GetPrometheusPortFlag(), rpcFn) } diff --git a/pkg/common/config/config.go b/pkg/common/config/config.go index 97badb317..ed0f5a0d9 100644 --- a/pkg/common/config/config.go +++ b/pkg/common/config/config.go @@ -159,17 +159,17 @@ type config struct { OpenImThirdPort []int `yaml:"openImThirdPort"` } RpcRegisterName struct { - OpenImUserName string `yaml:"openImUserName"` - OpenImFriendName string `yaml:"openImFriendName"` - OpenImMsgName string `yaml:"openImMsgName"` - OpenImPushName string `yaml:"openImPushName"` - OpenImMessageGatewayName string `yaml:"openImMessageGatewayName"` - OpenImGroupName string `yaml:"openImGroupName"` - OpenImAuthName *string `yaml:"openImAuthName"` - OpenImConversationName string `yaml:"openImConversationName"` - OpenImCacheName string `yaml:"openImCacheName"` - OpenImRtcName string `yaml:"openImRtcName"` - OpenImThirdName string `yaml:"openImThirdName"` + OpenImUserName string `yaml:"openImUserName"` + OpenImFriendName string `yaml:"openImFriendName"` + OpenImMsgName string `yaml:"openImMsgName"` + OpenImPushName string `yaml:"openImPushName"` + OpenImMessageGatewayName string `yaml:"openImMessageGatewayName"` + OpenImGroupName string `yaml:"openImGroupName"` + OpenImAuthName string `yaml:"openImAuthName"` + OpenImConversationName string `yaml:"openImConversationName"` + OpenImCacheName string `yaml:"openImCacheName"` + OpenImRtcName string `yaml:"openImRtcName"` + OpenImThirdName string `yaml:"openImThirdName"` } Zookeeper struct { Schema string `yaml:"schema"` From b828f1d3d12c580fa176b95b5023c35788e962b7 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 13:28:39 +0800 Subject: [PATCH 36/40] script --- pkg/common/cmd/push.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pkg/common/cmd/push.go b/pkg/common/cmd/push.go index d348cf6eb..432a49720 100644 --- a/pkg/common/cmd/push.go +++ b/pkg/common/cmd/push.go @@ -8,14 +8,14 @@ import ( ) type PushCmd struct { - *RpcCmd + *AuthCmd } func NewPushCmd() *PushCmd { - return &PushCmd{NewRpcCmd()} + return &PushCmd{NewAuthCmd()} } -func (r *RpcCmd) AddPush() { +func (r *PushCmd) AddPush() { r.Command.RunE = func(cmd *cobra.Command, args []string) error { return startrpc.Start(r.getPortFlag(cmd), config.Config.RpcRegisterName.OpenImPushName, r.getPrometheusPortFlag(cmd), push.Start) } From 1f089cbbe34bc695ca9e0266a15be72ae893d8e8 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 14:27:57 +0800 Subject: [PATCH 37/40] script --- pkg/common/cmd/rpc.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go index 38c006909..245c49ae9 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -18,8 +18,8 @@ func NewAuthCmd() *AuthCmd { func (a *AuthCmd) Execute() error { a.Command.Run = func(cmd *cobra.Command, args []string) { - a.port = a.getPortFlag(cmd) - a.prometheusPort = a.getPrometheusPortFlag(cmd) + //a.port = a.getPortFlag(cmd) + //a.prometheusPort = a.getPrometheusPortFlag(cmd) } return a.Execute() } From f693b6f3358a7762b254174dfd00bb06f109095e Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 14:31:41 +0800 Subject: [PATCH 38/40] script --- pkg/common/cmd/rpc.go | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go index 245c49ae9..359c93998 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -3,7 +3,6 @@ package cmd import ( "OpenIM/internal/startrpc" "OpenIM/pkg/discoveryregistry" - "github.com/spf13/cobra" "google.golang.org/grpc" ) @@ -17,10 +16,10 @@ func NewAuthCmd() *AuthCmd { } func (a *AuthCmd) Execute() error { - a.Command.Run = func(cmd *cobra.Command, args []string) { - //a.port = a.getPortFlag(cmd) - //a.prometheusPort = a.getPrometheusPortFlag(cmd) - } + //a.Command.Run = func(cmd *cobra.Command, args []string) { + // a.port = a.getPortFlag(cmd) + // a.prometheusPort = a.getPrometheusPortFlag(cmd) + //} return a.Execute() } From 48722ebe367e9d6d939fe8fc73ef602f68904804 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 14:34:58 +0800 Subject: [PATCH 39/40] script --- pkg/common/cmd/rpc.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pkg/common/cmd/rpc.go b/pkg/common/cmd/rpc.go index 359c93998..3e7ee4f30 100644 --- a/pkg/common/cmd/rpc.go +++ b/pkg/common/cmd/rpc.go @@ -3,6 +3,7 @@ package cmd import ( "OpenIM/internal/startrpc" "OpenIM/pkg/discoveryregistry" + "github.com/spf13/cobra" "google.golang.org/grpc" ) @@ -15,11 +16,11 @@ func NewAuthCmd() *AuthCmd { return authCmd } -func (a *AuthCmd) Execute() error { - //a.Command.Run = func(cmd *cobra.Command, args []string) { - // a.port = a.getPortFlag(cmd) - // a.prometheusPort = a.getPrometheusPortFlag(cmd) - //} +func (a *AuthCmd) Exec() error { + a.Command.Run = func(cmd *cobra.Command, args []string) { + a.port = a.getPortFlag(cmd) + a.prometheusPort = a.getPrometheusPortFlag(cmd) + } return a.Execute() } From a3aa965b3725efdb15978d6ac28aca527c66a9e3 Mon Sep 17 00:00:00 2001 From: wangchuxiao Date: Thu, 9 Mar 2023 14:41:46 +0800 Subject: [PATCH 40/40] script --- internal/startrpc/start.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/startrpc/start.go b/internal/startrpc/start.go index e9e619af3..c65ec398f 100644 --- a/internal/startrpc/start.go +++ b/internal/startrpc/start.go @@ -17,7 +17,7 @@ import ( ) func start(rpcPort int, rpcRegisterName string, prometheusPort int, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error, options []grpc.ServerOption) error { - fmt.Println("start group rpc server, port: ", rpcPort, ", OpenIM version: ", config.Version) + fmt.Println("start", rpcRegisterName, "rpc server, port: ", rpcPort, "prometheusPort:", prometheusPort, ", OpenIM version: ", config.Version) log.NewPrivateLog(constant.LogFileName) listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", config.Config.ListenIP, rpcPort)) if err != nil {