diff --git a/pkg/common/mw/rpc_server_interceptor.go b/pkg/common/mw/rpc_server_interceptor.go index ec43069da..0dba76103 100644 --- a/pkg/common/mw/rpc_server_interceptor.go +++ b/pkg/common/mw/rpc_server_interceptor.go @@ -38,6 +38,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/errinfo" ) +// rpcString func rpcString(v interface{}) string { if s, ok := v.(interface{ String() string }); ok { return s.String() @@ -45,6 +46,7 @@ func rpcString(v interface{}) string { return fmt.Sprintf("%+v", v) } +// RpcServerInterceptor func RpcServerInterceptor( ctx context.Context, req interface{}, @@ -52,7 +54,7 @@ func RpcServerInterceptor( handler grpc.UnaryHandler, ) (resp interface{}, err error) { log.ZDebug(ctx, "rpc server req", "req", rpcString(req)) - //defer func() { + // defer func() { // if r := recover(); r != nil { // log.ZError(ctx, "rpc panic", nil, "FullMethod", info.FullMethod, "type:", fmt.Sprintf("%T", r), "panic:", r) // fmt.Printf("panic: %+v\nstack info: %s\n", r, string(debug.Stack())) @@ -74,7 +76,7 @@ func RpcServerInterceptor( // } // err = sta.Err() // } - //}() + // }() funcName := info.FullMethod md, ok := metadata.FromIncomingContext(ctx) if !ok { @@ -133,8 +135,8 @@ func RpcServerInterceptor( var errInfo *errinfo.ErrorInfo if config.Config.Log.WithStack { if unwrap != err { - sti, ok := err.(interface{ StackTrace() errors.StackTrace }) - if ok { + var sti interface{ StackTrace() errors.StackTrace } + if errors.As(err, &sti) { log.ZWarn( ctx, "rpc server resp", @@ -173,9 +175,11 @@ func RpcServerInterceptor( return nil, errs.Wrap(err) } log.ZWarn(ctx, "rpc server resp", err, "funcName", funcName) + return nil, details.Err() } +// GrpcServer func GrpcServer() grpc.ServerOption { return grpc.ChainUnaryInterceptor(RpcServerInterceptor) } diff --git a/pkg/common/mw/specialerror/error.go b/pkg/common/mw/specialerror/error.go index b8b8d27ae..b843ad0d6 100644 --- a/pkg/common/mw/specialerror/error.go +++ b/pkg/common/mw/specialerror/error.go @@ -14,10 +14,14 @@ package specialerror -import "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" +import ( + "errors" + "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" +) var handlers []func(err error) errs.CodeError +// AddErrHandler func AddErrHandler(h func(err error) errs.CodeError) { if h == nil { panic("nil handler") @@ -27,13 +31,15 @@ func AddErrHandler(h func(err error) errs.CodeError) { func AddReplace(target error, codeErr errs.CodeError) { AddErrHandler(func(err error) errs.CodeError { - if err == target { + if errors.Is(err, target) { return codeErr } + return nil }) } +// ErrCode func ErrCode(err error) errs.CodeError { if codeErr, ok := err.(errs.CodeError); ok { return codeErr @@ -43,5 +49,6 @@ func ErrCode(err error) errs.CodeError { return codeErr } } + return nil } diff --git a/pkg/common/prome/gather.go b/pkg/common/prome/gather.go index eb4bc6c3b..58305396d 100644 --- a/pkg/common/prome/gather.go +++ b/pkg/common/prome/gather.go @@ -79,6 +79,7 @@ var ( ConversationCreateFailedCounter prometheus.Counter ) +// NewUserLoginCounter func NewUserLoginCounter() { if UserLoginCounter != nil { return @@ -89,6 +90,7 @@ func NewUserLoginCounter() { }) } +// NewUserRegisterCounter func NewUserRegisterCounter() { if UserRegisterCounter != nil { return @@ -99,6 +101,7 @@ func NewUserRegisterCounter() { }) } +// NewSeqGetSuccessCounter func NewSeqGetSuccessCounter() { if SeqGetSuccessCounter != nil { return @@ -109,6 +112,7 @@ func NewSeqGetSuccessCounter() { }) } +// NewSeqGetFailedCounter func NewSeqGetFailedCounter() { if SeqGetFailedCounter != nil { return @@ -119,6 +123,7 @@ func NewSeqGetFailedCounter() { }) } +// NewSeqSetSuccessCounter func NewSeqSetSuccessCounter() { if SeqSetSuccessCounter != nil { return @@ -129,6 +134,7 @@ func NewSeqSetSuccessCounter() { }) } +// NewSeqSetFailedCounter func NewSeqSetFailedCounter() { if SeqSetFailedCounter != nil { return @@ -139,6 +145,7 @@ func NewSeqSetFailedCounter() { }) } +// NewApiRequestCounter func NewApiRequestCounter() { if ApiRequestCounter != nil { return @@ -149,6 +156,7 @@ func NewApiRequestCounter() { }) } +// NewApiRequestSuccessCounter func NewApiRequestSuccessCounter() { if ApiRequestSuccessCounter != nil { return @@ -159,6 +167,7 @@ func NewApiRequestSuccessCounter() { }) } +// NewApiRequestFailedCounter func NewApiRequestFailedCounter() { if ApiRequestFailedCounter != nil { return @@ -169,6 +178,7 @@ func NewApiRequestFailedCounter() { }) } +// NewGrpcRequestCounter func NewGrpcRequestCounter() { if GrpcRequestCounter != nil { return @@ -179,6 +189,7 @@ func NewGrpcRequestCounter() { }) } +// NewGrpcRequestSuccessCounter func NewGrpcRequestSuccessCounter() { if GrpcRequestSuccessCounter != nil { return @@ -189,6 +200,7 @@ func NewGrpcRequestSuccessCounter() { }) } +// NewGrpcRequestFailedCounter func NewGrpcRequestFailedCounter() { if GrpcRequestFailedCounter != nil { return @@ -199,6 +211,7 @@ func NewGrpcRequestFailedCounter() { }) } +// NewSendMsgCount func NewSendMsgCount() { if SendMsgCounter != nil { return @@ -209,6 +222,7 @@ func NewSendMsgCount() { }) } +// NewMsgInsertRedisSuccessCounter func NewMsgInsertRedisSuccessCounter() { if MsgInsertRedisSuccessCounter != nil { return @@ -219,6 +233,7 @@ func NewMsgInsertRedisSuccessCounter() { }) } +// NewMsgInsertRedisFailedCounter func NewMsgInsertRedisFailedCounter() { if MsgInsertRedisFailedCounter != nil { return @@ -229,6 +244,7 @@ func NewMsgInsertRedisFailedCounter() { }) } +// NewMsgInsertMongoSuccessCounter func NewMsgInsertMongoSuccessCounter() { if MsgInsertMongoSuccessCounter != nil { return @@ -239,6 +255,7 @@ func NewMsgInsertMongoSuccessCounter() { }) } +// NewMsgInsertMongoFailedCounter func NewMsgInsertMongoFailedCounter() { if MsgInsertMongoFailedCounter != nil { return @@ -249,6 +266,7 @@ func NewMsgInsertMongoFailedCounter() { }) } +// NewMsgPullFromRedisSuccessCounter func NewMsgPullFromRedisSuccessCounter() { if MsgPullFromRedisSuccessCounter != nil { return @@ -259,6 +277,7 @@ func NewMsgPullFromRedisSuccessCounter() { }) } +// NewMsgPullFromRedisFailedCounter func NewMsgPullFromRedisFailedCounter() { if MsgPullFromRedisFailedCounter != nil { return @@ -269,6 +288,7 @@ func NewMsgPullFromRedisFailedCounter() { }) } +// NewMsgPullFromMongoSuccessCounter func NewMsgPullFromMongoSuccessCounter() { if MsgPullFromMongoSuccessCounter != nil { return @@ -279,6 +299,7 @@ func NewMsgPullFromMongoSuccessCounter() { }) } +// NewMsgPullFromMongoFailedCounter func NewMsgPullFromMongoFailedCounter() { if MsgPullFromMongoFailedCounter != nil { return @@ -289,6 +310,7 @@ func NewMsgPullFromMongoFailedCounter() { }) } +// NewMsgRecvTotalCounter func NewMsgRecvTotalCounter() { if MsgRecvTotalCounter != nil { return @@ -299,6 +321,7 @@ func NewMsgRecvTotalCounter() { }) } +// NewGetNewestSeqTotalCounter func NewGetNewestSeqTotalCounter() { if GetNewestSeqTotalCounter != nil { return @@ -309,6 +332,7 @@ func NewGetNewestSeqTotalCounter() { }) } +// NewPullMsgBySeqListTotalCounter func NewPullMsgBySeqListTotalCounter() { if PullMsgBySeqListTotalCounter != nil { return @@ -319,6 +343,7 @@ func NewPullMsgBySeqListTotalCounter() { }) } +// NewSingleChatMsgRecvSuccessCounter func NewSingleChatMsgRecvSuccessCounter() { if SingleChatMsgRecvSuccessCounter != nil { return @@ -329,6 +354,7 @@ func NewSingleChatMsgRecvSuccessCounter() { }) } +// NewGroupChatMsgRecvSuccessCounter func NewGroupChatMsgRecvSuccessCounter() { if GroupChatMsgRecvSuccessCounter != nil { return @@ -339,6 +365,7 @@ func NewGroupChatMsgRecvSuccessCounter() { }) } +// NewWorkSuperGroupChatMsgRecvSuccessCounter func NewWorkSuperGroupChatMsgRecvSuccessCounter() { if WorkSuperGroupChatMsgRecvSuccessCounter != nil { return @@ -349,6 +376,7 @@ func NewWorkSuperGroupChatMsgRecvSuccessCounter() { }) } +// NewOnlineUserGauges func NewOnlineUserGauges() { if OnlineUserGauge != nil { return @@ -359,6 +387,7 @@ func NewOnlineUserGauges() { }) } +// NewSingleChatMsgProcessSuccessCounter func NewSingleChatMsgProcessSuccessCounter() { if SingleChatMsgProcessSuccessCounter != nil { return @@ -369,6 +398,7 @@ func NewSingleChatMsgProcessSuccessCounter() { }) } +// NewSingleChatMsgProcessFailedCounter func NewSingleChatMsgProcessFailedCounter() { if SingleChatMsgProcessFailedCounter != nil { return @@ -379,6 +409,7 @@ func NewSingleChatMsgProcessFailedCounter() { }) } +// NewGroupChatMsgProcessSuccessCounter func NewGroupChatMsgProcessSuccessCounter() { if GroupChatMsgProcessSuccessCounter != nil { return @@ -389,6 +420,7 @@ func NewGroupChatMsgProcessSuccessCounter() { }) } +// NewGroupChatMsgProcessFailedCounter func NewGroupChatMsgProcessFailedCounter() { if GroupChatMsgProcessFailedCounter != nil { return @@ -399,6 +431,7 @@ func NewGroupChatMsgProcessFailedCounter() { }) } +// NewWorkSuperGroupChatMsgProcessSuccessCounter func NewWorkSuperGroupChatMsgProcessSuccessCounter() { if WorkSuperGroupChatMsgProcessSuccessCounter != nil { return @@ -409,6 +442,7 @@ func NewWorkSuperGroupChatMsgProcessSuccessCounter() { }) } +// NewWorkSuperGroupChatMsgProcessFailedCounter func NewWorkSuperGroupChatMsgProcessFailedCounter() { if WorkSuperGroupChatMsgProcessFailedCounter != nil { return @@ -419,6 +453,7 @@ func NewWorkSuperGroupChatMsgProcessFailedCounter() { }) } +// NewMsgOnlinePushSuccessCounter func NewMsgOnlinePushSuccessCounter() { if MsgOnlinePushSuccessCounter != nil { return @@ -429,6 +464,7 @@ func NewMsgOnlinePushSuccessCounter() { }) } +// NewMsgOfflinePushSuccessCounter func NewMsgOfflinePushSuccessCounter() { if MsgOfflinePushSuccessCounter != nil { return @@ -439,6 +475,7 @@ func NewMsgOfflinePushSuccessCounter() { }) } +// NewMsgOfflinePushFailedCounter func NewMsgOfflinePushFailedCounter() { if MsgOfflinePushFailedCounter != nil { return @@ -449,6 +486,7 @@ func NewMsgOfflinePushFailedCounter() { }) } +// NewConversationCreateSuccessCounter func NewConversationCreateSuccessCounter() { if ConversationCreateSuccessCounter != nil { return @@ -459,6 +497,7 @@ func NewConversationCreateSuccessCounter() { }) } +// NewConversationCreateFailedCounter func NewConversationCreateFailedCounter() { if ConversationCreateFailedCounter != nil { return diff --git a/pkg/common/prome/prometheus.go b/pkg/common/prome/prometheus.go index d66b1df70..dbaa3f10d 100644 --- a/pkg/common/prome/prometheus.go +++ b/pkg/common/prome/prometheus.go @@ -26,6 +26,7 @@ import ( "github.com/prometheus/client_golang/prometheus/promhttp" ) +// StartPrometheusSrv func StartPrometheusSrv(prometheusPort int) error { if config.Config.Prometheus.Enable { http.Handle("/metrics", promhttp.Handler()) @@ -35,6 +36,7 @@ func StartPrometheusSrv(prometheusPort int) error { return nil } +// PrometheusHandler func PrometheusHandler() gin.HandlerFunc { h := promhttp.Handler() return func(c *gin.Context) { @@ -42,16 +44,19 @@ func PrometheusHandler() gin.HandlerFunc { } } +// responseBodyWriter type responseBodyWriter struct { gin.ResponseWriter body *bytes.Buffer } +// Write func (r responseBodyWriter) Write(b []byte) (int, error) { r.body.Write(b) return r.ResponseWriter.Write(b) } +// PrometheusMiddleware func PrometheusMiddleware(c *gin.Context) { Inc(ApiRequestCounter) w := &responseBodyWriter{body: &bytes.Buffer{}, ResponseWriter: c.Writer} @@ -64,6 +69,7 @@ func PrometheusMiddleware(c *gin.Context) { } } +// Inc func Inc(counter prometheus.Counter) { if config.Config.Prometheus.Enable { if counter != nil { @@ -72,6 +78,7 @@ func Inc(counter prometheus.Counter) { } } +// Add func Add(counter prometheus.Counter, add int) { if config.Config.Prometheus.Enable { if counter != nil { @@ -80,6 +87,7 @@ func Add(counter prometheus.Counter, add int) { } } +// GaugeInc func GaugeInc(gauges prometheus.Gauge) { if config.Config.Prometheus.Enable { if gauges != nil { @@ -88,6 +96,7 @@ func GaugeInc(gauges prometheus.Gauge) { } } +// GaugeDec func GaugeDec(gauges prometheus.Gauge) { if config.Config.Prometheus.Enable { if gauges != nil { diff --git a/pkg/common/tokenverify/jwt_token.go b/pkg/common/tokenverify/jwt_token.go index 317347b1d..798f3699a 100644 --- a/pkg/common/tokenverify/jwt_token.go +++ b/pkg/common/tokenverify/jwt_token.go @@ -27,15 +27,18 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" ) +// Claims type Claims struct { UserID string PlatformID int // login platform jwt.RegisteredClaims } +// BuildClaims func BuildClaims(uid string, platformID int, ttl int64) Claims { now := time.Now() before := now.Add(-time.Minute * 5) + return Claims{ UserID: uid, PlatformID: platformID, @@ -47,12 +50,14 @@ func BuildClaims(uid string, platformID int, ttl int64) Claims { } } +// secret func secret() jwt.Keyfunc { return func(token *jwt.Token) (interface{}, error) { return []byte(config.Config.Secret), nil } } +// GetClaimFromToken func GetClaimFromToken(tokensString string) (*Claims, error) { token, err := jwt.ParseWithClaims(tokensString, &Claims{}, secret()) if err != nil { @@ -73,10 +78,12 @@ func GetClaimFromToken(tokensString string) (*Claims, error) { if claims, ok := token.Claims.(*Claims); ok && token.Valid { return claims, nil } + return nil, utils.Wrap(errs.ErrTokenUnknown, "") } } +// CheckAccessV3 func CheckAccessV3(ctx context.Context, ownerUserID string) (err error) { opUserID := mcontext.GetOpUserID(ctx) if utils.IsContain(opUserID, config.Config.Manager.UserID) { @@ -85,28 +92,35 @@ func CheckAccessV3(ctx context.Context, ownerUserID string) (err error) { if opUserID == ownerUserID { return nil } + return errs.ErrNoPermission.Wrap(utils.GetSelfFuncName()) } +// IsAppManagerUid func IsAppManagerUid(ctx context.Context) bool { return utils.IsContain(mcontext.GetOpUserID(ctx), config.Config.Manager.UserID) } +// CheckAdmin func CheckAdmin(ctx context.Context) error { if utils.IsContain(mcontext.GetOpUserID(ctx), config.Config.Manager.UserID) { return nil } + return errs.ErrNoPermission.Wrap(fmt.Sprintf("user %s is not admin userID", mcontext.GetOpUserID(ctx))) } +// ParseRedisInterfaceToken func ParseRedisInterfaceToken(redisToken interface{}) (*Claims, error) { return GetClaimFromToken(string(redisToken.([]uint8))) } +// IsManagerUserID func IsManagerUserID(opUserID string) bool { return utils.IsContain(opUserID, config.Config.Manager.UserID) } +// WsVerifyToken func WsVerifyToken(token, userID string, platformID int) error { claim, err := GetClaimFromToken(token) if err != nil { @@ -118,5 +132,6 @@ func WsVerifyToken(token, userID string, platformID int) error { if claim.PlatformID != platformID { return errs.ErrTokenInvalid.Wrap(fmt.Sprintf("token platform %d != %d", claim.PlatformID, platformID)) } + return nil } diff --git a/pkg/discoveryregistry/discovery_register.go b/pkg/discoveryregistry/discovery_register.go index 4ebabe7a8..f81a91c7b 100644 --- a/pkg/discoveryregistry/discovery_register.go +++ b/pkg/discoveryregistry/discovery_register.go @@ -20,6 +20,7 @@ import ( "google.golang.org/grpc" ) +// Conn type Conn interface { GetConns(ctx context.Context, serviceName string, opts ...grpc.DialOption) ([]grpc.ClientConnInterface, error) GetConn(ctx context.Context, serviceName string, opts ...grpc.DialOption) (grpc.ClientConnInterface, error) @@ -29,6 +30,7 @@ type Conn interface { GetClientLocalConns() map[string][]grpc.ClientConnInterface } +// SvcDiscoveryRegistry type SvcDiscoveryRegistry interface { Conn Register(serviceName, host string, port int, opts ...grpc.DialOption) error diff --git a/pkg/discoveryregistry/zookeeper/conf.go b/pkg/discoveryregistry/zookeeper/conf.go index 034c525ba..8cfb504c1 100644 --- a/pkg/discoveryregistry/zookeeper/conf.go +++ b/pkg/discoveryregistry/zookeeper/conf.go @@ -18,6 +18,7 @@ import ( "github.com/go-zookeeper/zk" ) +// RegisterConf2Registry func (s *ZkClient) RegisterConf2Registry(key string, conf []byte) error { exists, _, err := s.conn.Exists(s.getPath(key)) if err != nil { @@ -32,10 +33,13 @@ func (s *ZkClient) RegisterConf2Registry(key string, conf []byte) error { if err != zk.ErrNodeExists { return err } + return nil } +// GetConfFromRegistry func (s *ZkClient) GetConfFromRegistry(key string) ([]byte, error) { bytes, _, err := s.conn.Get(s.getPath(key)) + return bytes, err } diff --git a/pkg/discoveryregistry/zookeeper/discover.go b/pkg/discoveryregistry/zookeeper/discover.go index 94cf1f84a..fc28dd388 100644 --- a/pkg/discoveryregistry/zookeeper/discover.go +++ b/pkg/discoveryregistry/zookeeper/discover.go @@ -35,6 +35,7 @@ var ( ErrConnIsNilButLocalNotNil = errors.New("conn is nil, but local is not nil") ) +// watch func (s *ZkClient) watch() { for { event := <-s.eventChan @@ -69,6 +70,7 @@ func (s *ZkClient) watch() { } } +// GetConnsRemote func (s *ZkClient) GetConnsRemote(serviceName string) (conns []resolver.Address, err error) { path := s.getPath(serviceName) _, _, _, err = s.conn.ChildrenW(path) @@ -86,15 +88,18 @@ func (s *ZkClient) GetConnsRemote(serviceName string) (conns []resolver.Address, if err == zk.ErrNoNode { return nil, errors.Wrap(err, "this is zk ErrNoNode") } + return nil, errors.Wrap(err, "get children error") } log.ZDebug(context.Background(), "get addrs from remote", "conn", string(data)) conns = append(conns, resolver.Address{Addr: string(data), ServerName: serviceName}) } } + return conns, nil } +// GetConns func (s *ZkClient) GetConns(ctx context.Context, serviceName string, opts ...grpc.DialOption) ([]grpc.ClientConnInterface, error) { s.logger.Printf("get conns from client, serviceName: %s", serviceName) s.lock.Lock() @@ -114,21 +119,26 @@ func (s *ZkClient) GetConns(ctx context.Context, serviceName string, opts ...grp cc, err := grpc.DialContext(ctx, addr.Addr, append(s.options, opts...)...) if err != nil { log.ZError(context.Background(), "dialContext failed", err, "addr", addr.Addr, "opts", append(s.options, opts...)) + return nil, errs.Wrap(err) } conns = append(conns, cc) } s.localConns[serviceName] = conns } + return conns, nil } +// GetConn func (s *ZkClient) GetConn(ctx context.Context, serviceName string, opts ...grpc.DialOption) (grpc.ClientConnInterface, error) { newOpts := append(s.options, grpc.WithDefaultServiceConfig(fmt.Sprintf(`{"LoadBalancingPolicy": "%s"}`, s.balancerName))) s.logger.Printf("get conn from client, serviceName: %s", serviceName) + return grpc.DialContext(ctx, fmt.Sprintf("%s:///%s", s.scheme, serviceName), append(newOpts, opts...)...) } +// CloseConn func (s *ZkClient) CloseConn(conn grpc.ClientConnInterface) { if closer, ok := conn.(io.Closer); ok { closer.Close() diff --git a/pkg/discoveryregistry/zookeeper/register.go b/pkg/discoveryregistry/zookeeper/register.go index 8fc5fa34e..dfdc567ee 100644 --- a/pkg/discoveryregistry/zookeeper/register.go +++ b/pkg/discoveryregistry/zookeeper/register.go @@ -21,16 +21,20 @@ import ( "google.golang.org/grpc" ) +// CreateRpcRootNodes func (s *ZkClient) CreateRpcRootNodes(serviceNames []string) error { for _, serviceName := range serviceNames { if err := s.ensureName(serviceName); err != nil && err != zk.ErrNodeExists { return err } } + return nil } +// CreateTempNode func (s *ZkClient) CreateTempNode(rpcRegisterName, addr string) (node string, err error) { + return s.conn.CreateProtectedEphemeralSequential( s.getPath(rpcRegisterName)+"/"+addr+"_", []byte(addr), @@ -38,6 +42,7 @@ func (s *ZkClient) CreateTempNode(rpcRegisterName, addr string) (node string, er ) } +// Register func (s *ZkClient) Register(rpcRegisterName, host string, port int, opts ...grpc.DialOption) error { if err := s.ensureName(rpcRegisterName); err != nil { return err @@ -55,9 +60,11 @@ func (s *ZkClient) Register(rpcRegisterName, host string, port int, opts ...grpc s.rpcRegisterAddr = addr s.node = node s.isRegistered = true + return nil } +// UnRegister func (s *ZkClient) UnRegister() error { s.lock.Lock() defer s.lock.Unlock() @@ -72,5 +79,6 @@ func (s *ZkClient) UnRegister() error { s.isRegistered = false s.localConns = make(map[string][]grpc.ClientConnInterface) s.resolvers = make(map[string]*Resolver) + return nil } diff --git a/pkg/discoveryregistry/zookeeper/resolver.go b/pkg/discoveryregistry/zookeeper/resolver.go index 7e9c8c125..792d904ba 100644 --- a/pkg/discoveryregistry/zookeeper/resolver.go +++ b/pkg/discoveryregistry/zookeeper/resolver.go @@ -23,6 +23,7 @@ import ( "google.golang.org/grpc/resolver" ) +// Resolver type Resolver struct { target resolver.Target cc resolver.ClientConn @@ -31,6 +32,7 @@ type Resolver struct { getConnsRemote func(serviceName string) (conns []resolver.Address, err error) } +// ResolveNowZK func (r *Resolver) ResolveNowZK(o resolver.ResolveNowOptions) { log.ZDebug( context.Background(), @@ -45,6 +47,7 @@ func (r *Resolver) ResolveNowZK(o resolver.ResolveNowOptions) { newConns, err := r.getConnsRemote(strings.TrimLeft(r.target.URL.Path, "/")) if err != nil { log.ZError(context.Background(), "resolve now error", err, "target", r.target) + return } r.addrs = newConns @@ -58,15 +61,19 @@ func (r *Resolver) ResolveNowZK(o resolver.ResolveNowOptions) { "zk path", r.target.URL.Path, ) + return } log.ZDebug(context.Background(), "resolve now finished", "target", r.target, "conns", r.addrs) } +// ResolveNow func (r *Resolver) ResolveNow(o resolver.ResolveNowOptions) {} +// Close func (s *Resolver) Close() {} +// Build func (s *ZkClient) Build( target resolver.Target, cc resolver.ClientConn, @@ -76,6 +83,7 @@ func (s *ZkClient) Build( serviceName := strings.TrimLeft(target.URL.Path, "/") if oldResolver, ok := s.resolvers[serviceName]; ok { s.logger.Printf("rpc resolver exist: %+v, cc: %+v, key: %s", target, cc.UpdateState, serviceName) + return oldResolver, nil } r := &Resolver{} @@ -87,7 +95,9 @@ func (s *ZkClient) Build( defer s.lock.Unlock() s.resolvers[serviceName] = r s.logger.Printf("build resolver finished: %+v, cc: %+v, key: %s", target, cc.UpdateState, serviceName) + return r, nil } +// Scheme func (s *ZkClient) Scheme() string { return s.scheme } diff --git a/pkg/discoveryregistry/zookeeper/zk.go b/pkg/discoveryregistry/zookeeper/zk.go index cc333c4b6..6237c0b02 100644 --- a/pkg/discoveryregistry/zookeeper/zk.go +++ b/pkg/discoveryregistry/zookeeper/zk.go @@ -30,10 +30,12 @@ const ( timeout = 5 ) +// Logger type Logger interface { Printf(string, ...interface{}) } +// ZkClient type ZkClient struct { zkServers []string zkRoot string @@ -62,14 +64,17 @@ type ZkClient struct { logger Logger } +// ZkOption type ZkOption func(*ZkClient) +// WithRoundRobin func WithRoundRobin() ZkOption { return func(client *ZkClient) { client.balancerName = "round_robin" } } +// WithUserNameAndPassword func WithUserNameAndPassword(userName, password string) ZkOption { return func(client *ZkClient) { client.userName = userName @@ -83,24 +88,28 @@ func WithOptions(opts ...grpc.DialOption) ZkOption { } } +// WithFreq func WithFreq(freq time.Duration) ZkOption { return func(client *ZkClient) { client.ticker = time.NewTicker(freq) } } +// WithTimeout func WithTimeout(timeout int) ZkOption { return func(client *ZkClient) { client.timeout = timeout } } +// WithLogger func WithLogger(logger Logger) ZkOption { return func(client *ZkClient) { client.logger = logger } } +// NewClient func NewClient(zkServers []string, zkRoot string, options ...ZkOption) (*ZkClient, error) { client := &ZkClient{ zkServers: zkServers, @@ -134,15 +143,18 @@ func NewClient(zkServers []string, zkRoot string, options ...ZkOption) (*ZkClien client.conn = conn if err := client.ensureRoot(); err != nil { client.CloseZK() + return nil, err } resolver.Register(client) go client.refresh() go client.watch() time.Sleep(time.Millisecond * 50) + return client, nil } +// CloseZK func (s *ZkClient) CloseZK() { s.conn.Close() } @@ -158,6 +170,7 @@ func (s *ZkClient) ensureAndCreate(node string) error { return err } } + return nil } @@ -189,14 +202,17 @@ func (s *ZkClient) flushResolver(serviceName string) { } } +// GetZkConn func (s *ZkClient) GetZkConn() *zk.Conn { return s.conn } +// GetRootPath func (s *ZkClient) GetRootPath() string { return s.zkRoot } +// GetNode func (s *ZkClient) GetNode() string { return s.node } @@ -217,10 +233,12 @@ func (s *ZkClient) getAddr(host string, port int) string { return net.JoinHostPort(host, strconv.Itoa(port)) } +// AddOption func (s *ZkClient) AddOption(opts ...grpc.DialOption) { s.options = append(s.options, opts...) } +// GetClientLocalConns func (s *ZkClient) GetClientLocalConns() map[string][]grpc.ClientConnInterface { return s.localConns } diff --git a/pkg/errs/coderr.go b/pkg/errs/coderr.go index af88a6353..5bd878922 100644 --- a/pkg/errs/coderr.go +++ b/pkg/errs/coderr.go @@ -15,12 +15,12 @@ package errs import ( - "fmt" "strings" "github.com/pkg/errors" ) +// CodeError type CodeError interface { Code() int Msg() string @@ -32,6 +32,7 @@ type CodeError interface { error } +// NewCodeError func NewCodeError(code int, msg string) CodeError { return &codeError{ code: code, @@ -64,6 +65,7 @@ func (e *codeError) WithDetail(detail string) CodeError { } else { d = e.detail + ", " + detail } + return &codeError{ code: e.code, msg: e.msg, @@ -93,13 +95,15 @@ func (e *codeError) Is(err error, loose ...bool) bool { return codeErr.Code() == e.code } } + return false } func (e *codeError) Error() string { - return fmt.Sprintf("%s", e.msg) + return e.msg } +// Unwrap func Unwrap(err error) error { for err != nil { unwrap, ok := err.(interface { @@ -110,9 +114,11 @@ func Unwrap(err error) error { } err = unwrap.Unwrap() } + return err } +// Wrap func Wrap(err error, msg ...string) error { if err == nil { return nil @@ -120,5 +126,6 @@ func Wrap(err error, msg ...string) error { if len(msg) == 0 { return errors.WithStack(err) } + return errors.Wrap(err, strings.Join(msg, ", ")) } diff --git a/pkg/errs/relation.go b/pkg/errs/relation.go index 0a7ad4997..d5e9c6345 100644 --- a/pkg/errs/relation.go +++ b/pkg/errs/relation.go @@ -14,6 +14,7 @@ package errs +// Relation var Relation = &relation{m: make(map[int]map[int]struct{})} func init() { @@ -52,5 +53,6 @@ func (r *relation) Is(parent, child int) bool { return false } _, ok = s[child] + return ok } diff --git a/pkg/proto/auth/auth.go b/pkg/proto/auth/auth.go index 9b8fdd988..db2019a67 100644 --- a/pkg/proto/auth/auth.go +++ b/pkg/proto/auth/auth.go @@ -19,6 +19,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" ) +// Check func (x *UserTokenReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") @@ -26,9 +27,11 @@ func (x *UserTokenReq) Check() error { if x.PlatformID > constant.AdminPlatformID || x.PlatformID < constant.IOSPlatformID { return errs.ErrArgs.Wrap("platform is invalidate") } + return nil } +// Check func (x *ForceLogoutReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") @@ -36,12 +39,15 @@ func (x *ForceLogoutReq) Check() error { if x.PlatformID > constant.AdminPlatformID || x.PlatformID < constant.IOSPlatformID { return errs.ErrArgs.Wrap("platformID is invalidate") } + return nil } +// Check func (x *ParseTokenReq) Check() error { if x.Token == "" { return errs.ErrArgs.Wrap("userID is empty") } + return nil } diff --git a/pkg/proto/conversation/conversation.go b/pkg/proto/conversation/conversation.go index 7e8f62bbc..ad6c6a623 100644 --- a/pkg/proto/conversation/conversation.go +++ b/pkg/proto/conversation/conversation.go @@ -16,13 +16,16 @@ package conversation import "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" +// Check func (x *ConversationReq) Check() error { if x.ConversationID == "" { return errs.ErrArgs.Wrap("conversation is empty") } + return nil } +// Check func (x *Conversation) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("OwnerUserID is empty") @@ -36,19 +39,23 @@ func (x *Conversation) Check() error { if x.RecvMsgOpt < 0 || x.RecvMsgOpt > 2 { return errs.ErrArgs.Wrap("RecvMsgOpt is invalid") } + return nil } -//func (x *ModifyConversationFieldReq) Check() error { +// // Check +// func (x *ModifyConversationFieldReq) Check() error { // if x.UserIDList == nil { // return errs.ErrArgs.Wrap("userIDList is empty") // } // if x.Conversation == nil { // return errs.ErrArgs.Wrap("conversation is empty") // } -// return nil -//} +// +// return nil +// } +// Check func (x *SetConversationReq) Check() error { if x.Conversation == nil { return errs.ErrArgs.Wrap("Conversation is empty") @@ -56,10 +63,12 @@ func (x *SetConversationReq) Check() error { if x.Conversation.ConversationID == "" { return errs.ErrArgs.Wrap("conversationID is empty") } + return nil } -//func (x *SetRecvMsgOptReq) Check() error { +// // Check +// func (x *SetRecvMsgOptReq) Check() error { // if x.OwnerUserID == "" { // return errs.ErrArgs.Wrap("ownerUserID is empty") // } @@ -69,9 +78,11 @@ func (x *SetConversationReq) Check() error { // if x.RecvMsgOpt > 2 || x.RecvMsgOpt < 0 { // return errs.ErrArgs.Wrap("MsgReceiveOpt is invalid") // } -// return nil -//} +// +// return nil +// } +// Check func (x *GetConversationReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("ownerUserID is empty") @@ -79,9 +90,11 @@ func (x *GetConversationReq) Check() error { if x.ConversationID == "" { return errs.ErrArgs.Wrap("conversationID is empty") } + return nil } +// Check func (x *GetConversationsReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("ownerUserID is empty") @@ -89,41 +102,51 @@ func (x *GetConversationsReq) Check() error { if x.ConversationIDs == nil { return errs.ErrArgs.Wrap("conversationIDs is empty") } + return nil } +// Check func (x *GetAllConversationsReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("ownerUserID is empty") } + return nil } // -//func (x *BatchSetConversationsReq) Check() error { +// // Check +// func (x *BatchSetConversationsReq) Check() error { // if x.Conversations == nil { // return errs.ErrArgs.Wrap("conversations is empty") // } // if x.OwnerUserID == "" { // return errs.ErrArgs.Wrap("conversation is empty") // } -// return nil -//} +// +// return nil +// } +// Check func (x *GetRecvMsgNotNotifyUserIDsReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") } + return nil } +// Check func (x *CreateGroupChatConversationsReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") } + return nil } +// Check func (x *SetConversationMaxSeqReq) Check() error { if x.ConversationID == "" { return errs.ErrArgs.Wrap("conversationID is empty") @@ -134,9 +157,11 @@ func (x *SetConversationMaxSeqReq) Check() error { if x.MaxSeq <= 0 { return errs.ErrArgs.Wrap("maxSeq is invalid") } + return nil } +// Check func (x *SetConversationsReq) Check() error { if x.UserIDs == nil { return errs.ErrArgs.Wrap("userID is empty") @@ -144,19 +169,24 @@ func (x *SetConversationsReq) Check() error { if x.Conversation == nil { return errs.ErrArgs.Wrap("conversation is empty") } + return nil } +// Check func (x *GetUserConversationIDsHashReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("ownerUserID is empty") } + return nil } +// Check func (x *GetConversationsByConversationIDReq) Check() error { if x.ConversationIDs == nil { return errs.ErrArgs.Wrap("conversationIDs is empty") } + return nil } diff --git a/pkg/proto/friend/friend.go b/pkg/proto/friend/friend.go index 197fc753c..59d99ba38 100644 --- a/pkg/proto/friend/friend.go +++ b/pkg/proto/friend/friend.go @@ -16,6 +16,7 @@ package friend import "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" +// Check func (x *GetPaginationFriendsReq) Check() error { if x.Pagination == nil { return errs.ErrArgs.Wrap("pagination is empty") @@ -26,9 +27,11 @@ func (x *GetPaginationFriendsReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") } + return nil } +// Check func (x *ApplyToAddFriendReq) Check() error { if x.ToUserID == "" { return errs.ErrArgs.Wrap("toUserID is empty") @@ -36,9 +39,11 @@ func (x *ApplyToAddFriendReq) Check() error { if x.FromUserID == "" { return errs.ErrArgs.Wrap("fromUserID is empty") } + return nil } +// Check func (x *ImportFriendReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("ownerUserID is empty") @@ -46,9 +51,11 @@ func (x *ImportFriendReq) Check() error { if x.FriendUserIDs == nil { return errs.ErrArgs.Wrap("friendUserIDS is empty") } + return nil } +// Check func (x *GetPaginationFriendsApplyToReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") @@ -59,9 +66,11 @@ func (x *GetPaginationFriendsApplyToReq) Check() error { if x.Pagination.PageNumber < 1 { return errs.ErrArgs.Wrap("pageNumber is invalid") } + return nil } +// Check func (x *GetDesignatedFriendsReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("ownerUserID is empty") @@ -69,9 +78,11 @@ func (x *GetDesignatedFriendsReq) Check() error { if x.FriendUserIDs == nil { return errs.ErrArgs.Wrap("friendUserIDS is empty") } + return nil } +// Check func (x *AddBlackReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("ownerUserID is empty") @@ -79,9 +90,11 @@ func (x *AddBlackReq) Check() error { if x.BlackUserID == "" { return errs.ErrArgs.Wrap("BlackUserID is empty") } + return nil } +// Check func (x *RemoveBlackReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("ownerUserID is empty") @@ -89,9 +102,11 @@ func (x *RemoveBlackReq) Check() error { if x.BlackUserID == "" { return errs.ErrArgs.Wrap("BlackUserID is empty") } + return nil } +// Check func (x *GetPaginationBlacksReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") @@ -102,9 +117,11 @@ func (x *GetPaginationBlacksReq) Check() error { if x.Pagination.PageNumber < 1 { return errs.ErrArgs.Wrap("pageNumber is invalid") } + return nil } +// Check func (x *IsFriendReq) Check() error { if x.UserID1 == "" { return errs.ErrArgs.Wrap("userID1 is empty") @@ -112,9 +129,11 @@ func (x *IsFriendReq) Check() error { if x.UserID2 == "" { return errs.ErrArgs.Wrap("userID2 is empty") } + return nil } +// Check func (x *IsBlackReq) Check() error { if x.UserID1 == "" { return errs.ErrArgs.Wrap("userID1 is empty") @@ -122,9 +141,11 @@ func (x *IsBlackReq) Check() error { if x.UserID2 == "" { return errs.ErrArgs.Wrap("userID2 is empty") } + return nil } +// Check func (x *DeleteFriendReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("userID1 is empty") @@ -132,9 +153,11 @@ func (x *DeleteFriendReq) Check() error { if x.FriendUserID == "" { return errs.ErrArgs.Wrap("userID2 is empty") } + return nil } +// Check func (x *RespondFriendApplyReq) Check() error { if x.ToUserID == "" { return errs.ErrArgs.Wrap("toUserID is empty") @@ -142,9 +165,11 @@ func (x *RespondFriendApplyReq) Check() error { if x.FromUserID == "" { return errs.ErrArgs.Wrap("fromUserID is empty") } + return nil } +// Check func (x *SetFriendRemarkReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("ownerUserID is empty") @@ -152,9 +177,11 @@ func (x *SetFriendRemarkReq) Check() error { if x.FriendUserID == "" { return errs.ErrArgs.Wrap("fromUserID is empty") } + return nil } +// Check func (x *GetPaginationFriendsApplyFromReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") @@ -165,12 +192,15 @@ func (x *GetPaginationFriendsApplyFromReq) Check() error { if x.Pagination.PageNumber < 1 { return errs.ErrArgs.Wrap("pageNumber is invalid") } + return nil } +// Check func (x *GetFriendIDsReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") } + return nil } diff --git a/pkg/proto/group/group.go b/pkg/proto/group/group.go index 2cebc0df0..78641df72 100644 --- a/pkg/proto/group/group.go +++ b/pkg/proto/group/group.go @@ -16,6 +16,7 @@ package group import "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" +// Check func (x *CreateGroupReq) Check() error { if x.MemberUserIDs == nil { return errs.ErrArgs.Wrap("memberUserIDS is empty") @@ -29,16 +30,20 @@ func (x *CreateGroupReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("ownerUserID") } + return nil } +// Check func (x *GetGroupsInfoReq) Check() error { if x.GroupIDs == nil { return errs.ErrArgs.Wrap("GroupIDs") } + return nil } +// Check func (x *SetGroupInfoReq) Check() error { if x.GroupInfoForSet == nil { return errs.ErrArgs.Wrap("GroupInfoForSets is empty") @@ -46,9 +51,11 @@ func (x *SetGroupInfoReq) Check() error { if x.GroupInfoForSet.GroupID == "" { return errs.ErrArgs.Wrap("GroupID is empty") } + return nil } +// Check func (x *GetGroupApplicationListReq) Check() error { if x.Pagination == nil { return errs.ErrArgs.Wrap("pagination is empty") @@ -59,9 +66,11 @@ func (x *GetGroupApplicationListReq) Check() error { if x.FromUserID == "" { return errs.ErrArgs.Wrap("fromUserID is empty") } + return nil } +// Check func (x *GetUserReqApplicationListReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("UserID is empty") @@ -72,9 +81,11 @@ func (x *GetUserReqApplicationListReq) Check() error { if x.Pagination.PageNumber < 1 { return errs.ErrArgs.Wrap("pageNumber is invalid") } + return nil } +// Check func (x *TransferGroupOwnerReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") @@ -85,9 +96,11 @@ func (x *TransferGroupOwnerReq) Check() error { if x.NewOwnerUserID == "" { return errs.ErrArgs.Wrap("newOwnerUserID is empty") } + return nil } +// Check func (x *JoinGroupReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") @@ -100,9 +113,11 @@ func (x *JoinGroupReq) Check() error { return errs.ErrArgs.Wrap("inviterUserID is empty") } } + return nil } +// Check func (x *GroupApplicationResponseReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") @@ -113,16 +128,20 @@ func (x *GroupApplicationResponseReq) Check() error { if x.HandleResult > 1 || x.HandleResult < -1 { return errs.ErrArgs.Wrap("handleResult is invalid") } + return nil } +// Check func (x *QuitGroupReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") } + return nil } +// Check func (x *GetGroupMemberListReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") @@ -136,9 +155,11 @@ func (x *GetGroupMemberListReq) Check() error { if x.Filter < 0 || x.Filter > 5 { return errs.ErrArgs.Wrap("filter is invalid") } + return nil } +// Check func (x *GetGroupMembersInfoReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") @@ -146,9 +167,11 @@ func (x *GetGroupMembersInfoReq) Check() error { if x.UserIDs == nil { return errs.ErrArgs.Wrap("userIDs is empty") } + return nil } +// Check func (x *KickGroupMemberReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") @@ -156,9 +179,11 @@ func (x *KickGroupMemberReq) Check() error { if x.KickedUserIDs == nil { return errs.ErrArgs.Wrap("kickUserIDs is empty") } + return nil } +// Check func (x *GetJoinedGroupListReq) Check() error { if x.Pagination == nil { return errs.ErrArgs.Wrap("pagination is empty") @@ -169,9 +194,11 @@ func (x *GetJoinedGroupListReq) Check() error { if x.FromUserID == "" { return errs.ErrArgs.Wrap("fromUserID is empty") } + return nil } +// Check func (x *InviteUserToGroupReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") @@ -179,9 +206,11 @@ func (x *InviteUserToGroupReq) Check() error { if x.InvitedUserIDs == nil { return errs.ErrArgs.Wrap("invitedUserIDs is empty") } + return nil } +// Check func (x *GetGroupAllMemberReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") @@ -192,9 +221,11 @@ func (x *GetGroupAllMemberReq) Check() error { if x.Pagination.PageNumber < 1 { return errs.ErrArgs.Wrap("pageNumber is invalid") } + return nil } +// Check func (x *GetGroupsReq) Check() error { if x.Pagination == nil { return errs.ErrArgs.Wrap("pagination is empty") @@ -202,16 +233,20 @@ func (x *GetGroupsReq) Check() error { if x.Pagination.PageNumber < 1 { return errs.ErrArgs.Wrap("pageNumber is invalid") } + return nil } +// Check func (x *GetGroupMemberReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") } + return nil } +// Check func (x *GetGroupMembersCMSReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") @@ -222,16 +257,20 @@ func (x *GetGroupMembersCMSReq) Check() error { if x.Pagination.PageNumber < 1 { return errs.ErrArgs.Wrap("pageNumber is invalid") } + return nil } +// Check func (x *DismissGroupReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") } + return nil } +// Check func (x *MuteGroupMemberReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") @@ -242,9 +281,11 @@ func (x *MuteGroupMemberReq) Check() error { if x.MutedSeconds <= 0 { return errs.ErrArgs.Wrap("mutedSeconds is empty") } + return nil } +// Check func (x *CancelMuteGroupMemberReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") @@ -252,37 +293,47 @@ func (x *CancelMuteGroupMemberReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") } + return nil } +// Check func (x *MuteGroupReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") } + return nil } +// Check func (x *CancelMuteGroupReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("groupID is empty") } + return nil } +// Check func (x *GetJoinedSuperGroupListReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") } + return nil } +// Check func (x *GetSuperGroupsInfoReq) Check() error { if x.GroupIDs == nil { return errs.ErrArgs.Wrap("GroupIDs is empty") } + return nil } +// Check func (x *SetGroupMemberInfo) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("GroupID is empty") @@ -290,23 +341,29 @@ func (x *SetGroupMemberInfo) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") } + return nil } +// Check func (x *SetGroupMemberInfoReq) Check() error { if x.Members == nil { return errs.ErrArgs.Wrap("Members is empty") } + return nil } +// Check func (x *GetGroupAbstractInfoReq) Check() error { if x.GroupIDs == nil { return errs.ErrArgs.Wrap("GroupID is empty") } + return nil } +// Check func (x *GetUserInGroupMembersReq) Check() error { if x.GroupIDs == nil { return errs.ErrArgs.Wrap("GroupID is empty") @@ -314,16 +371,20 @@ func (x *GetUserInGroupMembersReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") } + return nil } +// Check func (x *GetGroupMemberUserIDsReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("GroupID is empty") } + return nil } +// Check func (x *GetGroupMemberRoleLevelReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("GroupID is empty") @@ -331,16 +392,20 @@ func (x *GetGroupMemberRoleLevelReq) Check() error { if x.RoleLevels == nil { return errs.ErrArgs.Wrap("rolesLevel is empty") } + return nil } +// Check func (x *GetGroupInfoCacheReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("GroupID is empty") } + return nil } +// Check func (x *GetGroupMemberCacheReq) Check() error { if x.GroupID == "" { return errs.ErrArgs.Wrap("GroupID is empty") @@ -348,5 +413,6 @@ func (x *GetGroupMemberCacheReq) Check() error { if x.GroupMemberID == "" { return errs.ErrArgs.Wrap("GroupMemberID is empty") } + return nil } diff --git a/pkg/proto/msg/msg.go b/pkg/proto/msg/msg.go index 03c9da915..48904e82b 100644 --- a/pkg/proto/msg/msg.go +++ b/pkg/proto/msg/msg.go @@ -16,13 +16,16 @@ package msg import "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" +// Check func (x *GetMaxAndMinSeqReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") } + return nil } +// Check func (x *SendMsgReq) Check() error { if x.MsgData == nil { return errs.ErrArgs.Wrap("MsgData is empty") @@ -30,21 +33,25 @@ func (x *SendMsgReq) Check() error { if err := x.MsgData.Check(); err != nil { return err } + return nil } +// Check func (x *SetSendMsgStatusReq) Check() error { if x.Status < 0 || x.Status > 3 { return errs.ErrArgs.Wrap("status is invalid") } + return nil } +// Check func (x *GetSendMsgStatusReq) Check() error { return nil } -//func (x *ModifyMessageReactionExtensionsReq) Check() error { +// func (x *ModifyMessageReactionExtensionsReq) Check() error { // if x.ConversationID == "" { // return errs.ErrArgs.Wrap("conversationID is empty") // } @@ -55,9 +62,9 @@ func (x *GetSendMsgStatusReq) Check() error { // return errs.ErrArgs.Wrap("reactionExtensions is empty") // } // return nil -//} +// } // -//func (x *SetMessageReactionExtensionsReq) Check() error { +// func (x *SetMessageReactionExtensionsReq) Check() error { // if x.ConversationID == "" { // return errs.ErrArgs.Wrap("conversationID is empty") // } @@ -68,9 +75,9 @@ func (x *GetSendMsgStatusReq) Check() error { // return errs.ErrArgs.Wrap("reactionExtensions is empty") // } // return nil -//} +// } // -//func (x *GetMessagesReactionExtensionsReq) Check() error { +// func (x *GetMessagesReactionExtensionsReq) Check() error { // if x.ConversationID == "" { // return errs.ErrArgs.Wrap("conversationID is empty") // } @@ -84,9 +91,9 @@ func (x *GetSendMsgStatusReq) Check() error { // return errs.ErrArgs.Wrap("TypeKeys is empty") // } // return nil -//} +// } // -//func (x *DeleteMessagesReactionExtensionsReq) Check() error { +// func (x *DeleteMessagesReactionExtensionsReq) Check() error { // if x.ConversationID == "" { // return errs.ErrArgs.Wrap("conversationID is empty") // } @@ -97,12 +104,14 @@ func (x *GetSendMsgStatusReq) Check() error { // return errs.ErrArgs.Wrap("ReactionExtensions is empty") // } // return nil -//} +// } +// Check func (x *DelMsgsReq) Check() error { return nil } +// Check func (x *RevokeMsgReq) Check() error { if x.ConversationID == "" { return errs.ErrArgs.Wrap("conversationID is empty") @@ -113,9 +122,11 @@ func (x *RevokeMsgReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") } + return nil } +// Check func (x *MarkMsgsAsReadReq) Check() error { if x.ConversationID == "" { return errs.ErrArgs.Wrap("conversationID is empty") @@ -131,9 +142,11 @@ func (x *MarkMsgsAsReadReq) Check() error { return errs.ErrArgs.Wrap("seqs has 0 value is invalid") } } + return nil } +// Check func (x *MarkConversationAsReadReq) Check() error { if x.ConversationID == "" { return errs.ErrArgs.Wrap("conversationID is empty") @@ -149,9 +162,11 @@ func (x *MarkConversationAsReadReq) Check() error { return errs.ErrArgs.Wrap("seqs has 0 value is invalid") } } + return nil } +// Check func (x *SetConversationHasReadSeqReq) Check() error { if x.ConversationID == "" { return errs.ErrArgs.Wrap("conversationID is empty") @@ -162,9 +177,11 @@ func (x *SetConversationHasReadSeqReq) Check() error { if x.HasReadSeq < 1 { return errs.ErrArgs.Wrap("hasReadSeq is invalid") } + return nil } +// Check func (x *ClearConversationsMsgReq) Check() error { if x.ConversationIDs == nil { return errs.ErrArgs.Wrap("conversationIDs is empty") @@ -172,16 +189,20 @@ func (x *ClearConversationsMsgReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") } + return nil } +// Check func (x *UserClearAllMsgReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") } + return nil } +// Check func (x *DeleteMsgsReq) Check() error { if x.ConversationID == "" { return errs.ErrArgs.Wrap("conversationID is empty") @@ -192,26 +213,33 @@ func (x *DeleteMsgsReq) Check() error { if x.Seqs == nil { return errs.ErrArgs.Wrap("seqs is empty") } + return nil } +// Check func (x *DeleteMsgPhysicalReq) Check() error { if x.ConversationIDs == nil { return errs.ErrArgs.Wrap("conversationIDs is empty") } + return nil } +// Check func (x *GetConversationMaxSeqReq) Check() error { if x.ConversationID == "" { return errs.ErrArgs.Wrap("conversationID is empty") } + return nil } +// Check func (x *GetConversationsHasReadAndMaxSeqReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("userID is empty") } + return nil } diff --git a/pkg/proto/msggateway/msggateway.go b/pkg/proto/msggateway/msggateway.go index 5e0c85b45..45f20c7cb 100644 --- a/pkg/proto/msggateway/msggateway.go +++ b/pkg/proto/msggateway/msggateway.go @@ -16,6 +16,7 @@ package msggateway import "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" +// Check func (x *OnlinePushMsgReq) Check() error { if x.MsgData == nil { return errs.ErrArgs.Wrap("MsgData is empty") @@ -26,9 +27,11 @@ func (x *OnlinePushMsgReq) Check() error { if x.PushToUserID == "" { return errs.ErrArgs.Wrap("PushToUserID is empty") } + return nil } +// Check func (x *OnlineBatchPushOneMsgReq) Check() error { if x.MsgData == nil { return errs.ErrArgs.Wrap("MsgData is empty") @@ -39,16 +42,20 @@ func (x *OnlineBatchPushOneMsgReq) Check() error { if x.PushToUserIDs == nil { return errs.ErrArgs.Wrap("PushToUserIDs is empty") } + return nil } +// Check func (x *GetUsersOnlineStatusReq) Check() error { if x.UserIDs == nil { return errs.ErrArgs.Wrap("UserIDs is empty") } + return nil } +// Check func (x *KickUserOfflineReq) Check() error { if x.PlatformID < 1 || x.PlatformID > 9 { return errs.ErrArgs.Wrap("PlatformID is invalid") @@ -56,9 +63,11 @@ func (x *KickUserOfflineReq) Check() error { if x.KickUserIDList == nil { return errs.ErrArgs.Wrap("KickUserIDList is empty") } + return nil } +// Check func (x *MultiTerminalLoginCheckReq) Check() error { if x.PlatformID < 1 || x.PlatformID > 9 { return errs.ErrArgs.Wrap("PlatformID is invalid") @@ -69,5 +78,6 @@ func (x *MultiTerminalLoginCheckReq) Check() error { if x.Token == "" { return errs.ErrArgs.Wrap("Token is empty") } + return nil } diff --git a/pkg/proto/push/push.go b/pkg/proto/push/push.go index 2f117acda..83c6e9a9f 100644 --- a/pkg/proto/push/push.go +++ b/pkg/proto/push/push.go @@ -16,6 +16,7 @@ package push import "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" +// Check func (x *PushMsgReq) Check() error { if x.MsgData == nil { return errs.ErrArgs.Wrap("MsgData is empty") @@ -26,9 +27,11 @@ func (x *PushMsgReq) Check() error { if x.ConversationID == "" { return errs.ErrArgs.Wrap("ConversationID is empty") } + return nil } +// Check func (x *DelUserPushTokenReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("UserID is empty") @@ -36,5 +39,6 @@ func (x *DelUserPushTokenReq) Check() error { if x.PlatformID < 1 || x.PlatformID > 9 { return errs.ErrArgs.Wrap("PlatformID is invalid") } + return nil } diff --git a/pkg/proto/sdkws/sdkws.go b/pkg/proto/sdkws/sdkws.go index d0b0ae8aa..ff4630629 100644 --- a/pkg/proto/sdkws/sdkws.go +++ b/pkg/proto/sdkws/sdkws.go @@ -19,6 +19,7 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" ) +// Check func (x *MsgData) Check() error { if x.SendID == "" { return errs.ErrArgs.Wrap("sendID is empty") @@ -42,5 +43,6 @@ func (x *MsgData) Check() error { return errs.ErrArgs.Wrap("GroupID is empty") } } + return nil } diff --git a/pkg/proto/third/third.go b/pkg/proto/third/third.go index 0e2072727..454191342 100644 --- a/pkg/proto/third/third.go +++ b/pkg/proto/third/third.go @@ -16,7 +16,7 @@ package third import "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" -//func (x *ApplyPutReq) Check() error { +// func (x *ApplyPutReq) Check() error { // if x.PutID == "" { // return errs.ErrArgs.Wrap("PutID is empty") // } @@ -24,36 +24,37 @@ import "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" // return errs.ErrArgs.Wrap("ContentType is empty") // } // return nil -//} +// } // -//func (x *ConfirmPutReq) Check() error { +// func (x *ConfirmPutReq) Check() error { // if x.PutID == "" { // return errs.ErrArgs.Wrap("PutID is empty") // } // return nil -//} +// } // -//func (x *GetUrlReq) Check() error { +// func (x *GetUrlReq) Check() error { // if x.Name == "" { // return errs.ErrArgs.Wrap("Name is empty") // } // return nil -//} +// } // -//func (x *GetPutReq) Check() error { +// func (x *GetPutReq) Check() error { // if x.PutID == "" { // return errs.ErrArgs.Wrap("PutID is empty") // } // return nil -//} +// } // -//func (x *GetHashInfoReq) Check() error { +// func (x *GetHashInfoReq) Check() error { // if x.Hash == "" { // return errs.ErrArgs.Wrap("Hash is empty") // } // return nil -//} +// } +// Check func (x *FcmUpdateTokenReq) Check() error { if x.PlatformID < 1 || x.PlatformID > 9 { return errs.ErrArgs.Wrap("PlatformID is invalid") @@ -64,12 +65,15 @@ func (x *FcmUpdateTokenReq) Check() error { if x.Account == "" { return errs.ErrArgs.Wrap("Account is empty") } + return nil } +// Check func (x *SetAppBadgeReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("UserID is empty") } + return nil } diff --git a/pkg/proto/user/user.go b/pkg/proto/user/user.go index 06f07cb6e..f92ea9b9d 100644 --- a/pkg/proto/user/user.go +++ b/pkg/proto/user/user.go @@ -16,6 +16,7 @@ package user import "github.com/OpenIMSDK/Open-IM-Server/pkg/errs" +// Check func (x *GetAllUserIDReq) Check() error { if x.Pagination == nil { return errs.ErrArgs.Wrap("pagination is empty") @@ -23,23 +24,29 @@ func (x *GetAllUserIDReq) Check() error { if x.Pagination.PageNumber < 1 { return errs.ErrArgs.Wrap("pageNumber is invalid") } + return nil } +// Check func (x *AccountCheckReq) Check() error { if x.CheckUserIDs == nil { return errs.ErrArgs.Wrap("CheckUserIDs is empty") } + return nil } +// Check func (x *GetDesignateUsersReq) Check() error { if x.UserIDs == nil { return errs.ErrArgs.Wrap("UserIDs is empty") } + return nil } +// Check func (x *UpdateUserInfoReq) Check() error { if x.UserInfo == nil { return errs.ErrArgs.Wrap("UserInfo is empty") @@ -47,9 +54,11 @@ func (x *UpdateUserInfoReq) Check() error { if x.UserInfo.UserID == "" { return errs.ErrArgs.Wrap("UserID is empty") } + return nil } +// Check func (x *SetGlobalRecvMessageOptReq) Check() error { if x.GlobalRecvMsgOpt > 2 || x.GlobalRecvMsgOpt < 0 { return errs.ErrArgs.Wrap("GlobalRecvMsgOpt is invalid") @@ -57,9 +66,11 @@ func (x *SetGlobalRecvMessageOptReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("UserID is empty") } + return nil } +// Check func (x *SetConversationReq) Check() error { if err := x.Conversation.Check(); err != nil { return err @@ -67,9 +78,11 @@ func (x *SetConversationReq) Check() error { if x.NotificationType < 1 || x.NotificationType > 3 { return errs.ErrArgs.Wrap("NotificationType is invalid") } + return nil } +// Check func (x *SetRecvMsgOptReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("OwnerUserID is empty") @@ -83,9 +96,11 @@ func (x *SetRecvMsgOptReq) Check() error { if x.NotificationType < 1 || x.NotificationType > 3 { return errs.ErrArgs.Wrap("NotificationType is invalid") } + return nil } +// Check func (x *GetConversationReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("OwnerUserID is empty") @@ -93,9 +108,11 @@ func (x *GetConversationReq) Check() error { if x.ConversationID == "" { return errs.ErrArgs.Wrap("ConversationID is empty") } + return nil } +// Check func (x *GetConversationsReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("OwnerUserID is empty") @@ -103,16 +120,20 @@ func (x *GetConversationsReq) Check() error { if x.ConversationIDs == nil { return errs.ErrArgs.Wrap("ConversationIDs is empty") } + return nil } +// Check func (x *GetAllConversationsReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("OwnerUserID is empty") } + return nil } +// Check func (x *BatchSetConversationsReq) Check() error { if x.OwnerUserID == "" { return errs.ErrArgs.Wrap("OwnerUserID is empty") @@ -123,9 +144,11 @@ func (x *BatchSetConversationsReq) Check() error { if x.NotificationType < 1 || x.NotificationType > 3 { return errs.ErrArgs.Wrap("NotificationType is invalid") } + return nil } +// Check func (x *GetPaginationUsersReq) Check() error { if x.Pagination == nil { return errs.ErrArgs.Wrap("pagination is empty") @@ -133,23 +156,29 @@ func (x *GetPaginationUsersReq) Check() error { if x.Pagination.PageNumber < 1 { return errs.ErrArgs.Wrap("pageNumber is invalid") } + return nil } +// Check func (x *UserRegisterReq) Check() error { if x.Users == nil { return errs.ErrArgs.Wrap("Users is empty") } + return nil } +// Check func (x *GetGlobalRecvMessageOptReq) Check() error { if x.UserID == "" { return errs.ErrArgs.Wrap("UserID is empty") } + return nil } +// Check func (x *UserRegisterCountReq) Check() error { if x.Start <= 0 { return errs.ErrArgs.Wrap("start is invalid") @@ -157,5 +186,6 @@ func (x *UserRegisterCountReq) Check() error { if x.End <= 0 { return errs.ErrArgs.Wrap("end is invalid") } + return nil } diff --git a/pkg/rpcclient/auth.go b/pkg/rpcclient/auth.go index aa13ed898..abde73548 100644 --- a/pkg/rpcclient/auth.go +++ b/pkg/rpcclient/auth.go @@ -24,15 +24,18 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/auth" ) +// NewAuth func NewAuth(discov discoveryregistry.SvcDiscoveryRegistry) *Auth { conn, err := discov.GetConn(context.Background(), config.Config.RpcRegisterName.OpenImAuthName) if err != nil { panic(err) } client := auth.NewAuthClient(conn) + return &Auth{discov: discov, conn: conn, Client: client} } +// Auth type Auth struct { conn grpc.ClientConnInterface Client auth.AuthClient diff --git a/pkg/rpcclient/conversation.go b/pkg/rpcclient/conversation.go index 71867620d..30fb1c8c7 100644 --- a/pkg/rpcclient/conversation.go +++ b/pkg/rpcclient/conversation.go @@ -26,27 +26,33 @@ import ( pbConversation "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/conversation" ) +// Conversation type Conversation struct { Client pbConversation.ConversationClient conn grpc.ClientConnInterface discov discoveryregistry.SvcDiscoveryRegistry } +// NewConversation func NewConversation(discov discoveryregistry.SvcDiscoveryRegistry) *Conversation { conn, err := discov.GetConn(context.Background(), config.Config.RpcRegisterName.OpenImConversationName) if err != nil { panic(err) } client := pbConversation.NewConversationClient(conn) + return &Conversation{discov: discov, conn: conn, Client: client} } +// ConversationRpcClient type ConversationRpcClient Conversation +// NewConversationRpcClient func NewConversationRpcClient(discov discoveryregistry.SvcDiscoveryRegistry) ConversationRpcClient { return ConversationRpcClient(*NewConversation(discov)) } +// GetSingleConversationRecvMsgOpt func (c *ConversationRpcClient) GetSingleConversationRecvMsgOpt(ctx context.Context, userID, conversationID string) (int32, error) { var req pbConversation.GetConversationReq req.OwnerUserID = userID @@ -55,45 +61,59 @@ func (c *ConversationRpcClient) GetSingleConversationRecvMsgOpt(ctx context.Cont if err != nil { return 0, err } + return conversation.GetConversation().RecvMsgOpt, err } +// SingleChatFirstCreateConversation func (c *ConversationRpcClient) SingleChatFirstCreateConversation(ctx context.Context, recvID, sendID string) error { _, err := c.Client.CreateSingleChatConversations(ctx, &pbConversation.CreateSingleChatConversationsReq{RecvID: recvID, SendID: sendID}) + return err } +// GroupChatFirstCreateConversation func (c *ConversationRpcClient) GroupChatFirstCreateConversation(ctx context.Context, groupID string, userIDs []string) error { _, err := c.Client.CreateGroupChatConversations(ctx, &pbConversation.CreateGroupChatConversationsReq{UserIDs: userIDs, GroupID: groupID}) + return err } +// SetConversationMaxSeq func (c *ConversationRpcClient) SetConversationMaxSeq(ctx context.Context, ownerUserIDs []string, conversationID string, maxSeq int64) error { _, err := c.Client.SetConversationMaxSeq(ctx, &pbConversation.SetConversationMaxSeqReq{OwnerUserID: ownerUserIDs, ConversationID: conversationID, MaxSeq: maxSeq}) + return err } +// SetConversations func (c *ConversationRpcClient) SetConversations(ctx context.Context, userIDs []string, conversation *pbConversation.ConversationReq) error { _, err := c.Client.SetConversations(ctx, &pbConversation.SetConversationsReq{UserIDs: userIDs, Conversation: conversation}) + return err } +// GetConversationIDs func (c *ConversationRpcClient) GetConversationIDs(ctx context.Context, ownerUserID string) ([]string, error) { resp, err := c.Client.GetConversationIDs(ctx, &pbConversation.GetConversationIDsReq{UserID: ownerUserID}) if err != nil { return nil, err } + return resp.ConversationIDs, nil } +// GetConversation func (c *ConversationRpcClient) GetConversation(ctx context.Context, ownerUserID, conversationID string) (*pbConversation.Conversation, error) { resp, err := c.Client.GetConversation(ctx, &pbConversation.GetConversationReq{OwnerUserID: ownerUserID, ConversationID: conversationID}) if err != nil { return nil, err } + return resp.Conversation, nil } +// GetConversationsByConversationID func (c *ConversationRpcClient) GetConversationsByConversationID(ctx context.Context, conversationIDs []string) ([]*pbConversation.Conversation, error) { if len(conversationIDs) == 0 { return nil, nil @@ -105,9 +125,11 @@ func (c *ConversationRpcClient) GetConversationsByConversationID(ctx context.Con if len(resp.Conversations) == 0 { return nil, errs.ErrRecordNotFound.Wrap(fmt.Sprintf("conversationIDs: %v not found", conversationIDs)) } + return resp.Conversations, nil } +// GetConversations func (c *ConversationRpcClient) GetConversations( ctx context.Context, ownerUserID string, @@ -123,5 +145,6 @@ func (c *ConversationRpcClient) GetConversations( if err != nil { return nil, err } + return resp.Conversations, nil } diff --git a/pkg/rpcclient/friend.go b/pkg/rpcclient/friend.go index 5a8ac0633..edb75cc21 100644 --- a/pkg/rpcclient/friend.go +++ b/pkg/rpcclient/friend.go @@ -25,27 +25,33 @@ import ( sdkws "github.com/OpenIMSDK/Open-IM-Server/pkg/proto/sdkws" ) +// Friend type Friend struct { conn grpc.ClientConnInterface Client friend.FriendClient discov discoveryregistry.SvcDiscoveryRegistry } +// NewFriend func NewFriend(discov discoveryregistry.SvcDiscoveryRegistry) *Friend { conn, err := discov.GetConn(context.Background(), config.Config.RpcRegisterName.OpenImFriendName) if err != nil { panic(err) } client := friend.NewFriendClient(conn) + return &Friend{discov: discov, conn: conn, Client: client} } +// FriendRpcClient type FriendRpcClient Friend +// NewFriendRpcClient func NewFriendRpcClient(discov discoveryregistry.SvcDiscoveryRegistry) FriendRpcClient { return FriendRpcClient(*NewFriend(discov)) } +// GetFriendsInfo func (f *FriendRpcClient) GetFriendsInfo( ctx context.Context, ownerUserID, friendUserID string, @@ -58,31 +64,37 @@ func (f *FriendRpcClient) GetFriendsInfo( return nil, err } resp = r.FriendsInfo[0] + return } -// possibleFriendUserID是否在userID的好友中. +// IsFriend possibleFriendUserID是否在userID的好友中. func (f *FriendRpcClient) IsFriend(ctx context.Context, possibleFriendUserID, userID string) (bool, error) { resp, err := f.Client.IsFriend(ctx, &friend.IsFriendReq{UserID1: userID, UserID2: possibleFriendUserID}) if err != nil { return false, err } + return resp.InUser1Friends, nil } +// GetFriendIDs func (f *FriendRpcClient) GetFriendIDs(ctx context.Context, ownerUserID string) (friendIDs []string, err error) { req := friend.GetFriendIDsReq{UserID: ownerUserID} resp, err := f.Client.GetFriendIDs(ctx, &req) if err != nil { return nil, err } + return resp.FriendIDs, nil } +// IsBlocked func (b *FriendRpcClient) IsBlocked(ctx context.Context, possibleBlackUserID, userID string) (bool, error) { r, err := b.Client.IsBlack(ctx, &friend.IsBlackReq{UserID1: possibleBlackUserID, UserID2: userID}) if err != nil { return false, err } + return r.InUser2Blacks, nil } diff --git a/pkg/rpcclient/group.go b/pkg/rpcclient/group.go index 06333234f..65ef0ab0f 100644 --- a/pkg/rpcclient/group.go +++ b/pkg/rpcclient/group.go @@ -29,27 +29,33 @@ import ( "github.com/OpenIMSDK/Open-IM-Server/pkg/utils" ) +// Group type Group struct { conn grpc.ClientConnInterface Client group.GroupClient discov discoveryregistry.SvcDiscoveryRegistry } +// NewGroup func NewGroup(discov discoveryregistry.SvcDiscoveryRegistry) *Group { conn, err := discov.GetConn(context.Background(), config.Config.RpcRegisterName.OpenImGroupName) if err != nil { panic(err) } client := group.NewGroupClient(conn) + return &Group{discov: discov, conn: conn, Client: client} } +// GroupRpcClient type GroupRpcClient Group +// NewGroupRpcClient func NewGroupRpcClient(discov discoveryregistry.SvcDiscoveryRegistry) GroupRpcClient { return GroupRpcClient(*NewGroup(discov)) } +// GetGroupInfos func (g *GroupRpcClient) GetGroupInfos( ctx context.Context, groupIDs []string, @@ -71,14 +77,17 @@ func (g *GroupRpcClient) GetGroupInfos( return resp.GroupInfos, nil } +// GetGroupInfo func (g *GroupRpcClient) GetGroupInfo(ctx context.Context, groupID string) (*sdkws.GroupInfo, error) { groups, err := g.GetGroupInfos(ctx, []string{groupID}, true) if err != nil { return nil, err } + return groups[0], nil } +// GetGroupInfoMap func (g *GroupRpcClient) GetGroupInfoMap( ctx context.Context, groupIDs []string, @@ -88,11 +97,13 @@ func (g *GroupRpcClient) GetGroupInfoMap( if err != nil { return nil, err } + return utils.SliceToMap(groups, func(e *sdkws.GroupInfo) string { return e.GroupID }), nil } +// GetGroupMemberInfos func (g *GroupRpcClient) GetGroupMemberInfos( ctx context.Context, groupID string, @@ -113,9 +124,11 @@ func (g *GroupRpcClient) GetGroupMemberInfos( return nil, errs.ErrNotInGroupYet.Wrap(strings.Join(ids, ",")) } } + return resp.Members, nil } +// GetGroupMemberInfo func (g *GroupRpcClient) GetGroupMemberInfo( ctx context.Context, groupID string, @@ -125,9 +138,11 @@ func (g *GroupRpcClient) GetGroupMemberInfo( if err != nil { return nil, err } + return members[0], nil } +// GetGroupMemberInfoMap func (g *GroupRpcClient) GetGroupMemberInfoMap( ctx context.Context, groupID string, @@ -138,11 +153,13 @@ func (g *GroupRpcClient) GetGroupMemberInfoMap( if err != nil { return nil, err } + return utils.SliceToMap(members, func(e *sdkws.GroupMemberFullInfo) string { return e.UserID }), nil } +// GetOwnerAndAdminInfos func (g *GroupRpcClient) GetOwnerAndAdminInfos( ctx context.Context, groupID string, @@ -154,17 +171,21 @@ func (g *GroupRpcClient) GetOwnerAndAdminInfos( if err != nil { return nil, err } + return resp.Members, nil } +// GetOwnerInfo func (g *GroupRpcClient) GetOwnerInfo(ctx context.Context, groupID string) (*sdkws.GroupMemberFullInfo, error) { resp, err := g.Client.GetGroupMemberRoleLevel(ctx, &group.GetGroupMemberRoleLevelReq{ GroupID: groupID, RoleLevels: []int32{constant.GroupOwner}, }) + return resp.Members[0], err } +// GetGroupMemberIDs func (g *GroupRpcClient) GetGroupMemberIDs(ctx context.Context, groupID string) ([]string, error) { resp, err := g.Client.GetGroupMemberUserIDs(ctx, &group.GetGroupMemberUserIDsReq{ GroupID: groupID, @@ -172,9 +193,11 @@ func (g *GroupRpcClient) GetGroupMemberIDs(ctx context.Context, groupID string) if err != nil { return nil, err } + return resp.UserIDs, nil } +// GetGroupInfoCache func (g *GroupRpcClient) GetGroupInfoCache(ctx context.Context, groupID string) (*sdkws.GroupInfo, error) { resp, err := g.Client.GetGroupInfoCache(ctx, &group.GetGroupInfoCacheReq{ GroupID: groupID, @@ -182,9 +205,11 @@ func (g *GroupRpcClient) GetGroupInfoCache(ctx context.Context, groupID string) if err != nil { return nil, err } + return resp.GroupInfo, nil } +// GetGroupMemberCache func (g *GroupRpcClient) GetGroupMemberCache( ctx context.Context, groupID string, @@ -197,13 +222,16 @@ func (g *GroupRpcClient) GetGroupMemberCache( if err != nil { return nil, err } + return resp.Member, nil } +// DismissGroup func (g *GroupRpcClient) DismissGroup(ctx context.Context, groupID string) error { _, err := g.Client.DismissGroup(ctx, &group.DismissGroupReq{ GroupID: groupID, DeleteMember: true, }) + return err } diff --git a/pkg/rpcclient/msg.go b/pkg/rpcclient/msg.go index be776138b..5555aba23 100644 --- a/pkg/rpcclient/msg.go +++ b/pkg/rpcclient/msg.go @@ -121,29 +121,36 @@ func newSessionTypeConf() map[int32]int32 { } } +// Message type Message struct { conn grpc.ClientConnInterface Client msg.MsgClient discov discoveryregistry.SvcDiscoveryRegistry } +// NewMessage func NewMessage(discov discoveryregistry.SvcDiscoveryRegistry) *Message { conn, err := discov.GetConn(context.Background(), config.Config.RpcRegisterName.OpenImMsgName) if err != nil { panic(err) } client := msg.NewMsgClient(conn) + return &Message{discov: discov, conn: conn, Client: client} } +// MessageRpcClient type MessageRpcClient Message +// NewMessageRpcClient func NewMessageRpcClient(discov discoveryregistry.SvcDiscoveryRegistry) MessageRpcClient { return MessageRpcClient(*NewMessage(discov)) } +// SendMsg func (m *MessageRpcClient) SendMsg(ctx context.Context, req *msg.SendMsgReq) (*msg.SendMsgResp, error) { resp, err := m.Client.SendMsg(ctx, req) + return resp, err } diff --git a/pkg/rpcclient/notification/group.go b/pkg/rpcclient/notification/group.go index abdc4d76e..5b8d87226 100644 --- a/pkg/rpcclient/notification/group.go +++ b/pkg/rpcclient/notification/group.go @@ -597,6 +597,7 @@ func (g *GroupNotificationSender) GroupMemberSetToOrdinaryUserNotification(ctx c if err := g.fillOpUser(ctx, &tips.OpUser, tips.Group.GroupID); err != nil { return err } + return g.Notification(ctx, mcontext.GetOpUserID(ctx), group.GroupID, constant.GroupMemberSetToOrdinaryUserNotification, tips) } diff --git a/pkg/statistics/statistics.go b/pkg/statistics/statistics.go index 8c1828380..223e2c322 100644 --- a/pkg/statistics/statistics.go +++ b/pkg/statistics/statistics.go @@ -35,12 +35,10 @@ func (s *Statistics) output() { defer t.Stop() var sum uint64 var timeIntervalNum uint64 - outputCh := make(chan struct{}) for { sum = *s.AllCount select { case <-t.C: - outputCh <- struct{}{} } if *s.AllCount-sum <= 0 { intervalCount = 0