mirror of
https://github.com/openimsdk/open-im-server.git
synced 2025-04-25 02:58:26 +08:00
Merge branch 'errcode' of github.com:OpenIMSDK/Open-IM-Server into errcode
Conflicts: cmd/rpc/auth/main.go cmd/rpc/friend/main.go cmd/rpc/group/main.go cmd/rpc/msg/main.go cmd/rpc/user/main.go internal/rpc/auth/auth.go internal/rpc/conversation/conversaion.go internal/rpc/friend/friend.go internal/rpc/group/callback.go internal/rpc/group/group.go internal/rpc/msg/pull_message.go internal/rpc/msg/query_msg.go internal/rpc/msg/rpc_chat.go internal/rpc/msg/send_msg.go internal/rpc/user/user.go pkg/common/db/cache/redis.go pkg/common/db/controller/msg.go pkg/common/http/http_client.go
This commit is contained in:
commit
1b3eaed0e5
@ -1,7 +1,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/internal/msg_gateway/gate"
|
"Open_IM/internal/msggateway"
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/log"
|
"Open_IM/pkg/common/log"
|
||||||
@ -22,7 +22,7 @@ func main() {
|
|||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
fmt.Println("start rpc/msg_gateway server, port: ", *rpcPort, *wsPort, *prometheusPort, ", OpenIM version: ", constant.CurrentVersion, "\n")
|
fmt.Println("start rpc/msg_gateway server, port: ", *rpcPort, *wsPort, *prometheusPort, ", OpenIM version: ", constant.CurrentVersion, "\n")
|
||||||
gate.Init(*rpcPort, *wsPort)
|
msggateway.Init(*rpcPort, *wsPort)
|
||||||
gate.Run(*prometheusPort)
|
msggateway.Run(*prometheusPort)
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
}
|
}
|
||||||
|
@ -1,26 +1,11 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
rpcAuth "Open_IM/internal/rpc/auth"
|
"Open_IM/internal/rpc/auth"
|
||||||
|
"Open_IM/internal/startrpc"
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
|
||||||
"Open_IM/pkg/common/prome"
|
|
||||||
"flag"
|
|
||||||
"fmt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
defaultPorts := config.Config.RpcPort.OpenImAuthPort
|
startrpc.Start(config.Config.RpcPort.OpenImAuthPort, config.Config.RpcRegisterName.OpenImAuthName, config.Config.Prometheus.AuthPrometheusPort, auth.Start)
|
||||||
rpcPort := flag.Int("port", defaultPorts[0], "RpcToken default listen port 10800")
|
|
||||||
prometheusPort := flag.Int("prometheus_port", config.Config.Prometheus.AuthPrometheusPort[0], "authPrometheusPort default listen port")
|
|
||||||
flag.Parse()
|
|
||||||
fmt.Println("start auth rpc server, port: ", *rpcPort, ", OpenIM version: ", constant.CurrentVersion, "\n")
|
|
||||||
rpcServer := rpcAuth.NewRpcAuthServer(*rpcPort)
|
|
||||||
go func() {
|
|
||||||
err := prome.StartPromeSrv(*prometheusPort)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
rpcServer.Run()
|
|
||||||
}
|
}
|
||||||
|
@ -2,25 +2,10 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/internal/rpc/friend"
|
"Open_IM/internal/rpc/friend"
|
||||||
|
"Open_IM/internal/startrpc"
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
|
||||||
prome "Open_IM/pkg/common/prometheus"
|
|
||||||
"flag"
|
|
||||||
"fmt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
defaultPorts := config.Config.RpcPort.OpenImFriendPort
|
startrpc.Start(config.Config.RpcPort.OpenImFriendPort[0], config.Config.RpcRegisterName.OpenImFriendName, config.Config.Prometheus.FriendPrometheusPort[0], friend.Start)
|
||||||
rpcPort := flag.Int("port", defaultPorts[0], "get RpcFriendPort from cmd,default 12000 as port")
|
|
||||||
prometheusPort := flag.Int("prometheus_port", config.Config.Prometheus.FriendPrometheusPort[0], "friendPrometheusPort default listen port")
|
|
||||||
flag.Parse()
|
|
||||||
fmt.Println("start friend rpc server, port: ", *rpcPort, ", OpenIM version: ", constant.CurrentVersion, "\n")
|
|
||||||
rpcServer := friend.NewFriendServer(*rpcPort)
|
|
||||||
go func() {
|
|
||||||
err := prome.StartPromeSrv(*prometheusPort)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
rpcServer.Run()
|
|
||||||
}
|
}
|
||||||
|
@ -2,25 +2,10 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/internal/rpc/group"
|
"Open_IM/internal/rpc/group"
|
||||||
|
"Open_IM/internal/startrpc"
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
|
||||||
prome "Open_IM/pkg/common/prometheus"
|
|
||||||
"flag"
|
|
||||||
"fmt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
defaultPorts := config.Config.RpcPort.OpenImGroupPort
|
startrpc.Start(config.Config.RpcPort.OpenImGroupPort, config.Config.RpcRegisterName.OpenImGroupName, config.Config.Prometheus.GroupPrometheusPort, group.Start)
|
||||||
rpcPort := flag.Int("port", defaultPorts[0], "get RpcGroupPort from cmd,default 16000 as port")
|
|
||||||
prometheusPort := flag.Int("prometheus_port", config.Config.Prometheus.GroupPrometheusPort[0], "groupPrometheusPort default listen port")
|
|
||||||
flag.Parse()
|
|
||||||
fmt.Println("start group rpc server, port: ", *rpcPort, ", OpenIM version: ", constant.CurrentVersion, "\n")
|
|
||||||
rpcServer := group.NewGroupServer(*rpcPort)
|
|
||||||
go func() {
|
|
||||||
err := prome.StartPromeSrv(*prometheusPort)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
rpcServer.Run()
|
|
||||||
}
|
}
|
||||||
|
@ -2,25 +2,10 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/internal/rpc/msg"
|
"Open_IM/internal/rpc/msg"
|
||||||
|
"Open_IM/internal/startrpc"
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
|
||||||
prome "Open_IM/pkg/common/prometheus"
|
|
||||||
"flag"
|
|
||||||
"fmt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
defaultPorts := config.Config.RpcPort.OpenImMessagePort
|
startrpc.Start(config.Config.RpcPort.OpenImMessagePort, config.Config.RpcRegisterName.OpenImMsgName, config.Config.Prometheus.AuthPrometheusPort, msg.Start)
|
||||||
rpcPort := flag.Int("port", defaultPorts[0], "rpc listening port")
|
|
||||||
prometheusPort := flag.Int("prometheus_port", config.Config.Prometheus.MessagePrometheusPort[0], "msgPrometheusPort default listen port")
|
|
||||||
flag.Parse()
|
|
||||||
fmt.Println("start msg rpc server, port: ", *rpcPort, ", OpenIM version: ", constant.CurrentVersion, "\n")
|
|
||||||
rpcServer := msg.NewRpcChatServer(*rpcPort)
|
|
||||||
go func() {
|
|
||||||
err := prome.StartPromeSrv(*prometheusPort)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
rpcServer.Run()
|
|
||||||
}
|
}
|
||||||
|
@ -2,25 +2,12 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/internal/rpc/user"
|
"Open_IM/internal/rpc/user"
|
||||||
|
"Open_IM/internal/startrpc"
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
|
||||||
prome "Open_IM/pkg/common/prometheus"
|
|
||||||
"flag"
|
|
||||||
"fmt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
defaultPorts := config.Config.RpcPort.OpenImUserPort
|
|
||||||
rpcPort := flag.Int("port", defaultPorts[0], "rpc listening port")
|
startrpc.Start(config.Config.RpcPort.OpenImUserPort[0], config.Config.RpcRegisterName.OpenImUserName, config.Config.Prometheus.UserPrometheusPort[0], user.Start)
|
||||||
prometheusPort := flag.Int("prometheus_port", config.Config.Prometheus.UserPrometheusPort[0], "userPrometheusPort default listen port")
|
|
||||||
flag.Parse()
|
|
||||||
fmt.Println("start user rpc server, port: ", *rpcPort, ", OpenIM version: ", constant.CurrentVersion, "\n")
|
|
||||||
rpcServer := user.NewUserServer(*rpcPort)
|
|
||||||
go func() {
|
|
||||||
err := prome.StartPromeSrv(*prometheusPort)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
rpcServer.Run()
|
|
||||||
}
|
}
|
||||||
|
93
go.mod
93
go.mod
@ -1,6 +1,6 @@
|
|||||||
module Open_IM
|
module Open_IM
|
||||||
|
|
||||||
go 1.16
|
go 1.18
|
||||||
|
|
||||||
require (
|
require (
|
||||||
firebase.google.com/go v3.13.0+incompatible
|
firebase.google.com/go v3.13.0+incompatible
|
||||||
@ -41,7 +41,7 @@ require (
|
|||||||
github.com/stretchr/testify v1.8.1
|
github.com/stretchr/testify v1.8.1
|
||||||
github.com/swaggo/files v0.0.0-20220610200504-28940afbdbfe
|
github.com/swaggo/files v0.0.0-20220610200504-28940afbdbfe
|
||||||
github.com/swaggo/gin-swagger v1.5.0
|
github.com/swaggo/gin-swagger v1.5.0
|
||||||
github.com/swaggo/swag v1.8.3
|
github.com/swaggo/swag v1.8.3 // indirect
|
||||||
github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20210325043845-84a0811633ca
|
github.com/tencentyun/qcloud-cos-sts-sdk v0.0.0-20210325043845-84a0811633ca
|
||||||
go.etcd.io/etcd/client/v3 v3.5.6 // indirect
|
go.etcd.io/etcd/client/v3 v3.5.6 // indirect
|
||||||
go.mongodb.org/mongo-driver v1.8.3
|
go.mongodb.org/mongo-driver v1.8.3
|
||||||
@ -58,19 +58,108 @@ require (
|
|||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
cloud.google.com/go v0.105.0 // indirect
|
||||||
|
cloud.google.com/go/compute v1.13.0 // indirect
|
||||||
|
cloud.google.com/go/compute/metadata v0.2.1 // indirect
|
||||||
|
cloud.google.com/go/firestore v1.9.0 // indirect
|
||||||
|
cloud.google.com/go/iam v0.8.0 // indirect
|
||||||
|
cloud.google.com/go/longrunning v0.3.0 // indirect
|
||||||
|
cloud.google.com/go/storage v1.27.0 // indirect
|
||||||
|
github.com/KyleBanks/depth v1.2.1 // indirect
|
||||||
|
github.com/OpenIMSDK/open_log v1.0.0 // indirect
|
||||||
|
github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68 // indirect
|
||||||
|
github.com/alibabacloud-go/endpoint-util v1.1.0 // indirect
|
||||||
|
github.com/alibabacloud-go/openapi-util v0.0.9 // indirect
|
||||||
|
github.com/alibabacloud-go/tea-utils v1.3.9 // indirect
|
||||||
|
github.com/aliyun/credentials-go v1.1.2 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.12.8 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.14 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.8 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/internal/ini v1.3.15 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.9.8 // indirect
|
||||||
|
github.com/aws/aws-sdk-go-v2/service/sso v1.11.12 // indirect
|
||||||
|
github.com/aws/smithy-go v1.12.0 // indirect
|
||||||
|
github.com/beorn7/perks v1.0.1 // indirect
|
||||||
|
github.com/cespare/xxhash/v2 v2.1.2 // indirect
|
||||||
|
github.com/coreos/go-semver v0.3.0 // indirect
|
||||||
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
|
github.com/coreos/go-systemd/v22 v22.5.0 // indirect
|
||||||
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
||||||
|
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
|
||||||
|
github.com/dustin/go-humanize v1.0.0 // indirect
|
||||||
|
github.com/eapache/go-resiliency v1.2.0 // indirect
|
||||||
|
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect
|
||||||
|
github.com/eapache/queue v1.1.0 // indirect
|
||||||
|
github.com/gin-contrib/sse v0.1.0 // indirect
|
||||||
|
github.com/go-openapi/jsonpointer v0.19.5 // indirect
|
||||||
|
github.com/go-openapi/jsonreference v0.20.0 // indirect
|
||||||
github.com/go-openapi/spec v0.20.6 // indirect
|
github.com/go-openapi/spec v0.20.6 // indirect
|
||||||
github.com/go-openapi/swag v0.21.1 // indirect
|
github.com/go-openapi/swag v0.21.1 // indirect
|
||||||
github.com/go-playground/locales v0.14.1 // indirect
|
github.com/go-playground/locales v0.14.1 // indirect
|
||||||
|
github.com/go-playground/universal-translator v0.18.0 // indirect
|
||||||
|
github.com/go-sql-driver/mysql v1.6.0 // indirect
|
||||||
|
github.com/go-stack/stack v1.8.0 // indirect
|
||||||
|
github.com/go-zookeeper/zk v1.0.3 // indirect
|
||||||
github.com/goccy/go-json v0.10.0 // indirect
|
github.com/goccy/go-json v0.10.0 // indirect
|
||||||
|
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
|
||||||
|
github.com/golang/snappy v0.0.3 // indirect
|
||||||
|
github.com/google/go-cmp v0.5.9 // indirect
|
||||||
|
github.com/google/uuid v1.3.0 // indirect
|
||||||
|
github.com/googleapis/enterprise-certificate-proxy v0.2.0 // indirect
|
||||||
|
github.com/googleapis/gax-go/v2 v2.7.0 // indirect
|
||||||
|
github.com/hashicorp/go-uuid v1.0.2 // indirect
|
||||||
|
github.com/jcmturner/aescts/v2 v2.0.0 // indirect
|
||||||
|
github.com/jcmturner/dnsutils/v2 v2.0.0 // indirect
|
||||||
|
github.com/jcmturner/gofork v1.0.0 // indirect
|
||||||
|
github.com/jcmturner/gokrb5/v8 v8.4.2 // indirect
|
||||||
|
github.com/jcmturner/rpc/v2 v2.0.3 // indirect
|
||||||
|
github.com/jinzhu/inflection v1.0.0 // indirect
|
||||||
|
github.com/jinzhu/now v1.1.5 // indirect
|
||||||
|
github.com/josharian/intern v1.0.0 // indirect
|
||||||
|
github.com/json-iterator/go v1.1.12 // indirect
|
||||||
|
github.com/klauspost/compress v1.13.6 // indirect
|
||||||
|
github.com/klauspost/cpuid v1.3.1 // indirect
|
||||||
|
github.com/leodido/go-urn v1.2.1 // indirect
|
||||||
|
github.com/lestrrat-go/strftime v1.0.6 // indirect
|
||||||
|
github.com/lithammer/shortuuid v3.0.0+incompatible // indirect
|
||||||
|
github.com/mailru/easyjson v0.7.7 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.17 // indirect
|
github.com/mattn/go-isatty v0.0.17 // indirect
|
||||||
|
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
|
||||||
|
github.com/minio/md5-simd v1.1.0 // indirect
|
||||||
|
github.com/minio/sha256-simd v0.1.1 // indirect
|
||||||
|
github.com/mitchellh/go-homedir v1.1.0 // indirect
|
||||||
|
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
|
||||||
|
github.com/modern-go/reflect2 v1.0.2 // indirect
|
||||||
|
github.com/pelletier/go-toml/v2 v2.0.6 // indirect
|
||||||
|
github.com/pierrec/lz4 v2.6.0+incompatible // indirect
|
||||||
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
||||||
|
github.com/prometheus/client_model v0.2.0 // indirect
|
||||||
|
github.com/prometheus/common v0.37.0 // indirect
|
||||||
|
github.com/prometheus/procfs v0.8.0 // indirect
|
||||||
|
github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect
|
||||||
|
github.com/rs/xid v1.2.1 // indirect
|
||||||
|
github.com/tjfoc/gmsm v1.3.2 // indirect
|
||||||
github.com/ugorji/go/codec v1.2.8 // indirect
|
github.com/ugorji/go/codec v1.2.8 // indirect
|
||||||
|
github.com/xdg-go/pbkdf2 v1.0.0 // indirect
|
||||||
|
github.com/xdg-go/scram v1.0.2 // indirect
|
||||||
|
github.com/xdg-go/stringprep v1.0.2 // indirect
|
||||||
|
github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d // indirect
|
||||||
|
go.etcd.io/etcd/api/v3 v3.5.6 // indirect
|
||||||
|
go.etcd.io/etcd/client/pkg/v3 v3.5.6 // indirect
|
||||||
|
go.opencensus.io v0.24.0 // indirect
|
||||||
go.uber.org/atomic v1.10.0 // indirect
|
go.uber.org/atomic v1.10.0 // indirect
|
||||||
go.uber.org/multierr v1.9.0 // indirect
|
go.uber.org/multierr v1.9.0 // indirect
|
||||||
go.uber.org/zap v1.24.0 // indirect
|
go.uber.org/zap v1.24.0 // indirect
|
||||||
golang.org/x/crypto v0.5.0 // indirect
|
golang.org/x/crypto v0.5.0 // indirect
|
||||||
|
golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 // indirect
|
||||||
|
golang.org/x/sync v0.1.0 // indirect
|
||||||
|
golang.org/x/sys v0.4.0 // indirect
|
||||||
|
golang.org/x/text v0.6.0 // indirect
|
||||||
|
golang.org/x/time v0.1.0 // indirect
|
||||||
|
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
|
||||||
|
google.golang.org/appengine v1.6.7 // indirect
|
||||||
google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect
|
google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f // indirect
|
||||||
gopkg.in/ini.v1 v1.66.2 // indirect
|
gopkg.in/ini.v1 v1.66.2 // indirect
|
||||||
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
||||||
replace github.com/Shopify/sarama => github.com/Shopify/sarama v1.29.0
|
replace github.com/Shopify/sarama => github.com/Shopify/sarama v1.29.0
|
||||||
|
77
go.sum
77
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.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4=
|
||||||
cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc=
|
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.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.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.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc=
|
||||||
cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU=
|
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/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.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw=
|
||||||
cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY=
|
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.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/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4=
|
||||||
cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk=
|
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.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.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.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.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.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s=
|
||||||
cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI=
|
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/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.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.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.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.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ=
|
||||||
cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g=
|
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/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.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk=
|
||||||
cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w=
|
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.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/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8=
|
||||||
cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc=
|
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/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.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/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.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.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc=
|
||||||
cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc=
|
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/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.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/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.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg=
|
||||||
cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0=
|
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=
|
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/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.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/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.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 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs=
|
||||||
cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc=
|
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.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE=
|
||||||
cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM=
|
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.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4=
|
||||||
cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w=
|
cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w=
|
||||||
cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE=
|
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.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.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.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 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.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o=
|
||||||
cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk=
|
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/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.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4=
|
||||||
cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw=
|
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.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.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ=
|
||||||
cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0=
|
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/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.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE=
|
||||||
cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g=
|
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.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w=
|
||||||
cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8=
|
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=
|
cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE=
|
||||||
@ -397,7 +383,6 @@ github.com/OpenIMSDK/openKeeper v0.9.7 h1:oWPAsXAHpMpZh8NPB9B8FktVfxk1Ec8tQPdxhz
|
|||||||
github.com/OpenIMSDK/openKeeper v0.9.7/go.mod h1:RvyRXEcvWbonkmHLtT8KxGSCNlXY7OfDohhu53E6INU=
|
github.com/OpenIMSDK/openKeeper v0.9.7/go.mod h1:RvyRXEcvWbonkmHLtT8KxGSCNlXY7OfDohhu53E6INU=
|
||||||
github.com/OpenIMSDK/open_log v1.0.0 h1:ZQ908aWgPqfHOfkQ/oFSV20AZdRwPw+sZjC/sAPd5cA=
|
github.com/OpenIMSDK/open_log v1.0.0 h1:ZQ908aWgPqfHOfkQ/oFSV20AZdRwPw+sZjC/sAPd5cA=
|
||||||
github.com/OpenIMSDK/open_log v1.0.0/go.mod h1:qWvqF4iT2qBAP1eGGbinc0aAng1Y25X8A9Si1WS3oB4=
|
github.com/OpenIMSDK/open_log v1.0.0/go.mod h1:qWvqF4iT2qBAP1eGGbinc0aAng1Y25X8A9Si1WS3oB4=
|
||||||
github.com/OpenIMSDK/open_utils v1.0.1/go.mod h1:PPRayByXnfu8PR5Xv9wzUMBrm1BV3y7s29GGg8ae47s=
|
|
||||||
github.com/OpenIMSDK/open_utils v1.0.8 h1:IopxWgJwEF5ZAPsRuiZZOfcxNOQOCt/p8VDENcHN9r4=
|
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/OpenIMSDK/open_utils v1.0.8/go.mod h1:FLoaQblWUVKQgqt2LrNzfSZLT6D3DICBn1kcOMDLUOI=
|
||||||
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||||
@ -464,7 +449,6 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.16.9/go.mod h1:O1IvkYxr+39hRf960Us6j
|
|||||||
github.com/aws/smithy-go v1.12.0 h1:gXpeZel/jPoWQ7OEmLIgCUnhkFftqNfwWUwAHSlp1v0=
|
github.com/aws/smithy-go v1.12.0 h1:gXpeZel/jPoWQ7OEmLIgCUnhkFftqNfwWUwAHSlp1v0=
|
||||||
github.com/aws/smithy-go v1.12.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
|
github.com/aws/smithy-go v1.12.0/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
|
||||||
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
|
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
|
||||||
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
|
||||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||||
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
|
||||||
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
|
||||||
@ -472,8 +456,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 h1:xm67bEhkKh6ij1790JB83OujPR5CzNe8QuQqAgISZN0=
|
||||||
github.com/bwmarrin/snowflake v0.3.0/go.mod h1:NdZxfVWX+oR6y2K0o6qAYv6gIOP9rjG0/E9WsDpxqwE=
|
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.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 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.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||||
github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
|
github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE=
|
||||||
@ -529,9 +511,7 @@ github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8
|
|||||||
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
|
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 h1:8sXhOn0uLys67V8EsXLc6eszDs8VXWxL3iRvebPhedY=
|
||||||
github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
|
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 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/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||||
github.com/gin-contrib/gzip v0.0.5 h1:mhnVU32YnnBh2LPH2iqRqsA/eR7SAqRaD388jL2s/j0=
|
github.com/gin-contrib/gzip v0.0.5 h1:mhnVU32YnnBh2LPH2iqRqsA/eR7SAqRaD388jL2s/j0=
|
||||||
github.com/gin-contrib/gzip v0.0.5/go.mod h1:OPIK6HR0Um2vNmBUTlayD7qle4yVVRZT0PyhdUigrKk=
|
github.com/gin-contrib/gzip v0.0.5/go.mod h1:OPIK6HR0Um2vNmBUTlayD7qle4yVVRZT0PyhdUigrKk=
|
||||||
@ -539,7 +519,6 @@ 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-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI=
|
||||||
github.com/gin-gonic/gin v1.7.4/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY=
|
github.com/gin-gonic/gin v1.7.4/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY=
|
||||||
github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U=
|
github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U=
|
||||||
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 h1:UzKToD9/PoFj/V4rvlKqTRKnQYyz8Sc1MJlv4JHPtvY=
|
||||||
github.com/gin-gonic/gin v1.8.2/go.mod h1:qw5AYuDrzRTnhvusDsrov+fDIxp9Dleuu12h8nfB398=
|
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=
|
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
|
||||||
@ -576,7 +555,6 @@ github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+
|
|||||||
github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho=
|
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/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA=
|
||||||
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
|
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
|
||||||
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 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ=
|
||||||
github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU=
|
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=
|
github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
|
||||||
@ -586,11 +564,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-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 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
|
||||||
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
|
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 h1:7M2kwOsc//9VeeFiPtf+uSJlVpU66x9Ba5+8XK7/TDg=
|
||||||
github.com/go-zookeeper/zk v1.0.3/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw=
|
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 h1:mXKd9Qw4NuzShiRlOXKews24ufknHO7gx30lsDyokKA=
|
||||||
github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
github.com/goccy/go-json v0.10.0/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I=
|
||||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||||
@ -670,12 +645,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-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-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-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-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-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/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/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.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 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
|
||||||
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
@ -708,7 +681,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/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.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/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-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/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
|
||||||
github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8=
|
github.com/jcmturner/aescts/v2 v2.0.0 h1:9YKLH6ey7H4eDBXW8khjYslgyqG2xZikXP0EQFKrle8=
|
||||||
@ -733,7 +705,6 @@ github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/
|
|||||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
||||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
|
github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U=
|
||||||
github.com/jonboulle/clockwork v0.3.0 h1:9BSCMi8C+0qdApAp4auwX0RkLGUjs956h0EkuQymUhg=
|
github.com/jonboulle/clockwork v0.3.0 h1:9BSCMi8C+0qdApAp4auwX0RkLGUjs956h0EkuQymUhg=
|
||||||
github.com/jonboulle/clockwork v0.3.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8=
|
|
||||||
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
|
||||||
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
|
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
|
||||||
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4=
|
||||||
@ -751,7 +722,6 @@ github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8
|
|||||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
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/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.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 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
|
||||||
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||||
github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
github.com/klauspost/cpuid v1.2.3/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||||
@ -785,8 +755,6 @@ github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJ
|
|||||||
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
|
||||||
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
|
||||||
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
|
||||||
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 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng=
|
||||||
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM=
|
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=
|
github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
|
||||||
@ -814,29 +782,17 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW
|
|||||||
github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646 h1:zYyBkD/k9seD2A7fsi6Oo2LfFZAehjjQMERAvZLEDnQ=
|
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/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8=
|
||||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||||
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 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 h1:b7tjMogDMhf2CisGI+L02LXLVa0ZyE82Z15XfW1e8t8=
|
||||||
github.com/olivere/elastic/v7 v7.0.23/go.mod h1:OuWmD2DiuYhddWegBKPWQuelVKBLrW0fa/VUYgxuGTY=
|
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 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 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/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc=
|
||||||
github.com/otiai10/copy v1.7.0/go.mod h1:rmRl6QPdJj6EiUqXQ/4Nn2lLXoNQjFCQbbNrxgc/t3U=
|
github.com/otiai10/copy v1.7.0/go.mod h1:rmRl6QPdJj6EiUqXQ/4Nn2lLXoNQjFCQbbNrxgc/t3U=
|
||||||
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
|
github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE=
|
||||||
github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs=
|
github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs=
|
||||||
github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
|
github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo=
|
||||||
github.com/otiai10/mint v1.3.3/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc=
|
github.com/otiai10/mint v1.3.3/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc=
|
||||||
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 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU=
|
||||||
github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek=
|
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=
|
github.com/pierrec/lz4 v2.6.0+incompatible h1:Ix9yFKn1nSPBLFl/yZknTp8TU5G4Ps0JDmguYK6iH1A=
|
||||||
@ -893,7 +849,6 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeV
|
|||||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
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.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||||
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
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 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
|
||||||
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
|
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 v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||||
@ -932,10 +887,7 @@ github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhV
|
|||||||
github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM=
|
github.com/tjfoc/gmsm v1.3.2 h1:7JVkAn5bvUJ7HtU08iW6UiD+UTmJTIToHCfeFzkcCxM=
|
||||||
github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w=
|
github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w=
|
||||||
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
|
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
|
||||||
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.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
|
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
|
||||||
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 h1:sgBJS6COt0b/P40VouWKdseidkDgHxYGm0SAglUHfP0=
|
||||||
github.com/ugorji/go/codec v1.2.8/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
github.com/ugorji/go/codec v1.2.8/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
|
||||||
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
github.com/urfave/cli/v2 v2.3.0/go.mod h1:LJmUH05zAU44vOAcrfzZQKsZbVcdbOG8rtL3/XcUArI=
|
||||||
@ -956,15 +908,11 @@ github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
|
|||||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||||
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||||
github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||||
github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
|
||||||
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
|
||||||
go.etcd.io/etcd/api/v3 v3.5.5/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8=
|
|
||||||
go.etcd.io/etcd/api/v3 v3.5.6 h1:Cy2qx3npLcYqTKqGJzMypnMv2tiRyifZJ17BlWIWA7A=
|
go.etcd.io/etcd/api/v3 v3.5.6 h1:Cy2qx3npLcYqTKqGJzMypnMv2tiRyifZJ17BlWIWA7A=
|
||||||
go.etcd.io/etcd/api/v3 v3.5.6/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8=
|
go.etcd.io/etcd/api/v3 v3.5.6/go.mod h1:KFtNaxGDw4Yx/BA4iPPwevUTAuqcsPxzyX8PHydchN8=
|
||||||
go.etcd.io/etcd/client/pkg/v3 v3.5.5/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ=
|
|
||||||
go.etcd.io/etcd/client/pkg/v3 v3.5.6 h1:TXQWYceBKqLp4sa87rcPs11SXxUA/mHwH975v+BDvLU=
|
go.etcd.io/etcd/client/pkg/v3 v3.5.6 h1:TXQWYceBKqLp4sa87rcPs11SXxUA/mHwH975v+BDvLU=
|
||||||
go.etcd.io/etcd/client/pkg/v3 v3.5.6/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ=
|
go.etcd.io/etcd/client/pkg/v3 v3.5.6/go.mod h1:ggrwbk069qxpKPq8/FKkQ3Xq9y39kbFR4LnKszpRXeQ=
|
||||||
go.etcd.io/etcd/client/v3 v3.5.5/go.mod h1:aApjR4WGlSumpnJ2kloS75h6aHUmAyaPLjHMxpc7E7c=
|
|
||||||
go.etcd.io/etcd/client/v3 v3.5.6 h1:coLs69PWCXE9G4FKquzNaSHrRyMCAXwF+IX1tAPVO8E=
|
go.etcd.io/etcd/client/v3 v3.5.6 h1:coLs69PWCXE9G4FKquzNaSHrRyMCAXwF+IX1tAPVO8E=
|
||||||
go.etcd.io/etcd/client/v3 v3.5.6/go.mod h1:f6GRinRMCsFVv9Ht42EyY7nfsVGwrNO0WEoS2pRKzQk=
|
go.etcd.io/etcd/client/v3 v3.5.6/go.mod h1:f6GRinRMCsFVv9Ht42EyY7nfsVGwrNO0WEoS2pRKzQk=
|
||||||
go.mongodb.org/mongo-driver v1.8.3 h1:TDKlTkGDKm9kkJVUOAXDK5/fkqKHJVwYQSpoRfB43R4=
|
go.mongodb.org/mongo-driver v1.8.3 h1:TDKlTkGDKm9kkJVUOAXDK5/fkqKHJVwYQSpoRfB43R4=
|
||||||
@ -983,7 +931,6 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
|
|||||||
go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
|
go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ=
|
||||||
go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
|
go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0=
|
||||||
go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
|
go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
|
||||||
go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ=
|
|
||||||
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
|
||||||
go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
|
go.uber.org/multierr v1.9.0 h1:7fIwc/ZtS0q++VgcfqFDxSBZVv/Xo49/SYnDFupUwlI=
|
||||||
go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ=
|
go.uber.org/multierr v1.9.0/go.mod h1:X2jQV1h+kxSjClGpnseKVIxpmcjrj7MNnI0bnlfKTVQ=
|
||||||
@ -1001,7 +948,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-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-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-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-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.0.0-20211215153901-e495a2d5b3d3/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||||
golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
|
golang.org/x/crypto v0.5.0 h1:U/0M97KRkSFvyD/3FSmdP5W5swImpNgle/EHFhOsQPE=
|
||||||
@ -1018,7 +964,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/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-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-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 h1:HTDXbdK9bjfSWkPzDJIw89W8CAtfFGduujWs33NLLsg=
|
||||||
golang.org/x/image v0.3.0/go.mod h1:fXd9211C/0VTlYuAcOhW8dY/RtEJqODXOWBDpmYBf+A=
|
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=
|
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||||
@ -1044,12 +989,10 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
|||||||
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY=
|
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
|
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
|
||||||
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
|
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-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-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-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-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
@ -1072,7 +1015,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-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-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-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-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-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||||
@ -1087,11 +1029,9 @@ golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLd
|
|||||||
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
|
||||||
golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM=
|
golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM=
|
||||||
golang.org/x/net v0.0.0-20210427231257-85d9c07bbe3a/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk=
|
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-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-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
|
||||||
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||||
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
|
||||||
@ -1152,7 +1092,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/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-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-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-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-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@ -1163,11 +1102,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-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-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-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-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-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-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-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@ -1193,7 +1129,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-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-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-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-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-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
@ -1215,7 +1150,6 @@ golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
|
||||||
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
@ -1242,7 +1176,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-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.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.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.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.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
@ -1260,7 +1193,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-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-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-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 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA=
|
||||||
golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
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=
|
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||||
@ -1311,7 +1243,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-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-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-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-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/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=
|
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
||||||
@ -1321,7 +1252,6 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
|||||||
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=
|
golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo=
|
||||||
golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E=
|
|
||||||
golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
|
golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
|
||||||
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
@ -1496,10 +1426,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-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-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-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-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 h1:BWUVssLB0HVOSY78gIdvk1dTVYtT1y8SBWtPYuTJ/6w=
|
||||||
google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM=
|
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=
|
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||||
@ -1538,7 +1465,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.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.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
|
||||||
google.golang.org/grpc v1.50.1/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 h1:pf7sOysg4LdgBqduXveGKrcEwbStiK2rtfghdzlUYDQ=
|
||||||
google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY=
|
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=
|
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw=
|
||||||
@ -1566,15 +1492,12 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/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 h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
||||||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
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/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.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
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 h1:XfR1dOYubytKy4Shzc2LHrrGhU0lDCfDGG1yLPmpgsI=
|
||||||
gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
|
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22 h1:VpOs+IwYnYBaFnrNAeB8UUWtL3vEUnzSCL1nVjPhqrw=
|
||||||
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
|
gopkg.in/mgo.v2 v2.0.0-20190816093944-a6b53ec6cb22/go.mod h1:yeKp02qBN3iKW1OzL3MGk2IdtZzaj7SFntXj72NppTA=
|
||||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
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.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.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||||
|
@ -5,8 +5,8 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Access(ctx context.Context, ownerUserID string) (err error) {
|
func (u *UserCheck) Access(ctx context.Context, ownerUserID string) (err error) {
|
||||||
_, err = GetUsersInfo(ctx, ownerUserID)
|
_, err = u.GetUsersInfo(ctx, ownerUserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
21
internal/common/check/black.go
Normal file
21
internal/common/check/black.go
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package check
|
||||||
|
|
||||||
|
import (
|
||||||
|
discoveryRegistry "Open_IM/pkg/discoveryregistry"
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
type BlackChecker struct {
|
||||||
|
zk discoveryRegistry.SvcDiscoveryRegistry
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewBlackChecker(zk discoveryRegistry.SvcDiscoveryRegistry) *BlackChecker {
|
||||||
|
return &BlackChecker{
|
||||||
|
zk: zk,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// possibleBlackUserID是否被userID拉黑,也就是是否在userID的黑名单中
|
||||||
|
func (b *BlackChecker) IsBlocked(ctx context.Context, possibleBlackUserID, userID string) (bool, error) {
|
||||||
|
|
||||||
|
}
|
35
internal/common/check/conversation.go
Normal file
35
internal/common/check/conversation.go
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
package check
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
discoveryRegistry "Open_IM/pkg/discoveryregistry"
|
||||||
|
"Open_IM/pkg/proto/conversation"
|
||||||
|
pbConversation "Open_IM/pkg/proto/conversation"
|
||||||
|
"context"
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ConversationChecker struct {
|
||||||
|
zk discoveryRegistry.SvcDiscoveryRegistry
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewConversationChecker(zk discoveryRegistry.SvcDiscoveryRegistry) *ConversationChecker {
|
||||||
|
return &ConversationChecker{zk: zk}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ConversationChecker) ModifyConversationField(ctx context.Context, req *pbConversation.ModifyConversationFieldReq) error {
|
||||||
|
cc, err := c.getConn()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
_, err = conversation.NewConversationClient(cc).ModifyConversationField(ctx, req)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ConversationChecker) getConn() (*grpc.ClientConn, error) {
|
||||||
|
return c.zk.GetConn(config.Config.RpcRegisterName.OpenImConversationName)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ConversationChecker) GetSingleConversationRecvMsgOpt(ctx context.Context, userID, conversationID string) (int32, error) {
|
||||||
|
|
||||||
|
}
|
@ -1,11 +1,41 @@
|
|||||||
package check
|
package check
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
discoveryRegistry "Open_IM/pkg/discoveryregistry"
|
||||||
|
"Open_IM/pkg/proto/friend"
|
||||||
sdkws "Open_IM/pkg/proto/sdkws"
|
sdkws "Open_IM/pkg/proto/sdkws"
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"google.golang.org/grpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetFriendsInfo(ctx context.Context, ownerUserID, friendUserID string) (*sdkws.FriendInfo, error) {
|
type FriendChecker struct {
|
||||||
return nil, errors.New("TODO:GetUserInfo")
|
zk discoveryRegistry.SvcDiscoveryRegistry
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewFriendChecker(zk discoveryRegistry.SvcDiscoveryRegistry) *FriendChecker {
|
||||||
|
return &FriendChecker{
|
||||||
|
zk: zk,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f *FriendChecker) GetFriendsInfo(ctx context.Context, ownerUserID, friendUserID string) (resp *sdkws.FriendInfo, err error) {
|
||||||
|
cc, err := f.getConn()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
r, err := friend.NewFriendClient(cc).GetPaginationFriends(ctx, &friend.GetPaginationFriendsReq{OwnerUserID: ownerUserID, FriendUserIDs: []string{friendUserID}})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
resp = r.FriendsInfo[0]
|
||||||
|
return
|
||||||
|
}
|
||||||
|
func (f *FriendChecker) getConn() (*grpc.ClientConn, error) {
|
||||||
|
return f.zk.GetConn(config.Config.RpcRegisterName.OpenImFriendName)
|
||||||
|
}
|
||||||
|
|
||||||
|
// possibleFriendUserID是否在userID的好友中
|
||||||
|
func (f *FriendChecker) IsFriend(ctx context.Context, possibleFriendUserID, userID string) (bool, error) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,130 @@
|
|||||||
package check
|
package check
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
discoveryRegistry "Open_IM/pkg/discoveryregistry"
|
||||||
|
"Open_IM/pkg/proto/group"
|
||||||
sdkws "Open_IM/pkg/proto/sdkws"
|
sdkws "Open_IM/pkg/proto/sdkws"
|
||||||
"errors"
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type GroupChecker struct {
|
type GroupChecker struct {
|
||||||
|
zk discoveryRegistry.SvcDiscoveryRegistry
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewGroupChecker() *GroupChecker {
|
func NewGroupChecker(zk discoveryRegistry.SvcDiscoveryRegistry) *GroupChecker {
|
||||||
return &GroupChecker{}
|
return &GroupChecker{
|
||||||
|
zk: zk,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupChecker) GetGroupInfo(groupID string) (*sdkws.GroupInfo, error) {
|
func (g *GroupChecker) getConn() (*grpc.ClientConn, error) {
|
||||||
return nil, errors.New("TODO:GetUserInfo")
|
return g.zk.GetConn(config.Config.RpcRegisterName.OpenImGroupName)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupChecker) GetGroupInfos(ctx context.Context, groupIDs []string, complete bool) ([]*sdkws.GroupInfo, error) {
|
||||||
|
cc, err := g.getConn()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
resp, err := group.NewGroupClient(cc).GetGroupsInfo(ctx, &group.GetGroupsInfoReq{
|
||||||
|
GroupIDs: groupIDs,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if complete {
|
||||||
|
if ids := utils.Single(groupIDs, utils.Slice(resp.GroupInfos, func(e *sdkws.GroupInfo) string {
|
||||||
|
return e.GroupID
|
||||||
|
})); len(ids) > 0 {
|
||||||
|
return nil, constant.ErrGroupIDNotFound.Wrap(strings.Join(ids, ","))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resp.GroupInfos, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupChecker) 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
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupChecker) GetGroupInfoMap(ctx context.Context, groupIDs []string, complete bool) (map[string]*sdkws.GroupInfo, error) {
|
||||||
|
groups, err := g.GetGroupInfos(ctx, groupIDs, complete)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return utils.SliceToMap(groups, func(e *sdkws.GroupInfo) string {
|
||||||
|
return e.GroupID
|
||||||
|
}), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupChecker) GetGroupMemberInfos(ctx context.Context, groupID string, userIDs []string, complete bool) ([]*sdkws.GroupMemberFullInfo, error) {
|
||||||
|
cc, err := g.getConn()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
resp, err := group.NewGroupClient(cc).GetGroupMembersInfo(ctx, &group.GetGroupMembersInfoReq{
|
||||||
|
GroupID: groupID,
|
||||||
|
Members: userIDs,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if complete {
|
||||||
|
if ids := utils.Single(userIDs, utils.Slice(resp.Members, func(e *sdkws.GroupMemberFullInfo) string {
|
||||||
|
return e.UserID
|
||||||
|
})); len(ids) > 0 {
|
||||||
|
return nil, constant.ErrNotInGroupYet.Wrap(strings.Join(ids, ","))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resp.Members, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupChecker) GetGroupMemberInfo(ctx context.Context, groupID string, userID string) (*sdkws.GroupMemberFullInfo, error) {
|
||||||
|
members, err := g.GetGroupMemberInfos(ctx, groupID, []string{userID}, true)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return members[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupChecker) GetGroupMemberInfoMap(ctx context.Context, groupID string, userIDs []string, complete bool) (map[string]*sdkws.GroupMemberFullInfo, error) {
|
||||||
|
members, err := g.GetGroupMemberInfos(ctx, groupID, userIDs, true)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return utils.SliceToMap(members, func(e *sdkws.GroupMemberFullInfo) string {
|
||||||
|
return e.UserID
|
||||||
|
}), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupChecker) GetOwnerAndAdminInfos(ctx context.Context, groupID string) ([]*sdkws.GroupMemberFullInfo, error) {
|
||||||
|
cc, err := g.getConn()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
resp, err := group.NewGroupClient(cc).GetGroupMemberRoleLevel(ctx, &group.GetGroupMemberRoleLevelReq{
|
||||||
|
GroupID: groupID,
|
||||||
|
RoleLevels: []int32{constant.GroupOwner, constant.GroupAdmin},
|
||||||
|
})
|
||||||
|
return resp.Members, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *GroupChecker) GetOwnerInfo(ctx context.Context, groupID string) (*sdkws.GroupMemberFullInfo, error) {
|
||||||
|
cc, err := g.getConn()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
resp, err := group.NewGroupClient(cc).GetGroupMemberRoleLevel(ctx, &group.GetGroupMemberRoleLevelReq{
|
||||||
|
GroupID: groupID,
|
||||||
|
RoleLevels: []int32{constant.GroupOwner},
|
||||||
|
})
|
||||||
|
return resp.Members[0], err
|
||||||
}
|
}
|
||||||
|
30
internal/common/check/msg.go
Normal file
30
internal/common/check/msg.go
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
package check
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
discoveryRegistry "Open_IM/pkg/discoveryregistry"
|
||||||
|
"Open_IM/pkg/proto/msg"
|
||||||
|
"context"
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MsgCheck struct {
|
||||||
|
zk discoveryRegistry.SvcDiscoveryRegistry
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMsgCheck(zk discoveryRegistry.SvcDiscoveryRegistry) *MsgCheck {
|
||||||
|
return &MsgCheck{zk: zk}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *MsgCheck) getConn() (*grpc.ClientConn, error) {
|
||||||
|
return m.zk.GetConn(config.Config.RpcRegisterName.OpenImMsgName)
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
@ -1,11 +1,108 @@
|
|||||||
package check
|
package check
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
discoveryRegistry "Open_IM/pkg/discoveryregistry"
|
||||||
sdkws "Open_IM/pkg/proto/sdkws"
|
sdkws "Open_IM/pkg/proto/sdkws"
|
||||||
|
"Open_IM/pkg/proto/user"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"google.golang.org/grpc"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func GetUsersInfo(ctx context.Context, args ...interface{}) ([]*sdkws.UserInfo, error) {
|
//func GetUsersInfo(ctx context.Context, args ...interface{}) ([]*sdkws.UserInfo, error) {
|
||||||
return nil, errors.New("TODO:GetUserInfo")
|
// return nil, errors.New("TODO:GetUserInfo")
|
||||||
|
//}
|
||||||
|
|
||||||
|
func NewUserCheck(zk discoveryRegistry.SvcDiscoveryRegistry) *UserCheck {
|
||||||
|
return &UserCheck{
|
||||||
|
zk: zk,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type UserCheck struct {
|
||||||
|
zk discoveryRegistry.SvcDiscoveryRegistry
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *UserCheck) getConn() (*grpc.ClientConn, error) {
|
||||||
|
return u.zk.GetConn(config.Config.RpcRegisterName.OpenImUserName)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *UserCheck) GetUsersInfos(ctx context.Context, userIDs []string, complete bool) ([]*sdkws.UserInfo, error) {
|
||||||
|
cc, err := u.getConn()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
resp, err := user.NewUserClient(cc).GetDesignateUsers(ctx, &user.GetDesignateUsersReq{
|
||||||
|
UserIDs: userIDs,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if complete {
|
||||||
|
if ids := utils.Single(userIDs, utils.Slice(resp.UsersInfo, func(e *sdkws.UserInfo) string {
|
||||||
|
return e.UserID
|
||||||
|
})); len(ids) > 0 {
|
||||||
|
return nil, constant.ErrUserIDNotFound.Wrap(strings.Join(ids, ","))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resp.UsersInfo, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *UserCheck) GetUsersInfo(ctx context.Context, userID string) (*sdkws.UserInfo, error) {
|
||||||
|
users, err := u.GetUsersInfos(ctx, []string{userID}, true)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return users[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *UserCheck) GetUsersInfoMap(ctx context.Context, userIDs []string, complete bool) (map[string]*sdkws.UserInfo, error) {
|
||||||
|
users, err := u.GetUsersInfos(ctx, userIDs, complete)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return utils.SliceToMap(users, func(e *sdkws.UserInfo) string {
|
||||||
|
return e.UserID
|
||||||
|
}), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *UserCheck) GetPublicUserInfos(ctx context.Context, userIDs []string, complete bool) ([]*sdkws.PublicUserInfo, error) {
|
||||||
|
users, err := u.GetUsersInfos(ctx, userIDs, complete)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return utils.Slice(users, func(e *sdkws.UserInfo) *sdkws.PublicUserInfo {
|
||||||
|
return &sdkws.PublicUserInfo{
|
||||||
|
UserID: e.UserID,
|
||||||
|
Nickname: e.Nickname,
|
||||||
|
FaceURL: e.FaceURL,
|
||||||
|
Gender: e.Gender,
|
||||||
|
Ex: e.Ex,
|
||||||
|
}
|
||||||
|
}), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *UserCheck) GetPublicUserInfo(ctx context.Context, userID string) (*sdkws.PublicUserInfo, error) {
|
||||||
|
users, err := u.GetPublicUserInfos(ctx, []string{userID}, true)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return users[0], nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *UserCheck) GetPublicUserInfoMap(ctx context.Context, userIDs []string, complete bool) (map[string]*sdkws.PublicUserInfo, error) {
|
||||||
|
users, err := u.GetPublicUserInfos(ctx, userIDs, complete)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return utils.SliceToMap(users, func(e *sdkws.PublicUserInfo) string {
|
||||||
|
return e.UserID
|
||||||
|
}), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (u *UserCheck) GetUserGlobalMsgRecvOpt(ctx context.Context, userID string) (int32, error) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,29 +1,23 @@
|
|||||||
package convert
|
package convert
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"Open_IM/internal/common/check"
|
||||||
"Open_IM/pkg/common/db/table/relation"
|
"Open_IM/pkg/common/db/table/relation"
|
||||||
|
discoveryRegistry "Open_IM/pkg/discoveryregistry"
|
||||||
sdk "Open_IM/pkg/proto/sdkws"
|
sdk "Open_IM/pkg/proto/sdkws"
|
||||||
|
utils2 "Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
utils "github.com/OpenIMSDK/open_utils"
|
utils "github.com/OpenIMSDK/open_utils"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getUsersInfo(userIDs []string) ([]*sdk.UserInfo, error) {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func getGroupOwnerInfo(groupID string) (*sdk.GroupMemberFullInfo, error) {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
func getNumberOfGroupMember(groupID string) (int32, error) {
|
|
||||||
return 0, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type DBFriend struct {
|
type DBFriend struct {
|
||||||
*relation.FriendModel
|
*relation.FriendModel
|
||||||
|
userCheck *check.UserCheck
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDBFriend(friend *relation.FriendModel) *DBFriend {
|
func NewDBFriend(friend *relation.FriendModel, zk discoveryRegistry.SvcDiscoveryRegistry) *DBFriend {
|
||||||
return &DBFriend{FriendModel: friend}
|
return &DBFriend{FriendModel: friend, userCheck: check.NewUserCheck(zk)}
|
||||||
}
|
}
|
||||||
|
|
||||||
type PBFriend struct {
|
type PBFriend struct {
|
||||||
@ -45,29 +39,34 @@ func (*PBFriend) PB2DB(friends []*sdk.FriendInfo) (DBFriends []*relation.FriendM
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*DBFriend) DB2PB(friends []*relation.FriendModel) (PBFriends []*sdk.FriendInfo, err error) {
|
func (db *DBFriend) DB2PB(ctx context.Context, friends []*relation.FriendModel) (PBFriends []*sdk.FriendInfo, err error) {
|
||||||
for _, v := range friends {
|
userIDs := utils2.Slice(friends, func(e *relation.FriendModel) string { return e.FriendUserID })
|
||||||
u, err := NewDBFriend(v).Convert()
|
users, err := db.userCheck.GetUsersInfoMap(ctx, userIDs, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
PBFriends = append(PBFriends, u)
|
for _, v := range friends {
|
||||||
|
pbfriend := &sdk.FriendInfo{FriendUser: &sdk.UserInfo{}}
|
||||||
|
utils.CopyStructFields(pbfriend, users[v.OwnerUserID])
|
||||||
|
utils.CopyStructFields(pbfriend.FriendUser, users[v.FriendUserID])
|
||||||
|
pbfriend.CreateTime = v.CreateTime.Unix()
|
||||||
|
pbfriend.FriendUser.CreateTime = v.CreateTime.Unix()
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DBFriend) Convert() (*sdk.FriendInfo, error) {
|
func (db *DBFriend) Convert(ctx context.Context) (*sdk.FriendInfo, error) {
|
||||||
pbFriend := &sdk.FriendInfo{FriendUser: &sdk.UserInfo{}}
|
pbfriend := &sdk.FriendInfo{FriendUser: &sdk.UserInfo{}}
|
||||||
utils.CopyStructFields(pbFriend, db)
|
utils.CopyStructFields(pbfriend, db)
|
||||||
user, err := getUsersInfo([]string{db.FriendUserID})
|
user, err := db.userCheck.GetUsersInfo(ctx, db.FriendUserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
utils.CopyStructFields(pbFriend.FriendUser, user[0])
|
utils.CopyStructFields(pbfriend.FriendUser, user)
|
||||||
pbFriend.CreateTime = db.CreateTime.Unix()
|
pbfriend.CreateTime = db.CreateTime.Unix()
|
||||||
|
|
||||||
pbFriend.FriendUser.CreateTime = db.CreateTime.Unix()
|
pbfriend.FriendUser.CreateTime = db.CreateTime.Unix()
|
||||||
return pbFriend, nil
|
return pbfriend, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pb *PBFriend) Convert() (*relation.FriendModel, error) {
|
func (pb *PBFriend) Convert() (*relation.FriendModel, error) {
|
||||||
@ -80,10 +79,11 @@ func (pb *PBFriend) Convert() (*relation.FriendModel, error) {
|
|||||||
|
|
||||||
type DBFriendRequest struct {
|
type DBFriendRequest struct {
|
||||||
*relation.FriendRequestModel
|
*relation.FriendRequestModel
|
||||||
|
userCheck *check.UserCheck
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDBFriendRequest(friendRequest *relation.FriendRequestModel) *DBFriendRequest {
|
func NewDBFriendRequest(friendRequest *relation.FriendRequestModel, zk discoveryRegistry.SvcDiscoveryRegistry) *DBFriendRequest {
|
||||||
return &DBFriendRequest{FriendRequestModel: friendRequest}
|
return &DBFriendRequest{FriendRequestModel: friendRequest, userCheck: check.NewUserCheck(zk)}
|
||||||
}
|
}
|
||||||
|
|
||||||
type PBFriendRequest struct {
|
type PBFriendRequest struct {
|
||||||
@ -105,13 +105,26 @@ func (*PBFriendRequest) PB2DB(friendRequests []*sdk.FriendRequest) (DBFriendRequ
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*DBFriendRequest) DB2PB(friendRequests []*relation.FriendRequestModel) (PBFriendRequests []*sdk.FriendRequest, err error) {
|
func (db *DBFriendRequest) DB2PB(ctx context.Context, friendRequests []*relation.FriendRequestModel) (PBFriendRequests []*sdk.FriendRequest, err error) {
|
||||||
for _, v := range friendRequests {
|
userIDs := make([]string, 0)
|
||||||
u, err := NewDBFriendRequest(v).Convert()
|
if len(friendRequests) > 0 {
|
||||||
|
userIDs = append(userIDs, friendRequests[0].FromUserID)
|
||||||
|
}
|
||||||
|
users, err := db.userCheck.GetUsersInfoMap(ctx, userIDs, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
PBFriendRequests = append(PBFriendRequests, u)
|
for _, v := range friendRequests {
|
||||||
|
pbFriendRequest := &sdk.FriendRequest{}
|
||||||
|
pbFriendRequest.FromNickname = users[v.FromUserID].Nickname
|
||||||
|
pbFriendRequest.FromFaceURL = users[v.FromUserID].FaceURL
|
||||||
|
pbFriendRequest.FromGender = users[v.FromUserID].Gender
|
||||||
|
pbFriendRequest.ToNickname = users[v.ToUserID].Nickname
|
||||||
|
pbFriendRequest.ToFaceURL = users[v.ToUserID].FaceURL
|
||||||
|
pbFriendRequest.ToGender = users[v.ToUserID].Gender
|
||||||
|
pbFriendRequest.CreateTime = db.CreateTime.Unix()
|
||||||
|
pbFriendRequest.HandleTime = db.HandleTime.Unix()
|
||||||
|
PBFriendRequests = append(PBFriendRequests, pbFriendRequest)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -123,23 +136,23 @@ func (pb *PBFriendRequest) Convert() (*relation.FriendRequestModel, error) {
|
|||||||
dbFriendRequest.HandleTime = utils.UnixSecondToTime(int64(pb.HandleTime))
|
dbFriendRequest.HandleTime = utils.UnixSecondToTime(int64(pb.HandleTime))
|
||||||
return dbFriendRequest, nil
|
return dbFriendRequest, nil
|
||||||
}
|
}
|
||||||
func (db *DBFriendRequest) Convert() (*sdk.FriendRequest, error) {
|
func (db *DBFriendRequest) Convert(ctx context.Context) (*sdk.FriendRequest, error) {
|
||||||
pbFriendRequest := &sdk.FriendRequest{}
|
pbFriendRequest := &sdk.FriendRequest{}
|
||||||
utils.CopyStructFields(pbFriendRequest, db)
|
utils.CopyStructFields(pbFriendRequest, db)
|
||||||
user, err := getUsersInfo([]string{db.FromUserID})
|
user, err := db.userCheck.GetUsersInfo(ctx, db.FromUserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
pbFriendRequest.FromNickname = user[0].Nickname
|
pbFriendRequest.FromNickname = user.Nickname
|
||||||
pbFriendRequest.FromFaceURL = user[0].FaceURL
|
pbFriendRequest.FromFaceURL = user.FaceURL
|
||||||
pbFriendRequest.FromGender = user[0].Gender
|
pbFriendRequest.FromGender = user.Gender
|
||||||
user, err = getUsersInfo([]string{db.ToUserID})
|
user, err = db.userCheck.GetUsersInfo(ctx, db.ToUserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
pbFriendRequest.ToNickname = user[0].Nickname
|
pbFriendRequest.ToNickname = user.Nickname
|
||||||
pbFriendRequest.ToFaceURL = user[0].FaceURL
|
pbFriendRequest.ToFaceURL = user.FaceURL
|
||||||
pbFriendRequest.ToGender = user[0].Gender
|
pbFriendRequest.ToGender = user.Gender
|
||||||
pbFriendRequest.CreateTime = db.CreateTime.Unix()
|
pbFriendRequest.CreateTime = db.CreateTime.Unix()
|
||||||
pbFriendRequest.HandleTime = db.HandleTime.Unix()
|
pbFriendRequest.HandleTime = db.HandleTime.Unix()
|
||||||
return pbFriendRequest, nil
|
return pbFriendRequest, nil
|
||||||
@ -147,6 +160,7 @@ func (db *DBFriendRequest) Convert() (*sdk.FriendRequest, error) {
|
|||||||
|
|
||||||
type DBBlack struct {
|
type DBBlack struct {
|
||||||
*relation.BlackModel
|
*relation.BlackModel
|
||||||
|
userCheck *check.UserCheck
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*PBBlack) PB2DB(blacks []*sdk.BlackInfo) (DBBlacks []*relation.BlackModel, err error) {
|
func (*PBBlack) PB2DB(blacks []*sdk.BlackInfo) (DBBlacks []*relation.BlackModel, err error) {
|
||||||
@ -160,19 +174,31 @@ func (*PBBlack) PB2DB(blacks []*sdk.BlackInfo) (DBBlacks []*relation.BlackModel,
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*DBBlack) DB2PB(blacks []*relation.BlackModel) (PBBlacks []*sdk.BlackInfo, err error) {
|
func (db *DBBlack) DB2PB(ctx context.Context, blacks []*relation.BlackModel) (PBBlacks []*sdk.BlackInfo, err error) {
|
||||||
|
userIDs := make([]string, 0)
|
||||||
for _, v := range blacks {
|
for _, v := range blacks {
|
||||||
u, err := NewDBBlack(v).Convert()
|
userIDs = append(userIDs, v.BlockUserID)
|
||||||
|
}
|
||||||
|
if len(blacks) > 0 {
|
||||||
|
userIDs = append(userIDs, blacks[0].OwnerUserID)
|
||||||
|
}
|
||||||
|
|
||||||
|
users, err := db.userCheck.GetUsersInfoMap(ctx, userIDs, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
PBBlacks = append(PBBlacks, u)
|
|
||||||
|
for _, v := range blacks {
|
||||||
|
pbBlack := &sdk.BlackInfo{}
|
||||||
|
utils.CopyStructFields(pbBlack, users[v.OwnerUserID])
|
||||||
|
utils.CopyStructFields(pbBlack.BlackUserInfo, users[v.BlockUserID])
|
||||||
|
PBBlacks = append(PBBlacks, pbBlack)
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewDBBlack(black *relation.BlackModel) *DBBlack {
|
func NewDBBlack(black *relation.BlackModel, zk discoveryRegistry.SvcDiscoveryRegistry) *DBBlack {
|
||||||
return &DBBlack{BlackModel: black}
|
return &DBBlack{BlackModel: black, userCheck: check.NewUserCheck(zk)}
|
||||||
}
|
}
|
||||||
|
|
||||||
type PBBlack struct {
|
type PBBlack struct {
|
||||||
@ -186,14 +212,14 @@ func NewPBBlack(blackInfo *sdk.BlackInfo) *PBBlack {
|
|||||||
func (pb *PBBlack) Convert() (*relation.BlackModel, error) {
|
func (pb *PBBlack) Convert() (*relation.BlackModel, error) {
|
||||||
dbBlack := &relation.BlackModel{}
|
dbBlack := &relation.BlackModel{}
|
||||||
dbBlack.BlockUserID = pb.BlackUserInfo.UserID
|
dbBlack.BlockUserID = pb.BlackUserInfo.UserID
|
||||||
dbBlack.CreateTime = utils.UnixSecondToTime(int64(pb.CreateTime))
|
dbBlack.CreateTime = utils.UnixSecondToTime(pb.CreateTime)
|
||||||
return dbBlack, nil
|
return dbBlack, nil
|
||||||
}
|
}
|
||||||
func (db *DBBlack) Convert() (*sdk.BlackInfo, error) {
|
func (db *DBBlack) Convert(ctx context.Context) (*sdk.BlackInfo, error) {
|
||||||
pbBlack := &sdk.BlackInfo{}
|
pbBlack := &sdk.BlackInfo{}
|
||||||
utils.CopyStructFields(pbBlack, db)
|
utils.CopyStructFields(pbBlack, db)
|
||||||
pbBlack.CreateTime = db.CreateTime.Unix()
|
pbBlack.CreateTime = db.CreateTime.Unix()
|
||||||
user, err := getUsersInfo([]string{db.BlockUserID})
|
user, err := db.userCheck.GetUsersInfo(ctx, db.BlockUserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -203,6 +229,8 @@ func (db *DBBlack) Convert() (*sdk.BlackInfo, error) {
|
|||||||
|
|
||||||
type DBGroup struct {
|
type DBGroup struct {
|
||||||
*relation.GroupModel
|
*relation.GroupModel
|
||||||
|
zk discoveryRegistry.SvcDiscoveryRegistry
|
||||||
|
groupCheck *check.GroupChecker
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*PBGroup) PB2DB(groups []*sdk.GroupInfo) (DBGroups []*relation.GroupModel, err error) {
|
func (*PBGroup) PB2DB(groups []*sdk.GroupInfo) (DBGroups []*relation.GroupModel, err error) {
|
||||||
@ -216,19 +244,19 @@ func (*PBGroup) PB2DB(groups []*sdk.GroupInfo) (DBGroups []*relation.GroupModel,
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*DBGroup) DB2PB(groups []*relation.GroupModel) (PBGroups []*sdk.GroupInfo, err error) {
|
//func (db *DBGroup) DB2PB(ctx context.Context, zk discoveryRegistry.SvcDiscoveryRegistry, groups []*relation.GroupModel) (PBGroups []*sdk.GroupInfo, err error) {
|
||||||
for _, v := range groups {
|
// for _, v := range groups {
|
||||||
u, err := NewDBGroup(v).Convert()
|
// u, err := NewDBGroup(v, zk).Convert(ctx)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
PBGroups = append(PBGroups, u)
|
// PBGroups = append(PBGroups, u)
|
||||||
}
|
// }
|
||||||
return
|
// return
|
||||||
}
|
//}
|
||||||
|
|
||||||
func NewDBGroup(group *relation.GroupModel) *DBGroup {
|
func NewDBGroup(groupModel *relation.GroupModel, zk discoveryRegistry.SvcDiscoveryRegistry) *DBGroup {
|
||||||
return &DBGroup{GroupModel: group}
|
return &DBGroup{GroupModel: groupModel, groupCheck: check.NewGroupChecker(zk)}
|
||||||
}
|
}
|
||||||
|
|
||||||
type PBGroup struct {
|
type PBGroup struct {
|
||||||
@ -244,20 +272,20 @@ func (pb *PBGroup) Convert() (*relation.GroupModel, error) {
|
|||||||
err := utils.CopyStructFields(dst, pb)
|
err := utils.CopyStructFields(dst, pb)
|
||||||
return dst, err
|
return dst, err
|
||||||
}
|
}
|
||||||
func (db *DBGroup) Convert() (*sdk.GroupInfo, error) {
|
func (db *DBGroup) Convert(ctx context.Context) (*sdk.GroupInfo, error) {
|
||||||
dst := &sdk.GroupInfo{}
|
dst := &sdk.GroupInfo{}
|
||||||
utils.CopyStructFields(dst, db)
|
utils.CopyStructFields(dst, db)
|
||||||
user, err := getGroupOwnerInfo(db.GroupID)
|
user, err := db.groupCheck.GetOwnerInfo(ctx, db.GroupID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
dst.OwnerUserID = user.UserID
|
dst.OwnerUserID = user.UserID
|
||||||
|
|
||||||
memberCount, err := getNumberOfGroupMember(db.GroupID)
|
g, err := db.groupCheck.GetGroupInfo(ctx, db.GroupID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
dst.MemberCount = uint32(memberCount)
|
dst.MemberCount = g.MemberCount
|
||||||
dst.CreateTime = db.CreateTime.Unix()
|
dst.CreateTime = db.CreateTime.Unix()
|
||||||
dst.NotificationUpdateTime = db.NotificationUpdateTime.Unix()
|
dst.NotificationUpdateTime = db.NotificationUpdateTime.Unix()
|
||||||
if db.NotificationUpdateTime.Unix() < 0 {
|
if db.NotificationUpdateTime.Unix() < 0 {
|
||||||
@ -268,6 +296,7 @@ func (db *DBGroup) Convert() (*sdk.GroupInfo, error) {
|
|||||||
|
|
||||||
type DBGroupMember struct {
|
type DBGroupMember struct {
|
||||||
*relation.GroupMemberModel
|
*relation.GroupMemberModel
|
||||||
|
userCheck *check.UserCheck
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*PBGroupMember) PB2DB(groupMembers []*sdk.GroupMemberFullInfo) (DBGroupMembers []*relation.GroupMemberModel, err error) {
|
func (*PBGroupMember) PB2DB(groupMembers []*sdk.GroupMemberFullInfo) (DBGroupMembers []*relation.GroupMemberModel, err error) {
|
||||||
@ -281,16 +310,16 @@ func (*PBGroupMember) PB2DB(groupMembers []*sdk.GroupMemberFullInfo) (DBGroupMem
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*DBGroupMember) DB2PB(groupMembers []*relation.GroupMemberModel) (PBGroupMembers []*sdk.GroupMemberFullInfo, err error) {
|
//func (*DBGroupMember) DB2PB(ctx context.Context, groupMembers []*relation.GroupMemberModel) (PBGroupMembers []*sdk.GroupMemberFullInfo, err error) {
|
||||||
for _, v := range groupMembers {
|
// for _, v := range groupMembers {
|
||||||
u, err := NewDBGroupMember(v).Convert()
|
// u, err := NewDBGroupMember(v).Convert(ctx)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
PBGroupMembers = append(PBGroupMembers, u)
|
// PBGroupMembers = append(PBGroupMembers, u)
|
||||||
}
|
// }
|
||||||
return
|
// return
|
||||||
}
|
//}
|
||||||
|
|
||||||
func NewDBGroupMember(groupMember *relation.GroupMemberModel) *DBGroupMember {
|
func NewDBGroupMember(groupMember *relation.GroupMemberModel) *DBGroupMember {
|
||||||
return &DBGroupMember{GroupMemberModel: groupMember}
|
return &DBGroupMember{GroupMemberModel: groupMember}
|
||||||
@ -311,15 +340,15 @@ func (pb *PBGroupMember) Convert() (*relation.GroupMemberModel, error) {
|
|||||||
dst.MuteEndTime = utils.UnixSecondToTime(int64(pb.MuteEndTime))
|
dst.MuteEndTime = utils.UnixSecondToTime(int64(pb.MuteEndTime))
|
||||||
return dst, nil
|
return dst, nil
|
||||||
}
|
}
|
||||||
func (db *DBGroupMember) Convert() (*sdk.GroupMemberFullInfo, error) {
|
func (db *DBGroupMember) Convert(ctx context.Context) (*sdk.GroupMemberFullInfo, error) {
|
||||||
dst := &sdk.GroupMemberFullInfo{}
|
dst := &sdk.GroupMemberFullInfo{}
|
||||||
utils.CopyStructFields(dst, db)
|
utils.CopyStructFields(dst, db)
|
||||||
|
|
||||||
user, err := getUsersInfo([]string{db.UserID})
|
user, err := db.userCheck.GetUsersInfo(ctx, db.UserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
dst.AppMangerLevel = user[0].AppMangerLevel
|
dst.AppMangerLevel = user.AppMangerLevel
|
||||||
|
|
||||||
dst.JoinTime = db.JoinTime.Unix()
|
dst.JoinTime = db.JoinTime.Unix()
|
||||||
if db.JoinTime.Unix() < 0 {
|
if db.JoinTime.Unix() < 0 {
|
||||||
@ -347,16 +376,16 @@ func (*PBGroupRequest) PB2DB(groupRequests []*sdk.GroupRequest) (DBGroupRequests
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (*DBGroupRequest) DB2PB(groupRequests []*relation.GroupRequestModel) (PBGroupRequests []*sdk.GroupRequest, err error) {
|
//func (*DBGroupRequest) DB2PB(groupRequests []*relation.GroupRequestModel) (PBGroupRequests []*sdk.GroupRequest, err error) {
|
||||||
for _, v := range groupRequests {
|
// for _, v := range groupRequests {
|
||||||
u, err := NewDBGroupRequest(v).Convert()
|
// u, err := NewDBGroupRequest(v).Convert()
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
PBGroupRequests = append(PBGroupRequests, u)
|
// PBGroupRequests = append(PBGroupRequests, u)
|
||||||
}
|
// }
|
||||||
return
|
// return
|
||||||
}
|
//}
|
||||||
|
|
||||||
func NewDBGroupRequest(groupRequest *relation.GroupRequestModel) *DBGroupRequest {
|
func NewDBGroupRequest(groupRequest *relation.GroupRequestModel) *DBGroupRequest {
|
||||||
return &DBGroupRequest{GroupRequestModel: groupRequest}
|
return &DBGroupRequest{GroupRequestModel: groupRequest}
|
||||||
|
305
internal/common/notification/c.go
Normal file
305
internal/common/notification/c.go
Normal file
@ -0,0 +1,305 @@
|
|||||||
|
package notification
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/internal/common/check"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/tracelog"
|
||||||
|
discoveryRegistry "Open_IM/pkg/discoveryregistry"
|
||||||
|
"Open_IM/pkg/proto/msg"
|
||||||
|
"Open_IM/pkg/proto/sdkws"
|
||||||
|
utils2 "Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
utils "github.com/OpenIMSDK/open_utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Check struct {
|
||||||
|
user *check.UserCheck
|
||||||
|
group *check.GroupChecker
|
||||||
|
msg *check.MsgCheck
|
||||||
|
friend *check.FriendChecker
|
||||||
|
conversation *check.ConversationChecker
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewCheck(zk discoveryRegistry.SvcDiscoveryRegistry) *Check {
|
||||||
|
return &Check{
|
||||||
|
user: check.NewUserCheck(zk),
|
||||||
|
group: check.NewGroupChecker(zk),
|
||||||
|
msg: check.NewMsgCheck(zk),
|
||||||
|
friend: check.NewFriendChecker(zk),
|
||||||
|
conversation: check.NewConversationChecker(zk),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type NotificationMsg struct {
|
||||||
|
SendID string
|
||||||
|
RecvID string
|
||||||
|
Content []byte // sdkws.TipsComm
|
||||||
|
MsgFrom int32
|
||||||
|
ContentType int32
|
||||||
|
SessionType int32
|
||||||
|
SenderNickname string
|
||||||
|
SenderFaceURL string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) Notification(ctx context.Context, notificationMsg *NotificationMsg) {
|
||||||
|
var err error
|
||||||
|
defer func() {
|
||||||
|
tracelog.SetCtxDebug(ctx, utils2.GetFuncName(1), err, "notificationMsg", notificationMsg)
|
||||||
|
}()
|
||||||
|
|
||||||
|
var req msg.SendMsgReq
|
||||||
|
var msg sdkws.MsgData
|
||||||
|
var offlineInfo sdkws.OfflinePushInfo
|
||||||
|
var title, desc, ex string
|
||||||
|
var pushSwitch, unReadCount bool
|
||||||
|
var reliabilityLevel int
|
||||||
|
msg.SendID = notificationMsg.SendID
|
||||||
|
msg.RecvID = notificationMsg.RecvID
|
||||||
|
msg.Content = notificationMsg.Content
|
||||||
|
msg.MsgFrom = notificationMsg.MsgFrom
|
||||||
|
msg.ContentType = notificationMsg.ContentType
|
||||||
|
msg.SessionType = notificationMsg.SessionType
|
||||||
|
msg.CreateTime = utils.GetCurrentTimestampByMill()
|
||||||
|
msg.ClientMsgID = utils.GetMsgID(notificationMsg.SendID)
|
||||||
|
msg.Options = make(map[string]bool, 7)
|
||||||
|
msg.SenderNickname = notificationMsg.SenderNickname
|
||||||
|
msg.SenderFaceURL = notificationMsg.SenderFaceURL
|
||||||
|
switch notificationMsg.SessionType {
|
||||||
|
case constant.GroupChatType, constant.SuperGroupChatType:
|
||||||
|
msg.RecvID = ""
|
||||||
|
msg.GroupID = notificationMsg.RecvID
|
||||||
|
}
|
||||||
|
offlineInfo.IOSBadgeCount = config.Config.IOSPush.BadgeCount
|
||||||
|
offlineInfo.IOSPushSound = config.Config.IOSPush.PushSound
|
||||||
|
switch msg.ContentType {
|
||||||
|
case constant.GroupCreatedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.GroupCreated.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.GroupCreated.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.GroupCreated.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.GroupCreated.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.GroupCreated.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.GroupCreated.Conversation.UnreadCount
|
||||||
|
case constant.GroupInfoSetNotification:
|
||||||
|
pushSwitch = config.Config.Notification.GroupInfoSet.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.GroupInfoSet.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.GroupInfoSet.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.GroupInfoSet.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.GroupInfoSet.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.GroupInfoSet.Conversation.UnreadCount
|
||||||
|
case constant.JoinGroupApplicationNotification:
|
||||||
|
pushSwitch = config.Config.Notification.JoinGroupApplication.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.JoinGroupApplication.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.JoinGroupApplication.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.JoinGroupApplication.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.JoinGroupApplication.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.JoinGroupApplication.Conversation.UnreadCount
|
||||||
|
case constant.MemberQuitNotification:
|
||||||
|
pushSwitch = config.Config.Notification.MemberQuit.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.MemberQuit.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.MemberQuit.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.MemberQuit.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.MemberQuit.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.MemberQuit.Conversation.UnreadCount
|
||||||
|
case constant.GroupApplicationAcceptedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.GroupApplicationAccepted.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.GroupApplicationAccepted.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.GroupApplicationAccepted.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.GroupApplicationAccepted.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.GroupApplicationAccepted.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.GroupApplicationAccepted.Conversation.UnreadCount
|
||||||
|
case constant.GroupApplicationRejectedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.GroupApplicationRejected.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.GroupApplicationRejected.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.GroupApplicationRejected.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.GroupApplicationRejected.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.GroupApplicationRejected.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.GroupApplicationRejected.Conversation.UnreadCount
|
||||||
|
case constant.GroupOwnerTransferredNotification:
|
||||||
|
pushSwitch = config.Config.Notification.GroupOwnerTransferred.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.GroupOwnerTransferred.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.GroupOwnerTransferred.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.GroupOwnerTransferred.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.GroupOwnerTransferred.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.GroupOwnerTransferred.Conversation.UnreadCount
|
||||||
|
case constant.MemberKickedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.MemberKicked.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.MemberKicked.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.MemberKicked.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.MemberKicked.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.MemberKicked.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.MemberKicked.Conversation.UnreadCount
|
||||||
|
case constant.MemberInvitedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.MemberInvited.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.MemberInvited.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.MemberInvited.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.MemberInvited.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.MemberInvited.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.MemberInvited.Conversation.UnreadCount
|
||||||
|
case constant.MemberEnterNotification:
|
||||||
|
pushSwitch = config.Config.Notification.MemberEnter.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.MemberEnter.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.MemberEnter.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.MemberEnter.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.MemberEnter.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.MemberEnter.Conversation.UnreadCount
|
||||||
|
case constant.UserInfoUpdatedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.UserInfoUpdated.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.UserInfoUpdated.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.UserInfoUpdated.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.UserInfoUpdated.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.UserInfoUpdated.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.UserInfoUpdated.Conversation.UnreadCount
|
||||||
|
case constant.FriendApplicationNotification:
|
||||||
|
pushSwitch = config.Config.Notification.FriendApplication.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.FriendApplication.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.FriendApplication.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.FriendApplication.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.FriendApplication.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.FriendApplication.Conversation.UnreadCount
|
||||||
|
case constant.FriendApplicationApprovedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.FriendApplicationApproved.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.FriendApplicationApproved.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.FriendApplicationApproved.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.FriendApplicationApproved.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.FriendApplicationApproved.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.FriendApplicationApproved.Conversation.UnreadCount
|
||||||
|
case constant.FriendApplicationRejectedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.FriendApplicationRejected.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.FriendApplicationRejected.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.FriendApplicationRejected.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.FriendApplicationRejected.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.FriendApplicationRejected.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.FriendApplicationRejected.Conversation.UnreadCount
|
||||||
|
case constant.FriendAddedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.FriendAdded.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.FriendAdded.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.FriendAdded.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.FriendAdded.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.FriendAdded.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.FriendAdded.Conversation.UnreadCount
|
||||||
|
case constant.FriendDeletedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.FriendDeleted.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.FriendDeleted.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.FriendDeleted.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.FriendDeleted.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.FriendDeleted.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.FriendDeleted.Conversation.UnreadCount
|
||||||
|
case constant.FriendRemarkSetNotification:
|
||||||
|
pushSwitch = config.Config.Notification.FriendRemarkSet.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.FriendRemarkSet.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.FriendRemarkSet.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.FriendRemarkSet.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.FriendRemarkSet.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.FriendRemarkSet.Conversation.UnreadCount
|
||||||
|
case constant.BlackAddedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.BlackAdded.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.BlackAdded.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.BlackAdded.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.BlackAdded.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.BlackAdded.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.BlackAdded.Conversation.UnreadCount
|
||||||
|
case constant.BlackDeletedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.BlackDeleted.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.BlackDeleted.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.BlackDeleted.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.BlackDeleted.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.BlackDeleted.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.BlackDeleted.Conversation.UnreadCount
|
||||||
|
case constant.ConversationOptChangeNotification:
|
||||||
|
pushSwitch = config.Config.Notification.ConversationOptUpdate.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.ConversationOptUpdate.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.ConversationOptUpdate.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.ConversationOptUpdate.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.ConversationOptUpdate.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.ConversationOptUpdate.Conversation.UnreadCount
|
||||||
|
|
||||||
|
case constant.GroupDismissedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.GroupDismissed.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.GroupDismissed.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.GroupDismissed.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.GroupDismissed.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.GroupDismissed.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.GroupDismissed.Conversation.UnreadCount
|
||||||
|
|
||||||
|
case constant.GroupMutedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.GroupMuted.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.GroupMuted.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.GroupMuted.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.GroupMuted.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.GroupMuted.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.GroupMuted.Conversation.UnreadCount
|
||||||
|
|
||||||
|
case constant.GroupCancelMutedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.GroupCancelMuted.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.GroupCancelMuted.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.GroupCancelMuted.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.GroupCancelMuted.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.GroupCancelMuted.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.GroupCancelMuted.Conversation.UnreadCount
|
||||||
|
|
||||||
|
case constant.GroupMemberMutedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.GroupMemberMuted.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.GroupMemberMuted.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.GroupMemberMuted.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.GroupMemberMuted.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.GroupMemberMuted.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.GroupMemberMuted.Conversation.UnreadCount
|
||||||
|
|
||||||
|
case constant.GroupMemberCancelMutedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.GroupMemberCancelMuted.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.GroupMemberCancelMuted.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.GroupMemberCancelMuted.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.GroupMemberCancelMuted.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.GroupMemberCancelMuted.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.GroupMemberCancelMuted.Conversation.UnreadCount
|
||||||
|
|
||||||
|
case constant.GroupMemberInfoSetNotification:
|
||||||
|
pushSwitch = config.Config.Notification.GroupMemberInfoSet.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.GroupMemberInfoSet.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.GroupMemberInfoSet.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.GroupMemberInfoSet.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.GroupMemberInfoSet.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.GroupMemberInfoSet.Conversation.UnreadCount
|
||||||
|
|
||||||
|
case constant.ConversationPrivateChatNotification:
|
||||||
|
pushSwitch = config.Config.Notification.ConversationSetPrivate.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.ConversationSetPrivate.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.ConversationSetPrivate.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.ConversationSetPrivate.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.ConversationSetPrivate.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.ConversationSetPrivate.Conversation.UnreadCount
|
||||||
|
case constant.FriendInfoUpdatedNotification:
|
||||||
|
pushSwitch = config.Config.Notification.FriendInfoUpdated.OfflinePush.PushSwitch
|
||||||
|
title = config.Config.Notification.FriendInfoUpdated.OfflinePush.Title
|
||||||
|
desc = config.Config.Notification.FriendInfoUpdated.OfflinePush.Desc
|
||||||
|
ex = config.Config.Notification.FriendInfoUpdated.OfflinePush.Ext
|
||||||
|
reliabilityLevel = config.Config.Notification.FriendInfoUpdated.Conversation.ReliabilityLevel
|
||||||
|
unReadCount = config.Config.Notification.FriendInfoUpdated.Conversation.UnreadCount
|
||||||
|
case constant.DeleteMessageNotification:
|
||||||
|
reliabilityLevel = constant.ReliableNotificationNoMsg
|
||||||
|
case constant.ConversationUnreadNotification, constant.SuperGroupUpdateNotification:
|
||||||
|
reliabilityLevel = constant.UnreliableNotification
|
||||||
|
}
|
||||||
|
switch reliabilityLevel {
|
||||||
|
case constant.UnreliableNotification:
|
||||||
|
utils.SetSwitchFromOptions(msg.Options, constant.IsHistory, false)
|
||||||
|
utils.SetSwitchFromOptions(msg.Options, constant.IsPersistent, false)
|
||||||
|
utils.SetSwitchFromOptions(msg.Options, constant.IsConversationUpdate, false)
|
||||||
|
utils.SetSwitchFromOptions(msg.Options, constant.IsSenderConversationUpdate, false)
|
||||||
|
case constant.ReliableNotificationNoMsg:
|
||||||
|
utils.SetSwitchFromOptions(msg.Options, constant.IsConversationUpdate, false)
|
||||||
|
utils.SetSwitchFromOptions(msg.Options, constant.IsSenderConversationUpdate, false)
|
||||||
|
case constant.ReliableNotificationMsg:
|
||||||
|
|
||||||
|
}
|
||||||
|
utils.SetSwitchFromOptions(msg.Options, constant.IsUnreadCount, unReadCount)
|
||||||
|
utils.SetSwitchFromOptions(msg.Options, constant.IsOfflinePush, pushSwitch)
|
||||||
|
offlineInfo.Title = title
|
||||||
|
offlineInfo.Desc = desc
|
||||||
|
offlineInfo.Ex = ex
|
||||||
|
msg.OfflinePushInfo = &offlineInfo
|
||||||
|
req.MsgData = &msg
|
||||||
|
|
||||||
|
_, err = c.msg.SendMsg(ctx, &req)
|
||||||
|
}
|
@ -1,22 +1,18 @@
|
|||||||
package msg
|
package notification
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
sdkws "Open_IM/pkg/proto/sdkws"
|
sdkws "Open_IM/pkg/proto/sdkws"
|
||||||
"Open_IM/pkg/utils"
|
|
||||||
"context"
|
"context"
|
||||||
"github.com/golang/protobuf/jsonpb"
|
"github.com/golang/protobuf/jsonpb"
|
||||||
"github.com/golang/protobuf/proto"
|
"github.com/golang/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
func SetConversationNotification(operationID, sendID, recvID string, contentType int, m proto.Message, tips sdkws.TipsComm) {
|
func (c *Check) SetConversationNotification(ctx context.Context, sendID, recvID string, contentType int, m proto.Message, tips sdkws.TipsComm) {
|
||||||
log.NewInfo(operationID, "args: ", sendID, recvID, contentType, m.String(), tips.String())
|
|
||||||
var err error
|
var err error
|
||||||
tips.Detail, err = proto.Marshal(m)
|
tips.Detail, err = proto.Marshal(m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.NewError(operationID, "Marshal failed ", err.Error(), m.String())
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
marshaler := jsonpb.Marshaler{
|
marshaler := jsonpb.Marshaler{
|
||||||
@ -31,18 +27,16 @@ func SetConversationNotification(operationID, sendID, recvID string, contentType
|
|||||||
n.ContentType = int32(contentType)
|
n.ContentType = int32(contentType)
|
||||||
n.SessionType = constant.SingleChatType
|
n.SessionType = constant.SingleChatType
|
||||||
n.MsgFrom = constant.SysMsgType
|
n.MsgFrom = constant.SysMsgType
|
||||||
n.OperationID = operationID
|
|
||||||
n.Content, err = proto.Marshal(&tips)
|
n.Content, err = proto.Marshal(&tips)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error(operationID, utils.GetSelfFuncName(), "Marshal failed ", err.Error(), tips.String())
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
Notification(&n)
|
c.Notification(ctx, &n)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetPrivate调用
|
// SetPrivate调用
|
||||||
func ConversationSetPrivateNotification(operationID, sendID, recvID string, isPrivateChat bool) {
|
func (c *Check) ConversationSetPrivateNotification(ctx context.Context, sendID, recvID string, isPrivateChat bool) {
|
||||||
log.NewInfo(operationID, utils.GetSelfFuncName())
|
|
||||||
conversationSetPrivateTips := &sdkws.ConversationSetPrivateTips{
|
conversationSetPrivateTips := &sdkws.ConversationSetPrivateTips{
|
||||||
RecvID: recvID,
|
RecvID: recvID,
|
||||||
SendID: sendID,
|
SendID: sendID,
|
||||||
@ -56,23 +50,23 @@ func ConversationSetPrivateNotification(operationID, sendID, recvID string, isPr
|
|||||||
tipsMsg = config.Config.Notification.ConversationSetPrivate.DefaultTips.CloseTips
|
tipsMsg = config.Config.Notification.ConversationSetPrivate.DefaultTips.CloseTips
|
||||||
}
|
}
|
||||||
tips.DefaultTips = tipsMsg
|
tips.DefaultTips = tipsMsg
|
||||||
SetConversationNotification(operationID, sendID, recvID, constant.ConversationPrivateChatNotification, conversationSetPrivateTips, tips)
|
c.SetConversationNotification(ctx, sendID, recvID, constant.ConversationPrivateChatNotification, conversationSetPrivateTips, tips)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 会话改变
|
// 会话改变
|
||||||
func ConversationChangeNotification(ctx context.Context, userID string) {
|
func (c *Check) ConversationChangeNotification(ctx context.Context, userID string) {
|
||||||
log.NewInfo(operationID, utils.GetSelfFuncName())
|
|
||||||
ConversationChangedTips := &sdkws.ConversationUpdateTips{
|
ConversationChangedTips := &sdkws.ConversationUpdateTips{
|
||||||
UserID: userID,
|
UserID: userID,
|
||||||
}
|
}
|
||||||
var tips sdkws.TipsComm
|
var tips sdkws.TipsComm
|
||||||
tips.DefaultTips = config.Config.Notification.ConversationOptUpdate.DefaultTips.Tips
|
tips.DefaultTips = config.Config.Notification.ConversationOptUpdate.DefaultTips.Tips
|
||||||
SetConversationNotification(operationID, userID, userID, constant.ConversationOptChangeNotification, ConversationChangedTips, tips)
|
c.SetConversationNotification(ctx, userID, userID, constant.ConversationOptChangeNotification, ConversationChangedTips, tips)
|
||||||
}
|
}
|
||||||
|
|
||||||
//会话未读数同步
|
// 会话未读数同步
|
||||||
func ConversationUnreadChangeNotification(operationID, userID, conversationID string, updateUnreadCountTime int64) {
|
func (c *Check) ConversationUnreadChangeNotification(ctx context.Context, userID, conversationID string, updateUnreadCountTime int64) {
|
||||||
log.NewInfo(operationID, utils.GetSelfFuncName())
|
|
||||||
ConversationChangedTips := &sdkws.ConversationUpdateTips{
|
ConversationChangedTips := &sdkws.ConversationUpdateTips{
|
||||||
UserID: userID,
|
UserID: userID,
|
||||||
ConversationIDList: []string{conversationID},
|
ConversationIDList: []string{conversationID},
|
||||||
@ -80,5 +74,5 @@ func ConversationUnreadChangeNotification(operationID, userID, conversationID st
|
|||||||
}
|
}
|
||||||
var tips sdkws.TipsComm
|
var tips sdkws.TipsComm
|
||||||
tips.DefaultTips = config.Config.Notification.ConversationOptUpdate.DefaultTips.Tips
|
tips.DefaultTips = config.Config.Notification.ConversationOptUpdate.DefaultTips.Tips
|
||||||
SetConversationNotification(operationID, userID, userID, constant.ConversationUnreadNotification, ConversationChangedTips, tips)
|
c.SetConversationNotification(ctx, userID, userID, constant.ConversationUnreadNotification, ConversationChangedTips, tips)
|
||||||
}
|
}
|
@ -1,18 +1,16 @@
|
|||||||
package msg
|
package notification
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/pkg/api_struct"
|
"Open_IM/pkg/apistruct"
|
||||||
"Open_IM/pkg/common/config"
|
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/log"
|
"Open_IM/pkg/common/tracelog"
|
||||||
"Open_IM/pkg/getcdv3"
|
|
||||||
"Open_IM/pkg/proto/msg"
|
"Open_IM/pkg/proto/msg"
|
||||||
sdkws "Open_IM/pkg/proto/sdkws"
|
sdkws "Open_IM/pkg/proto/sdkws"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
"context"
|
"context"
|
||||||
)
|
)
|
||||||
|
|
||||||
func ExtendMessageUpdatedNotification(operationID, sendID string, sourceID string, sessionType int32,
|
func (c *Check) ExtendMessageUpdatedNotification(ctx context.Context, sendID string, sourceID string, sessionType int32,
|
||||||
req *msg.SetMessageReactionExtensionsReq, resp *msg.SetMessageReactionExtensionsResp, isHistory bool, isReactionFromCache bool) {
|
req *msg.SetMessageReactionExtensionsReq, resp *msg.SetMessageReactionExtensionsResp, isHistory bool, isReactionFromCache bool) {
|
||||||
var m apistruct.ReactionMessageModifierNotification
|
var m apistruct.ReactionMessageModifierNotification
|
||||||
m.SourceID = req.SourceID
|
m.SourceID = req.SourceID
|
||||||
@ -25,7 +23,6 @@ func ExtendMessageUpdatedNotification(operationID, sendID string, sourceID strin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(keyMap) == 0 {
|
if len(keyMap) == 0 {
|
||||||
log.NewWarn(operationID, "all key set failed can not send notification", *req)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.SuccessReactionExtensionList = keyMap
|
m.SuccessReactionExtensionList = keyMap
|
||||||
@ -33,9 +30,9 @@ func ExtendMessageUpdatedNotification(operationID, sendID string, sourceID strin
|
|||||||
m.IsReact = resp.IsReact
|
m.IsReact = resp.IsReact
|
||||||
m.IsExternalExtensions = req.IsExternalExtensions
|
m.IsExternalExtensions = req.IsExternalExtensions
|
||||||
m.MsgFirstModifyTime = resp.MsgFirstModifyTime
|
m.MsgFirstModifyTime = resp.MsgFirstModifyTime
|
||||||
messageReactionSender(operationID, sendID, sourceID, sessionType, constant.ReactionMessageModifier, utils.StructToJsonString(m), isHistory, isReactionFromCache)
|
c.messageReactionSender(ctx, sendID, sourceID, sessionType, constant.ReactionMessageModifier, utils.StructToJsonString(m), isHistory, isReactionFromCache)
|
||||||
}
|
}
|
||||||
func ExtendMessageDeleteNotification(operationID, sendID string, sourceID string, sessionType int32,
|
func (c *Check) ExtendMessageDeleteNotification(ctx context.Context, sendID string, sourceID string, sessionType int32,
|
||||||
req *msg.DeleteMessageListReactionExtensionsReq, resp *msg.DeleteMessageListReactionExtensionsResp, isHistory bool, isReactionFromCache bool) {
|
req *msg.DeleteMessageListReactionExtensionsReq, resp *msg.DeleteMessageListReactionExtensionsResp, isHistory bool, isReactionFromCache bool) {
|
||||||
var m apistruct.ReactionMessageDeleteNotification
|
var m apistruct.ReactionMessageDeleteNotification
|
||||||
m.SourceID = req.SourceID
|
m.SourceID = req.SourceID
|
||||||
@ -48,16 +45,20 @@ func ExtendMessageDeleteNotification(operationID, sendID string, sourceID string
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(keyMap) == 0 {
|
if len(keyMap) == 0 {
|
||||||
log.NewWarn(operationID, "all key set failed can not send notification", *req)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
m.SuccessReactionExtensionList = keyMap
|
m.SuccessReactionExtensionList = keyMap
|
||||||
m.ClientMsgID = req.ClientMsgID
|
m.ClientMsgID = req.ClientMsgID
|
||||||
m.MsgFirstModifyTime = req.MsgFirstModifyTime
|
m.MsgFirstModifyTime = req.MsgFirstModifyTime
|
||||||
|
|
||||||
messageReactionSender(operationID, sendID, sourceID, sessionType, constant.ReactionMessageDeleter, utils.StructToJsonString(m), isHistory, isReactionFromCache)
|
c.messageReactionSender(ctx, sendID, sourceID, sessionType, constant.ReactionMessageDeleter, utils.StructToJsonString(m), isHistory, isReactionFromCache)
|
||||||
}
|
}
|
||||||
func messageReactionSender(operationID, sendID string, sourceID string, sessionType, contentType int32, content string, isHistory bool, isReactionFromCache bool) {
|
func (c *Check) messageReactionSender(ctx context.Context, sendID string, sourceID string, sessionType, contentType int32, content string, isHistory bool, isReactionFromCache bool) {
|
||||||
|
var err error
|
||||||
|
defer func() {
|
||||||
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "sendID", sendID, "sourceID", sourceID, "sessionType", sessionType)
|
||||||
|
}()
|
||||||
|
|
||||||
options := make(map[string]bool, 5)
|
options := make(map[string]bool, 5)
|
||||||
utils.SetSwitchFromOptions(options, constant.IsOfflinePush, false)
|
utils.SetSwitchFromOptions(options, constant.IsOfflinePush, false)
|
||||||
utils.SetSwitchFromOptions(options, constant.IsConversationUpdate, false)
|
utils.SetSwitchFromOptions(options, constant.IsConversationUpdate, false)
|
||||||
@ -69,7 +70,6 @@ func messageReactionSender(operationID, sendID string, sourceID string, sessionT
|
|||||||
utils.SetSwitchFromOptions(options, constant.IsPersistent, false)
|
utils.SetSwitchFromOptions(options, constant.IsPersistent, false)
|
||||||
}
|
}
|
||||||
pbData := msg.SendMsgReq{
|
pbData := msg.SendMsgReq{
|
||||||
OperationID: operationID,
|
|
||||||
MsgData: &sdkws.MsgData{
|
MsgData: &sdkws.MsgData{
|
||||||
SendID: sendID,
|
SendID: sendID,
|
||||||
ClientMsgID: utils.GetMsgID(sendID),
|
ClientMsgID: utils.GetMsgID(sendID),
|
||||||
@ -77,7 +77,6 @@ func messageReactionSender(operationID, sendID string, sourceID string, sessionT
|
|||||||
MsgFrom: constant.SysMsgType,
|
MsgFrom: constant.SysMsgType,
|
||||||
ContentType: contentType,
|
ContentType: contentType,
|
||||||
Content: []byte(content),
|
Content: []byte(content),
|
||||||
// ForceList: params.ForceList,
|
|
||||||
CreateTime: utils.GetCurrentTimestampByMill(),
|
CreateTime: utils.GetCurrentTimestampByMill(),
|
||||||
Options: options,
|
Options: options,
|
||||||
},
|
},
|
||||||
@ -88,15 +87,5 @@ func messageReactionSender(operationID, sendID string, sourceID string, sessionT
|
|||||||
case constant.GroupChatType, constant.SuperGroupChatType:
|
case constant.GroupChatType, constant.SuperGroupChatType:
|
||||||
pbData.MsgData.GroupID = sourceID
|
pbData.MsgData.GroupID = sourceID
|
||||||
}
|
}
|
||||||
etcdConn, err := rpc.GetConn(context.Background(), config.Config.RpcRegisterName.OpenImMsgName)
|
_, err = c.msg.SendMsg(ctx, &pbData)
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
client := msg.NewMsgClient(etcdConn)
|
|
||||||
reply, err := client.SendMsg(context.Background(), &pbData)
|
|
||||||
if err != nil {
|
|
||||||
log.NewError(operationID, "SendMsg rpc failed, ", pbData.String(), err.Error())
|
|
||||||
} else if reply.ErrCode != 0 {
|
|
||||||
log.NewError(operationID, "SendMsg rpc failed, ", pbData.String(), reply.ErrCode, reply.ErrMsg)
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,38 +1,28 @@
|
|||||||
package msg
|
package notification
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/internal/common/check"
|
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
"Open_IM/pkg/common/tracelog"
|
|
||||||
pbFriend "Open_IM/pkg/proto/friend"
|
pbFriend "Open_IM/pkg/proto/friend"
|
||||||
sdkws "Open_IM/pkg/proto/sdkws"
|
"Open_IM/pkg/proto/sdkws"
|
||||||
"Open_IM/pkg/utils"
|
|
||||||
"context"
|
"context"
|
||||||
"github.com/golang/protobuf/jsonpb"
|
"github.com/golang/protobuf/jsonpb"
|
||||||
"github.com/golang/protobuf/proto"
|
"github.com/golang/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
func getFromToUserNickname(fromUserID, toUserID string) (string, string, error) {
|
func (c *Check) getFromToUserNickname(ctx context.Context, fromUserID, toUserID string) (string, string, error) {
|
||||||
users, err := check.GetUsersInfo(context.Background(), fromUserID, toUserID)
|
users, err := c.user.GetUsersInfoMap(ctx, []string{fromUserID, toUserID}, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", nil
|
return "", "", nil
|
||||||
}
|
}
|
||||||
if users[0].UserID == fromUserID {
|
return users[fromUserID].Nickname, users[toUserID].Nickname, nil
|
||||||
return users[0].Nickname, users[1].Nickname, nil
|
|
||||||
}
|
|
||||||
return users[1].Nickname, users[0].Nickname, nil
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func friendNotification(operationID, fromUserID, toUserID string, contentType int32, m proto.Message) {
|
func (c *Check) friendNotification(ctx context.Context, fromUserID, toUserID string, contentType int32, m proto.Message) {
|
||||||
log.Info(operationID, utils.GetSelfFuncName(), "args: ", contentType)
|
|
||||||
var err error
|
var err error
|
||||||
var tips sdkws.TipsComm
|
var tips sdkws.TipsComm
|
||||||
tips.Detail, err = proto.Marshal(m)
|
tips.Detail, err = proto.Marshal(m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error(operationID, "Marshal failed ", err.Error(), m.String())
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,9 +34,8 @@ func friendNotification(operationID, fromUserID, toUserID string, contentType in
|
|||||||
|
|
||||||
tips.JsonDetail, _ = marshaler.MarshalToString(m)
|
tips.JsonDetail, _ = marshaler.MarshalToString(m)
|
||||||
|
|
||||||
fromUserNickname, toUserNickname, err := getFromToUserNickname(fromUserID, toUserID)
|
fromUserNickname, toUserNickname, err := c.getFromToUserNickname(ctx, fromUserID, toUserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error(operationID, "getFromToUserNickname failed ", err.Error(), fromUserID, toUserID)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
cn := config.Config.Notification
|
cn := config.Config.Notification
|
||||||
@ -72,7 +61,6 @@ func friendNotification(operationID, fromUserID, toUserID string, contentType in
|
|||||||
case constant.FriendInfoUpdatedNotification:
|
case constant.FriendInfoUpdatedNotification:
|
||||||
tips.DefaultTips = cn.FriendInfoUpdated.DefaultTips.Tips + toUserNickname
|
tips.DefaultTips = cn.FriendInfoUpdated.DefaultTips.Tips + toUserNickname
|
||||||
default:
|
default:
|
||||||
log.Error(operationID, "contentType failed ", contentType)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,41 +70,39 @@ func friendNotification(operationID, fromUserID, toUserID string, contentType in
|
|||||||
n.ContentType = contentType
|
n.ContentType = contentType
|
||||||
n.SessionType = constant.SingleChatType
|
n.SessionType = constant.SingleChatType
|
||||||
n.MsgFrom = constant.SysMsgType
|
n.MsgFrom = constant.SysMsgType
|
||||||
n.OperationID = operationID
|
|
||||||
n.Content, err = proto.Marshal(&tips)
|
n.Content, err = proto.Marshal(&tips)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error(operationID, "Marshal failed ", err.Error(), tips.String())
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
Notification(&n)
|
c.Notification(ctx, &n)
|
||||||
}
|
}
|
||||||
|
|
||||||
func FriendApplicationAddNotification(ctx context.Context, req *pbFriend.AddFriendReq) {
|
func (c *Check) FriendApplicationAddNotification(ctx context.Context, req *pbFriend.ApplyToAddFriendReq) {
|
||||||
FriendApplicationTips := sdkws.FriendApplicationTips{FromToUserID: &sdkws.FromToUserID{}}
|
FriendApplicationTips := sdkws.FriendApplicationTips{FromToUserID: &sdkws.FromToUserID{}}
|
||||||
FriendApplicationTips.FromToUserID.FromUserID = req.FromUserID
|
FriendApplicationTips.FromToUserID.FromUserID = req.FromUserID
|
||||||
FriendApplicationTips.FromToUserID.ToUserID = req.ToUserID
|
FriendApplicationTips.FromToUserID.ToUserID = req.ToUserID
|
||||||
friendNotification(tracelog.GetOperationID(ctx), req.FromUserID, req.ToUserID, constant.FriendApplicationNotification, &FriendApplicationTips)
|
c.friendNotification(ctx, req.FromUserID, req.ToUserID, constant.FriendApplicationNotification, &FriendApplicationTips)
|
||||||
}
|
}
|
||||||
|
|
||||||
func FriendApplicationAgreedNotification(ctx context.Context, req *pbFriend.RespondFriendApplyReq) {
|
func (c *Check) FriendApplicationAgreedNotification(ctx context.Context, req *pbFriend.RespondFriendApplyReq) {
|
||||||
FriendApplicationApprovedTips := sdkws.FriendApplicationApprovedTips{FromToUserID: &sdkws.FromToUserID{}}
|
FriendApplicationApprovedTips := sdkws.FriendApplicationApprovedTips{FromToUserID: &sdkws.FromToUserID{}}
|
||||||
FriendApplicationApprovedTips.FromToUserID.FromUserID = req.FromUserID
|
FriendApplicationApprovedTips.FromToUserID.FromUserID = req.FromUserID
|
||||||
FriendApplicationApprovedTips.FromToUserID.ToUserID = req.ToUserID
|
FriendApplicationApprovedTips.FromToUserID.ToUserID = req.ToUserID
|
||||||
FriendApplicationApprovedTips.HandleMsg = req.HandleMsg
|
FriendApplicationApprovedTips.HandleMsg = req.HandleMsg
|
||||||
friendNotification(tracelog.GetOperationID(ctx), req.ToUserID, req.FromUserID, constant.FriendApplicationApprovedNotification, &FriendApplicationApprovedTips)
|
c.friendNotification(ctx, req.ToUserID, req.FromUserID, constant.FriendApplicationApprovedNotification, &FriendApplicationApprovedTips)
|
||||||
}
|
}
|
||||||
|
|
||||||
func FriendApplicationRefusedNotification(ctx context.Context, req *pbFriend.RespondFriendApplyReq) {
|
func (c *Check) FriendApplicationRefusedNotification(ctx context.Context, req *pbFriend.RespondFriendApplyReq) {
|
||||||
FriendApplicationApprovedTips := sdkws.FriendApplicationApprovedTips{FromToUserID: &sdkws.FromToUserID{}}
|
FriendApplicationApprovedTips := sdkws.FriendApplicationApprovedTips{FromToUserID: &sdkws.FromToUserID{}}
|
||||||
FriendApplicationApprovedTips.FromToUserID.FromUserID = req.FromUserID
|
FriendApplicationApprovedTips.FromToUserID.FromUserID = req.FromUserID
|
||||||
FriendApplicationApprovedTips.FromToUserID.ToUserID = req.ToUserID
|
FriendApplicationApprovedTips.FromToUserID.ToUserID = req.ToUserID
|
||||||
FriendApplicationApprovedTips.HandleMsg = req.HandleMsg
|
FriendApplicationApprovedTips.HandleMsg = req.HandleMsg
|
||||||
friendNotification(tracelog.GetOperationID(ctx), req.ToUserID, req.FromUserID, constant.FriendApplicationRejectedNotification, &FriendApplicationApprovedTips)
|
c.friendNotification(ctx, req.ToUserID, req.FromUserID, constant.FriendApplicationRejectedNotification, &FriendApplicationApprovedTips)
|
||||||
}
|
}
|
||||||
|
|
||||||
func FriendAddedNotification(ctx context.Context, operationID, opUserID, fromUserID, toUserID string) {
|
func (c *Check) FriendAddedNotification(ctx context.Context, operationID, opUserID, fromUserID, toUserID string) {
|
||||||
friendAddedTips := sdkws.FriendAddedTips{Friend: &sdkws.FriendInfo{}, OpUser: &sdkws.PublicUserInfo{}}
|
friendAddedTips := sdkws.FriendAddedTips{Friend: &sdkws.FriendInfo{}, OpUser: &sdkws.PublicUserInfo{}}
|
||||||
user, err := check.GetUsersInfo(context.Background(), opUserID)
|
user, err := c.user.GetUsersInfos(ctx, []string{opUserID}, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -125,49 +111,43 @@ func FriendAddedNotification(ctx context.Context, operationID, opUserID, fromUse
|
|||||||
friendAddedTips.OpUser.Nickname = user[0].Nickname
|
friendAddedTips.OpUser.Nickname = user[0].Nickname
|
||||||
friendAddedTips.OpUser.FaceURL = user[0].FaceURL
|
friendAddedTips.OpUser.FaceURL = user[0].FaceURL
|
||||||
|
|
||||||
friend, err := check.GetFriendsInfo(ctx, fromUserID, toUserID)
|
friend, err := c.friend.GetFriendsInfo(ctx, fromUserID, toUserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
friendAddedTips.Friend = friend
|
friendAddedTips.Friend = friend
|
||||||
friendNotification(operationID, fromUserID, toUserID, constant.FriendAddedNotification, &friendAddedTips)
|
c.friendNotification(ctx, fromUserID, toUserID, constant.FriendAddedNotification, &friendAddedTips)
|
||||||
}
|
}
|
||||||
|
|
||||||
func FriendDeletedNotification(ctx context.Context, req *pbFriend.DeleteFriendReq) {
|
func (c *Check) FriendDeletedNotification(ctx context.Context, req *pbFriend.DeleteFriendReq) {
|
||||||
friendDeletedTips := sdkws.FriendDeletedTips{FromToUserID: &sdkws.FromToUserID{}}
|
friendDeletedTips := sdkws.FriendDeletedTips{FromToUserID: &sdkws.FromToUserID{}}
|
||||||
friendDeletedTips.FromToUserID.FromUserID = req.OwnerUserID
|
friendDeletedTips.FromToUserID.FromUserID = req.OwnerUserID
|
||||||
friendDeletedTips.FromToUserID.ToUserID = req.FriendUserID
|
friendDeletedTips.FromToUserID.ToUserID = req.FriendUserID
|
||||||
friendNotification(tracelog.GetOperationID(ctx), req.OwnerUserID, req.FriendUserID, constant.FriendDeletedNotification, &friendDeletedTips)
|
c.friendNotification(ctx, req.OwnerUserID, req.FriendUserID, constant.FriendDeletedNotification, &friendDeletedTips)
|
||||||
}
|
}
|
||||||
|
|
||||||
func FriendRemarkSetNotification(ctx context.Context, fromUserID, toUserID string) {
|
func (c *Check) FriendRemarkSetNotification(ctx context.Context, fromUserID, toUserID string) {
|
||||||
friendInfoChangedTips := sdkws.FriendInfoChangedTips{FromToUserID: &sdkws.FromToUserID{}}
|
friendInfoChangedTips := sdkws.FriendInfoChangedTips{FromToUserID: &sdkws.FromToUserID{}}
|
||||||
friendInfoChangedTips.FromToUserID.FromUserID = fromUserID
|
friendInfoChangedTips.FromToUserID.FromUserID = fromUserID
|
||||||
friendInfoChangedTips.FromToUserID.ToUserID = toUserID
|
friendInfoChangedTips.FromToUserID.ToUserID = toUserID
|
||||||
friendNotification(tracelog.GetOperationID(ctx), fromUserID, toUserID, constant.FriendRemarkSetNotification, &friendInfoChangedTips)
|
c.friendNotification(ctx, fromUserID, toUserID, constant.FriendRemarkSetNotification, &friendInfoChangedTips)
|
||||||
}
|
}
|
||||||
|
|
||||||
func BlackAddedNotification(ctx context.Context, req *pbFriend.AddBlackReq) {
|
func (c *Check) BlackAddedNotification(ctx context.Context, req *pbFriend.AddBlackReq) {
|
||||||
blackAddedTips := sdkws.BlackAddedTips{FromToUserID: &sdkws.FromToUserID{}}
|
blackAddedTips := sdkws.BlackAddedTips{FromToUserID: &sdkws.FromToUserID{}}
|
||||||
blackAddedTips.FromToUserID.FromUserID = req.OwnerUserID
|
blackAddedTips.FromToUserID.FromUserID = req.OwnerUserID
|
||||||
blackAddedTips.FromToUserID.ToUserID = req.BlackUserID
|
blackAddedTips.FromToUserID.ToUserID = req.BlackUserID
|
||||||
friendNotification(tracelog.GetOperationID(ctx), req.OwnerUserID, req.BlackUserID, constant.BlackAddedNotification, &blackAddedTips)
|
c.friendNotification(ctx, req.OwnerUserID, req.BlackUserID, constant.BlackAddedNotification, &blackAddedTips)
|
||||||
}
|
}
|
||||||
|
|
||||||
func BlackDeletedNotification(ctx context.Context, req *pbFriend.RemoveBlackReq) {
|
func (c *Check) BlackDeletedNotification(ctx context.Context, req *pbFriend.RemoveBlackReq) {
|
||||||
blackDeletedTips := sdkws.BlackDeletedTips{FromToUserID: &sdkws.FromToUserID{}}
|
blackDeletedTips := sdkws.BlackDeletedTips{FromToUserID: &sdkws.FromToUserID{}}
|
||||||
blackDeletedTips.FromToUserID.FromUserID = req.OwnerUserID
|
blackDeletedTips.FromToUserID.FromUserID = req.OwnerUserID
|
||||||
blackDeletedTips.FromToUserID.ToUserID = req.BlackUserID
|
blackDeletedTips.FromToUserID.ToUserID = req.BlackUserID
|
||||||
friendNotification(tracelog.GetOperationID(ctx), req.OwnerUserID, req.BlackUserID, constant.BlackDeletedNotification, &blackDeletedTips)
|
c.friendNotification(ctx, req.OwnerUserID, req.BlackUserID, constant.BlackDeletedNotification, &blackDeletedTips)
|
||||||
}
|
}
|
||||||
|
|
||||||
// send to myself
|
func (c *Check) FriendInfoUpdatedNotification(ctx context.Context, changedUserID string, needNotifiedUserID string, opUserID string) {
|
||||||
func UserInfoUpdatedNotification(ctx context.Context, opUserID string, changedUserID string) {
|
|
||||||
selfInfoUpdatedTips := sdkws.UserInfoUpdatedTips{UserID: changedUserID}
|
selfInfoUpdatedTips := sdkws.UserInfoUpdatedTips{UserID: changedUserID}
|
||||||
friendNotification(tracelog.GetOperationID(ctx), opUserID, changedUserID, constant.UserInfoUpdatedNotification, &selfInfoUpdatedTips)
|
c.friendNotification(ctx, opUserID, needNotifiedUserID, constant.FriendInfoUpdatedNotification, &selfInfoUpdatedTips)
|
||||||
}
|
|
||||||
|
|
||||||
func FriendInfoUpdatedNotification(ctx context.Context, changedUserID string, needNotifiedUserID string, opUserID string) {
|
|
||||||
selfInfoUpdatedTips := sdkws.UserInfoUpdatedTips{UserID: changedUserID}
|
|
||||||
friendNotification(tracelog.GetOperationID(ctx), opUserID, needNotifiedUserID, constant.FriendInfoUpdatedNotification, &selfInfoUpdatedTips)
|
|
||||||
}
|
}
|
548
internal/common/notification/group.go
Normal file
548
internal/common/notification/group.go
Normal file
@ -0,0 +1,548 @@
|
|||||||
|
package notification
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/tokenverify"
|
||||||
|
"Open_IM/pkg/common/tracelog"
|
||||||
|
pbGroup "Open_IM/pkg/proto/group"
|
||||||
|
"Open_IM/pkg/proto/sdkws"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"github.com/golang/protobuf/jsonpb"
|
||||||
|
"github.com/golang/protobuf/proto"
|
||||||
|
"google.golang.org/protobuf/types/known/wrapperspb"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (c *Check) setOpUserInfo(ctx context.Context, groupID string, groupMemberInfo *sdkws.GroupMemberFullInfo) error {
|
||||||
|
opUserID := tracelog.GetOpUserID(ctx)
|
||||||
|
if tokenverify.IsManagerUserID(opUserID) {
|
||||||
|
user, err := c.user.GetUsersInfos(ctx, []string{opUserID}, true)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
groupMemberInfo.GroupID = groupID
|
||||||
|
groupMemberInfo.UserID = user[0].UserID
|
||||||
|
groupMemberInfo.Nickname = user[0].Nickname
|
||||||
|
groupMemberInfo.AppMangerLevel = user[0].AppMangerLevel
|
||||||
|
groupMemberInfo.FaceURL = user[0].FaceURL
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
u, err := c.group.GetGroupMemberInfo(ctx, groupID, opUserID)
|
||||||
|
if err == nil {
|
||||||
|
*groupMemberInfo = *u
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
user, err := c.user.GetUsersInfos(ctx, []string{opUserID}, true)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
groupMemberInfo.GroupID = groupID
|
||||||
|
groupMemberInfo.UserID = user[0].UserID
|
||||||
|
groupMemberInfo.Nickname = user[0].Nickname
|
||||||
|
groupMemberInfo.AppMangerLevel = user[0].AppMangerLevel
|
||||||
|
groupMemberInfo.FaceURL = user[0].FaceURL
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) setGroupInfo(ctx context.Context, groupID string, groupInfo *sdkws.GroupInfo) error {
|
||||||
|
group, err := c.group.GetGroupInfos(ctx, []string{groupID}, true)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*groupInfo = *group[0]
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) setGroupMemberInfo(ctx context.Context, groupID, userID string, groupMemberInfo *sdkws.GroupMemberFullInfo) error {
|
||||||
|
groupMember, err := c.group.GetGroupMemberInfo(ctx, groupID, userID)
|
||||||
|
if err == nil {
|
||||||
|
*groupMemberInfo = *groupMember
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
user, err := c.user.GetUsersInfos(ctx, []string{userID}, true)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
groupMemberInfo.GroupID = groupID
|
||||||
|
groupMemberInfo.UserID = user[0].UserID
|
||||||
|
groupMemberInfo.Nickname = user[0].Nickname
|
||||||
|
groupMemberInfo.AppMangerLevel = user[0].AppMangerLevel
|
||||||
|
groupMemberInfo.FaceURL = user[0].FaceURL
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) setGroupOwnerInfo(ctx context.Context, groupID string, groupMemberInfo *sdkws.GroupMemberFullInfo) error {
|
||||||
|
group, err := c.group.GetGroupInfo(ctx, groupID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
groupMember, err := c.group.GetGroupMemberInfo(ctx, groupID, group.OwnerUserID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*groupMemberInfo = *groupMember
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) setPublicUserInfo(ctx context.Context, userID string, publicUserInfo *sdkws.PublicUserInfo) error {
|
||||||
|
user, err := c.user.GetPublicUserInfos(ctx, []string{userID}, true)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*publicUserInfo = *user[0]
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) groupNotification(ctx context.Context, contentType int32, m proto.Message, sendID, groupID, recvUserID string) {
|
||||||
|
var err error
|
||||||
|
var tips sdkws.TipsComm
|
||||||
|
tips.Detail, err = proto.Marshal(m)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
marshaler := jsonpb.Marshaler{
|
||||||
|
OrigName: true,
|
||||||
|
EnumsAsInts: false,
|
||||||
|
EmitDefaults: false,
|
||||||
|
}
|
||||||
|
tips.JsonDetail, _ = marshaler.MarshalToString(m)
|
||||||
|
var nickname, toNickname string
|
||||||
|
if sendID != "" {
|
||||||
|
|
||||||
|
from, err := c.user.GetUsersInfos(ctx, []string{sendID}, true)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
nickname = from[0].Nickname
|
||||||
|
}
|
||||||
|
if recvUserID != "" {
|
||||||
|
to, err := c.user.GetUsersInfos(ctx, []string{recvUserID}, true)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
toNickname = to[0].Nickname
|
||||||
|
}
|
||||||
|
|
||||||
|
cn := config.Config.Notification
|
||||||
|
switch contentType {
|
||||||
|
case constant.GroupCreatedNotification:
|
||||||
|
tips.DefaultTips = nickname + " " + cn.GroupCreated.DefaultTips.Tips
|
||||||
|
case constant.GroupInfoSetNotification:
|
||||||
|
tips.DefaultTips = nickname + " " + cn.GroupInfoSet.DefaultTips.Tips
|
||||||
|
case constant.JoinGroupApplicationNotification:
|
||||||
|
tips.DefaultTips = nickname + " " + cn.JoinGroupApplication.DefaultTips.Tips
|
||||||
|
case constant.MemberQuitNotification:
|
||||||
|
tips.DefaultTips = nickname + " " + cn.MemberQuit.DefaultTips.Tips
|
||||||
|
case constant.GroupApplicationAcceptedNotification: //
|
||||||
|
tips.DefaultTips = toNickname + " " + cn.GroupApplicationAccepted.DefaultTips.Tips
|
||||||
|
case constant.GroupApplicationRejectedNotification: //
|
||||||
|
tips.DefaultTips = toNickname + " " + cn.GroupApplicationRejected.DefaultTips.Tips
|
||||||
|
case constant.GroupOwnerTransferredNotification: //
|
||||||
|
tips.DefaultTips = toNickname + " " + cn.GroupOwnerTransferred.DefaultTips.Tips
|
||||||
|
case constant.MemberKickedNotification: //
|
||||||
|
tips.DefaultTips = toNickname + " " + cn.MemberKicked.DefaultTips.Tips
|
||||||
|
case constant.MemberInvitedNotification: //
|
||||||
|
tips.DefaultTips = toNickname + " " + cn.MemberInvited.DefaultTips.Tips
|
||||||
|
case constant.MemberEnterNotification:
|
||||||
|
tips.DefaultTips = toNickname + " " + cn.MemberEnter.DefaultTips.Tips
|
||||||
|
case constant.GroupDismissedNotification:
|
||||||
|
tips.DefaultTips = toNickname + "" + cn.GroupDismissed.DefaultTips.Tips
|
||||||
|
case constant.GroupMutedNotification:
|
||||||
|
tips.DefaultTips = toNickname + "" + cn.GroupMuted.DefaultTips.Tips
|
||||||
|
case constant.GroupCancelMutedNotification:
|
||||||
|
tips.DefaultTips = toNickname + "" + cn.GroupCancelMuted.DefaultTips.Tips
|
||||||
|
case constant.GroupMemberMutedNotification:
|
||||||
|
tips.DefaultTips = toNickname + "" + cn.GroupMemberMuted.DefaultTips.Tips
|
||||||
|
case constant.GroupMemberCancelMutedNotification:
|
||||||
|
tips.DefaultTips = toNickname + "" + cn.GroupMemberCancelMuted.DefaultTips.Tips
|
||||||
|
case constant.GroupMemberInfoSetNotification:
|
||||||
|
tips.DefaultTips = toNickname + "" + cn.GroupMemberInfoSet.DefaultTips.Tips
|
||||||
|
case constant.GroupMemberSetToAdminNotification:
|
||||||
|
tips.DefaultTips = toNickname + "" + cn.GroupMemberSetToAdmin.DefaultTips.Tips
|
||||||
|
case constant.GroupMemberSetToOrdinaryUserNotification:
|
||||||
|
tips.DefaultTips = toNickname + "" + cn.GroupMemberSetToOrdinary.DefaultTips.Tips
|
||||||
|
default:
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var n NotificationMsg
|
||||||
|
n.SendID = sendID
|
||||||
|
if groupID != "" {
|
||||||
|
n.RecvID = groupID
|
||||||
|
|
||||||
|
group, err := c.group.GetGroupInfo(ctx, groupID)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
switch group.GroupType {
|
||||||
|
case constant.NormalGroup:
|
||||||
|
n.SessionType = constant.GroupChatType
|
||||||
|
default:
|
||||||
|
n.SessionType = constant.SuperGroupChatType
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
n.RecvID = recvUserID
|
||||||
|
n.SessionType = constant.SingleChatType
|
||||||
|
}
|
||||||
|
n.ContentType = contentType
|
||||||
|
n.Content, err = proto.Marshal(&tips)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.Notification(ctx, &n)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 创建群后调用
|
||||||
|
func (c *Check) GroupCreatedNotification(ctx context.Context, groupID string, initMemberList []string) {
|
||||||
|
GroupCreatedTips := sdkws.GroupCreatedTips{Group: &sdkws.GroupInfo{},
|
||||||
|
OpUser: &sdkws.GroupMemberFullInfo{}, GroupOwnerUser: &sdkws.GroupMemberFullInfo{}}
|
||||||
|
if err := c.setOpUserInfo(ctx, groupID, GroupCreatedTips.OpUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err := c.setGroupInfo(ctx, groupID, GroupCreatedTips.Group)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := c.setGroupOwnerInfo(ctx, groupID, GroupCreatedTips.GroupOwnerUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, v := range initMemberList {
|
||||||
|
var groupMemberInfo sdkws.GroupMemberFullInfo
|
||||||
|
if err := c.setGroupMemberInfo(ctx, groupID, v, &groupMemberInfo); err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
GroupCreatedTips.MemberList = append(GroupCreatedTips.MemberList, &groupMemberInfo)
|
||||||
|
if len(GroupCreatedTips.MemberList) == constant.MaxNotificationNum {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
c.groupNotification(ctx, constant.GroupCreatedNotification, &GroupCreatedTips, tracelog.GetOpUserID(ctx), groupID, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 群信息改变后掉用
|
||||||
|
// groupName := ""
|
||||||
|
//
|
||||||
|
// notification := ""
|
||||||
|
// introduction := ""
|
||||||
|
// faceURL := ""
|
||||||
|
func (c *Check) GroupInfoSetNotification(ctx context.Context, groupID string, groupName, notification, introduction, faceURL string, needVerification *wrapperspb.Int32Value) {
|
||||||
|
GroupInfoChangedTips := sdkws.GroupInfoSetTips{Group: &sdkws.GroupInfo{}, OpUser: &sdkws.GroupMemberFullInfo{}}
|
||||||
|
if err := c.setGroupInfo(ctx, groupID, GroupInfoChangedTips.Group); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
GroupInfoChangedTips.Group.GroupName = groupName
|
||||||
|
GroupInfoChangedTips.Group.Notification = notification
|
||||||
|
GroupInfoChangedTips.Group.Introduction = introduction
|
||||||
|
GroupInfoChangedTips.Group.FaceURL = faceURL
|
||||||
|
if needVerification != nil {
|
||||||
|
GroupInfoChangedTips.Group.NeedVerification = needVerification.Value
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := c.setOpUserInfo(ctx, groupID, GroupInfoChangedTips.OpUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.groupNotification(ctx, constant.GroupInfoSetNotification, &GroupInfoChangedTips, tracelog.GetOpUserID(ctx), groupID, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) GroupMutedNotification(ctx context.Context, groupID string) {
|
||||||
|
tips := sdkws.GroupMutedTips{Group: &sdkws.GroupInfo{},
|
||||||
|
OpUser: &sdkws.GroupMemberFullInfo{}}
|
||||||
|
if err := c.setGroupInfo(ctx, groupID, tips.Group); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setOpUserInfo(ctx, groupID, tips.OpUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.groupNotification(ctx, constant.GroupMutedNotification, &tips, tracelog.GetOpUserID(ctx), groupID, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) GroupCancelMutedNotification(ctx context.Context, groupID string) {
|
||||||
|
tips := sdkws.GroupCancelMutedTips{Group: &sdkws.GroupInfo{},
|
||||||
|
OpUser: &sdkws.GroupMemberFullInfo{}}
|
||||||
|
if err := c.setGroupInfo(ctx, groupID, tips.Group); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setOpUserInfo(ctx, groupID, tips.OpUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.groupNotification(ctx, constant.GroupCancelMutedNotification, &tips, tracelog.GetOpUserID(ctx), groupID, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) GroupMemberMutedNotification(ctx context.Context, groupID, groupMemberUserID string, mutedSeconds uint32) {
|
||||||
|
tips := sdkws.GroupMemberMutedTips{Group: &sdkws.GroupInfo{},
|
||||||
|
OpUser: &sdkws.GroupMemberFullInfo{}, MutedUser: &sdkws.GroupMemberFullInfo{}}
|
||||||
|
tips.MutedSeconds = mutedSeconds
|
||||||
|
if err := c.setGroupInfo(ctx, groupID, tips.Group); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setOpUserInfo(ctx, groupID, tips.OpUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setGroupMemberInfo(ctx, groupID, groupMemberUserID, tips.MutedUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.groupNotification(ctx, constant.GroupMemberMutedNotification, &tips, tracelog.GetOpUserID(ctx), groupID, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) GroupMemberInfoSetNotification(ctx context.Context, groupID, groupMemberUserID string) {
|
||||||
|
tips := sdkws.GroupMemberInfoSetTips{Group: &sdkws.GroupInfo{},
|
||||||
|
OpUser: &sdkws.GroupMemberFullInfo{}, ChangedUser: &sdkws.GroupMemberFullInfo{}}
|
||||||
|
if err := c.setGroupInfo(ctx, groupID, tips.Group); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setOpUserInfo(ctx, groupID, tips.OpUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setGroupMemberInfo(ctx, groupID, groupMemberUserID, tips.ChangedUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.groupNotification(ctx, constant.GroupMemberInfoSetNotification, &tips, tracelog.GetOpUserID(ctx), groupID, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) GroupMemberRoleLevelChangeNotification(ctx context.Context, operationID, opUserID, groupID, groupMemberUserID string, notificationType int32) {
|
||||||
|
if notificationType != constant.GroupMemberSetToAdminNotification && notificationType != constant.GroupMemberSetToOrdinaryUserNotification {
|
||||||
|
log.NewError(operationID, utils.GetSelfFuncName(), "invalid notificationType: ", notificationType)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
tips := sdkws.GroupMemberInfoSetTips{Group: &sdkws.GroupInfo{},
|
||||||
|
OpUser: &sdkws.GroupMemberFullInfo{}, ChangedUser: &sdkws.GroupMemberFullInfo{}}
|
||||||
|
if err := c.setGroupInfo(ctx, groupID, tips.Group); err != nil {
|
||||||
|
log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setOpUserInfo(ctx, groupID, tips.OpUser); err != nil {
|
||||||
|
log.Error(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setGroupMemberInfo(ctx, groupID, groupMemberUserID, tips.ChangedUser); err != nil {
|
||||||
|
log.Error(operationID, "setGroupMemberInfo failed ", err.Error(), groupID, groupMemberUserID)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.groupNotification(ctx, notificationType, &tips, tracelog.GetOpUserID(ctx), groupID, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) GroupMemberCancelMutedNotification(ctx context.Context, groupID, groupMemberUserID string) {
|
||||||
|
tips := sdkws.GroupMemberCancelMutedTips{Group: &sdkws.GroupInfo{},
|
||||||
|
OpUser: &sdkws.GroupMemberFullInfo{}, MutedUser: &sdkws.GroupMemberFullInfo{}}
|
||||||
|
if err := c.setGroupInfo(ctx, groupID, tips.Group); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setOpUserInfo(ctx, groupID, tips.OpUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setGroupMemberInfo(ctx, groupID, groupMemberUserID, tips.MutedUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.groupNotification(ctx, constant.GroupMemberCancelMutedNotification, &tips, tracelog.GetOpUserID(ctx), groupID, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
// message ReceiveJoinApplicationTips{
|
||||||
|
// GroupInfo Group = 1;
|
||||||
|
// PublicUserInfo Applicant = 2;
|
||||||
|
// string Reason = 3;
|
||||||
|
// } apply->all managers GroupID string `protobuf:"bytes,1,opt,name=GroupID" json:"GroupID,omitempty"`
|
||||||
|
//
|
||||||
|
// ReqMessage string `protobuf:"bytes,2,opt,name=ReqMessage" json:"ReqMessage,omitempty"`
|
||||||
|
// OpUserID string `protobuf:"bytes,3,opt,name=OpUserID" json:"OpUserID,omitempty"`
|
||||||
|
// OperationID string `protobuf:"bytes,4,opt,name=OperationID" json:"OperationID,omitempty"`
|
||||||
|
//
|
||||||
|
// 申请进群后调用
|
||||||
|
func (c *Check) JoinGroupApplicationNotification(ctx context.Context, req *pbGroup.JoinGroupReq) {
|
||||||
|
JoinGroupApplicationTips := sdkws.JoinGroupApplicationTips{Group: &sdkws.GroupInfo{}, Applicant: &sdkws.PublicUserInfo{}}
|
||||||
|
err := c.setGroupInfo(ctx, req.GroupID, JoinGroupApplicationTips.Group)
|
||||||
|
if err != nil {
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err = c.setPublicUserInfo(ctx, tracelog.GetOpUserID(ctx), JoinGroupApplicationTips.Applicant); err != nil {
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
JoinGroupApplicationTips.ReqMsg = req.ReqMessage
|
||||||
|
managerList, err := c.group.GetOwnerAndAdminInfos(ctx, req.GroupID)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, v := range managerList {
|
||||||
|
c.groupNotification(ctx, constant.JoinGroupApplicationNotification, &JoinGroupApplicationTips, tracelog.GetOpUserID(ctx), "", v.UserID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) MemberQuitNotification(ctx context.Context, req *pbGroup.QuitGroupReq) {
|
||||||
|
MemberQuitTips := sdkws.MemberQuitTips{Group: &sdkws.GroupInfo{}, QuitUser: &sdkws.GroupMemberFullInfo{}}
|
||||||
|
if err := c.setGroupInfo(ctx, req.GroupID, MemberQuitTips.Group); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setOpUserInfo(ctx, req.GroupID, MemberQuitTips.QuitUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.groupNotification(ctx, constant.MemberQuitNotification, &MemberQuitTips, tracelog.GetOpUserID(ctx), req.GroupID, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
// message ApplicationProcessedTips{
|
||||||
|
// GroupInfo Group = 1;
|
||||||
|
// GroupMemberFullInfo OpUser = 2;
|
||||||
|
// int32 Result = 3;
|
||||||
|
// string Reason = 4;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// 处理进群请求后调用
|
||||||
|
func (c *Check) GroupApplicationAcceptedNotification(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) {
|
||||||
|
GroupApplicationAcceptedTips := sdkws.GroupApplicationAcceptedTips{Group: &sdkws.GroupInfo{}, OpUser: &sdkws.GroupMemberFullInfo{}, HandleMsg: req.HandledMsg}
|
||||||
|
if err := c.setGroupInfo(ctx, req.GroupID, GroupApplicationAcceptedTips.Group); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setOpUserInfo(ctx, req.GroupID, GroupApplicationAcceptedTips.OpUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
c.groupNotification(ctx, constant.GroupApplicationAcceptedNotification, &GroupApplicationAcceptedTips, tracelog.GetOpUserID(ctx), "", req.FromUserID)
|
||||||
|
adminList, err := c.group.GetOwnerAndAdminInfos(ctx, req.GroupID)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, v := range adminList {
|
||||||
|
if v.UserID == tracelog.GetOpUserID(ctx) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
GroupApplicationAcceptedTips.ReceiverAs = 1
|
||||||
|
c.groupNotification(ctx, constant.GroupApplicationAcceptedNotification, &GroupApplicationAcceptedTips, tracelog.GetOpUserID(ctx), "", v.UserID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) GroupApplicationRejectedNotification(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) {
|
||||||
|
GroupApplicationRejectedTips := sdkws.GroupApplicationRejectedTips{Group: &sdkws.GroupInfo{}, OpUser: &sdkws.GroupMemberFullInfo{}, HandleMsg: req.HandledMsg}
|
||||||
|
if err := c.setGroupInfo(ctx, req.GroupID, GroupApplicationRejectedTips.Group); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setOpUserInfo(ctx, req.GroupID, GroupApplicationRejectedTips.OpUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.groupNotification(ctx, constant.GroupApplicationRejectedNotification, &GroupApplicationRejectedTips, tracelog.GetOpUserID(ctx), "", req.FromUserID)
|
||||||
|
adminList, err := c.group.GetOwnerAndAdminInfos(ctx, req.GroupID)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, v := range adminList {
|
||||||
|
if v.UserID == tracelog.GetOpUserID(ctx) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
GroupApplicationRejectedTips.ReceiverAs = 1
|
||||||
|
c.groupNotification(ctx, constant.GroupApplicationRejectedNotification, &GroupApplicationRejectedTips, tracelog.GetOpUserID(ctx), "", v.UserID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) GroupOwnerTransferredNotification(ctx context.Context, req *pbGroup.TransferGroupOwnerReq) {
|
||||||
|
GroupOwnerTransferredTips := sdkws.GroupOwnerTransferredTips{Group: &sdkws.GroupInfo{}, OpUser: &sdkws.GroupMemberFullInfo{}, NewGroupOwner: &sdkws.GroupMemberFullInfo{}}
|
||||||
|
if err := c.setGroupInfo(ctx, req.GroupID, GroupOwnerTransferredTips.Group); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setOpUserInfo(ctx, req.GroupID, GroupOwnerTransferredTips.OpUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setGroupMemberInfo(ctx, req.GroupID, req.NewOwnerUserID, GroupOwnerTransferredTips.NewGroupOwner); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.groupNotification(ctx, constant.GroupOwnerTransferredNotification, &GroupOwnerTransferredTips, tracelog.GetOpUserID(ctx), req.GroupID, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) GroupDismissedNotification(ctx context.Context, req *pbGroup.DismissGroupReq) {
|
||||||
|
tips := sdkws.GroupDismissedTips{Group: &sdkws.GroupInfo{}, OpUser: &sdkws.GroupMemberFullInfo{}}
|
||||||
|
if err := c.setGroupInfo(ctx, req.GroupID, tips.Group); err != nil {
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setOpUserInfo(ctx, req.GroupID, tips.OpUser); err != nil {
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.groupNotification(ctx, constant.GroupDismissedNotification, &tips, tracelog.GetOpUserID(ctx), req.GroupID, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
// message MemberKickedTips{
|
||||||
|
// GroupInfo Group = 1;
|
||||||
|
// GroupMemberFullInfo OpUser = 2;
|
||||||
|
// GroupMemberFullInfo KickedUser = 3;
|
||||||
|
// uint64 OperationTime = 4;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// 被踢后调用
|
||||||
|
func (c *Check) MemberKickedNotification(ctx context.Context, req *pbGroup.KickGroupMemberReq, kickedUserIDList []string) {
|
||||||
|
MemberKickedTips := sdkws.MemberKickedTips{Group: &sdkws.GroupInfo{}, OpUser: &sdkws.GroupMemberFullInfo{}}
|
||||||
|
if err := c.setGroupInfo(ctx, req.GroupID, MemberKickedTips.Group); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setOpUserInfo(ctx, req.GroupID, MemberKickedTips.OpUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, v := range kickedUserIDList {
|
||||||
|
var groupMemberInfo sdkws.GroupMemberFullInfo
|
||||||
|
if err := c.setGroupMemberInfo(ctx, req.GroupID, v, &groupMemberInfo); err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
MemberKickedTips.KickedUserList = append(MemberKickedTips.KickedUserList, &groupMemberInfo)
|
||||||
|
}
|
||||||
|
c.groupNotification(ctx, constant.MemberKickedNotification, &MemberKickedTips, tracelog.GetOpUserID(ctx), req.GroupID, "")
|
||||||
|
//
|
||||||
|
//for _, v := range kickedUserIDList {
|
||||||
|
// groupNotification(constant.MemberKickedNotification, &MemberKickedTips, req.OpUserID, "", v, req.OperationID)
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
|
||||||
|
// message MemberInvitedTips{
|
||||||
|
// GroupInfo Group = 1;
|
||||||
|
// GroupMemberFullInfo OpUser = 2;
|
||||||
|
// GroupMemberFullInfo InvitedUser = 3;
|
||||||
|
// uint64 OperationTime = 4;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// 被邀请进群后调用
|
||||||
|
func (c *Check) MemberInvitedNotification(ctx context.Context, groupID, reason string, invitedUserIDList []string) {
|
||||||
|
MemberInvitedTips := sdkws.MemberInvitedTips{Group: &sdkws.GroupInfo{}, OpUser: &sdkws.GroupMemberFullInfo{}}
|
||||||
|
if err := c.setGroupInfo(ctx, groupID, MemberInvitedTips.Group); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setOpUserInfo(ctx, groupID, MemberInvitedTips.OpUser); err != nil {
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, v := range invitedUserIDList {
|
||||||
|
var groupMemberInfo sdkws.GroupMemberFullInfo
|
||||||
|
if err := c.setGroupMemberInfo(ctx, groupID, v, &groupMemberInfo); err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
MemberInvitedTips.InvitedUserList = append(MemberInvitedTips.InvitedUserList, &groupMemberInfo)
|
||||||
|
}
|
||||||
|
c.groupNotification(ctx, constant.MemberInvitedNotification, &MemberInvitedTips, tracelog.GetOpUserID(ctx), groupID, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
// 群成员主动申请进群,管理员同意后调用,
|
||||||
|
func (c *Check) MemberEnterNotification(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) {
|
||||||
|
MemberEnterTips := sdkws.MemberEnterTips{Group: &sdkws.GroupInfo{}, EntrantUser: &sdkws.GroupMemberFullInfo{}}
|
||||||
|
if err := c.setGroupInfo(ctx, req.GroupID, MemberEnterTips.Group); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setGroupMemberInfo(ctx, req.GroupID, req.FromUserID, MemberEnterTips.EntrantUser); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.groupNotification(ctx, constant.MemberEnterNotification, &MemberEnterTips, tracelog.GetOpUserID(ctx), req.GroupID, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) MemberEnterDirectlyNotification(ctx context.Context, groupID string, entrantUserID string, operationID string) {
|
||||||
|
MemberEnterTips := sdkws.MemberEnterTips{Group: &sdkws.GroupInfo{}, EntrantUser: &sdkws.GroupMemberFullInfo{}}
|
||||||
|
if err := c.setGroupInfo(ctx, groupID, MemberEnterTips.Group); err != nil {
|
||||||
|
log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID, MemberEnterTips.Group)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err := c.setGroupMemberInfo(ctx, groupID, entrantUserID, MemberEnterTips.EntrantUser); err != nil {
|
||||||
|
log.Error(operationID, "setGroupMemberInfo failed ", err.Error(), groupID, entrantUserID, MemberEnterTips.EntrantUser)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.groupNotification(ctx, constant.MemberEnterNotification, &MemberEnterTips, entrantUserID, groupID, "")
|
||||||
|
}
|
42
internal/common/notification/msg.go
Normal file
42
internal/common/notification/msg.go
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
package notification
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/proto/sdkws"
|
||||||
|
"context"
|
||||||
|
"github.com/golang/protobuf/jsonpb"
|
||||||
|
"github.com/golang/protobuf/proto"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (c *Check) DeleteMessageNotification(ctx context.Context, userID string, seqList []uint32, operationID string) {
|
||||||
|
DeleteMessageTips := sdkws.DeleteMessageTips{UserID: userID, SeqList: seqList}
|
||||||
|
c.MessageNotification(ctx, userID, userID, constant.DeleteMessageNotification, &DeleteMessageTips)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Check) MessageNotification(ctx context.Context, sendID, recvID string, contentType int32, m proto.Message) {
|
||||||
|
var err error
|
||||||
|
var tips sdkws.TipsComm
|
||||||
|
tips.Detail, err = proto.Marshal(m)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
marshaler := jsonpb.Marshaler{
|
||||||
|
OrigName: true,
|
||||||
|
EnumsAsInts: false,
|
||||||
|
EmitDefaults: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
tips.JsonDetail, _ = marshaler.MarshalToString(m)
|
||||||
|
var n NotificationMsg
|
||||||
|
n.SendID = sendID
|
||||||
|
n.RecvID = recvID
|
||||||
|
n.ContentType = contentType
|
||||||
|
n.SessionType = constant.SingleChatType
|
||||||
|
n.MsgFrom = constant.SysMsgType
|
||||||
|
n.Content, err = proto.Marshal(&tips)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
c.Notification(ctx, &n)
|
||||||
|
}
|
@ -1,23 +1,19 @@
|
|||||||
package msg
|
package notification
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/log"
|
"context"
|
||||||
//sdk "Open_IM/pkg/proto/sdkws"
|
|
||||||
"Open_IM/pkg/utils"
|
|
||||||
//"github.com/golang/protobuf/jsonpb"
|
//"github.com/golang/protobuf/jsonpb"
|
||||||
//"github.com/golang/protobuf/proto"
|
//"github.com/golang/protobuf/proto"
|
||||||
)
|
)
|
||||||
|
|
||||||
func SuperGroupNotification(operationID, sendID, recvID string) {
|
func (c *Check) SuperGroupNotification(ctx context.Context, sendID, recvID string) {
|
||||||
n := &NotificationMsg{
|
n := &NotificationMsg{
|
||||||
SendID: sendID,
|
SendID: sendID,
|
||||||
RecvID: recvID,
|
RecvID: recvID,
|
||||||
MsgFrom: constant.SysMsgType,
|
MsgFrom: constant.SysMsgType,
|
||||||
ContentType: constant.SuperGroupUpdateNotification,
|
ContentType: constant.SuperGroupUpdateNotification,
|
||||||
SessionType: constant.SingleChatType,
|
SessionType: constant.SingleChatType,
|
||||||
OperationID: operationID,
|
|
||||||
}
|
}
|
||||||
log.NewInfo(operationID, utils.GetSelfFuncName(), string(n.Content))
|
c.Notification(ctx, n)
|
||||||
Notification(n)
|
|
||||||
}
|
}
|
13
internal/common/notification/user.go
Normal file
13
internal/common/notification/user.go
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
package notification
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/proto/sdkws"
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
// send to myself
|
||||||
|
func (c *Check) UserInfoUpdatedNotification(ctx context.Context, opUserID string, changedUserID string) {
|
||||||
|
selfInfoUpdatedTips := sdkws.UserInfoUpdatedTips{UserID: changedUserID}
|
||||||
|
c.friendNotification(ctx, opUserID, changedUserID, constant.UserInfoUpdatedNotification, &selfInfoUpdatedTips)
|
||||||
|
}
|
@ -1,89 +1,155 @@
|
|||||||
package msggateway
|
package msggateway
|
||||||
|
|
||||||
import (
|
import (
|
||||||
cbApi "Open_IM/pkg/callback_struct"
|
cbapi "Open_IM/pkg/callbackstruct"
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/http"
|
"Open_IM/pkg/common/http"
|
||||||
http2 "net/http"
|
"Open_IM/pkg/common/tracelog"
|
||||||
|
"context"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func callbackUserOnline(operationID, userID string, platformID int, token string, isAppBackground bool, connID string) cbApi.CommonCallbackResp {
|
func url() string {
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: operationID}
|
return config.Config.Callback.CallbackUrl
|
||||||
|
}
|
||||||
|
|
||||||
|
func CallbackUserOnline(ctx context.Context, userID string, platformID int, isAppBackground bool, connID string) error {
|
||||||
if !config.Config.Callback.CallbackUserOnline.Enable {
|
if !config.Config.Callback.CallbackUserOnline.Enable {
|
||||||
return callbackResp
|
return nil
|
||||||
}
|
}
|
||||||
callbackUserOnlineReq := cbApi.CallbackUserOnlineReq{
|
req := cbapi.CallbackUserOnlineReq{
|
||||||
Token: token,
|
UserStatusCallbackReq: cbapi.UserStatusCallbackReq{
|
||||||
UserStatusCallbackReq: cbApi.UserStatusCallbackReq{
|
UserStatusBaseCallback: cbapi.UserStatusBaseCallback{
|
||||||
UserStatusBaseCallback: cbApi.UserStatusBaseCallback{
|
|
||||||
CallbackCommand: constant.CallbackUserOnlineCommand,
|
CallbackCommand: constant.CallbackUserOnlineCommand,
|
||||||
OperationID: operationID,
|
OperationID: tracelog.GetOperationID(ctx),
|
||||||
PlatformID: int32(platformID),
|
PlatformID: platformID,
|
||||||
Platform: constant.PlatformIDToName(platformID),
|
Platform: constant.PlatformIDToName(platformID),
|
||||||
},
|
},
|
||||||
UserID: userID,
|
UserID: userID,
|
||||||
},
|
},
|
||||||
Seq: int(time.Now().UnixNano() / 1e6),
|
Seq: time.Now().UnixMilli(),
|
||||||
IsAppBackground: isAppBackground,
|
IsAppBackground: isAppBackground,
|
||||||
ConnID: connID,
|
ConnID: connID,
|
||||||
}
|
}
|
||||||
callbackUserOnlineResp := &cbApi.CallbackUserOnlineResp{CommonCallbackResp: &callbackResp}
|
resp := cbapi.CommonCallbackResp{}
|
||||||
if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackUserOnlineCommand, callbackUserOnlineReq, callbackUserOnlineResp, config.Config.Callback.CallbackUserOnline.CallbackTimeOut); err != nil {
|
return http.CallBackPostReturn(url(), &req, &resp, config.Config.Callback.CallbackUserOnline)
|
||||||
callbackResp.ErrCode = http2.StatusInternalServerError
|
|
||||||
callbackResp.ErrMsg = err.Error()
|
|
||||||
}
|
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func callbackUserOffline(operationID, userID string, platformID int, connID string) cbApi.CommonCallbackResp {
|
func CallbackUserOffline(ctx context.Context, userID string, platformID int, connID string) error {
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: operationID}
|
|
||||||
if !config.Config.Callback.CallbackUserOffline.Enable {
|
if !config.Config.Callback.CallbackUserOffline.Enable {
|
||||||
return callbackResp
|
return nil
|
||||||
}
|
}
|
||||||
callbackOfflineReq := cbApi.CallbackUserOfflineReq{
|
req := &cbapi.CallbackUserOfflineReq{
|
||||||
UserStatusCallbackReq: cbApi.UserStatusCallbackReq{
|
UserStatusCallbackReq: cbapi.UserStatusCallbackReq{
|
||||||
UserStatusBaseCallback: cbApi.UserStatusBaseCallback{
|
UserStatusBaseCallback: cbapi.UserStatusBaseCallback{
|
||||||
CallbackCommand: constant.CallbackUserOfflineCommand,
|
CallbackCommand: constant.CallbackUserOfflineCommand,
|
||||||
OperationID: operationID,
|
OperationID: tracelog.GetOperationID(ctx),
|
||||||
PlatformID: int32(platformID),
|
PlatformID: platformID,
|
||||||
Platform: constant.PlatformIDToName(platformID),
|
Platform: constant.PlatformIDToName(platformID),
|
||||||
},
|
},
|
||||||
UserID: userID,
|
UserID: userID,
|
||||||
},
|
},
|
||||||
Seq: int(time.Now().UnixNano() / 1e6),
|
Seq: time.Now().UnixMilli(),
|
||||||
ConnID: connID,
|
ConnID: connID,
|
||||||
}
|
}
|
||||||
callbackUserOfflineResp := &cbApi.CallbackUserOfflineResp{CommonCallbackResp: &callbackResp}
|
resp := &cbapi.CallbackUserOfflineResp{}
|
||||||
if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackUserOfflineCommand, callbackOfflineReq, callbackUserOfflineResp, config.Config.Callback.CallbackUserOffline.CallbackTimeOut); err != nil {
|
return http.CallBackPostReturn(url(), req, resp, config.Config.Callback.CallbackUserOffline)
|
||||||
callbackResp.ErrCode = http2.StatusInternalServerError
|
|
||||||
callbackResp.ErrMsg = err.Error()
|
|
||||||
}
|
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func callbackUserKickOff(operationID string, userID string, platformID int) cbApi.CommonCallbackResp {
|
func CallbackUserKickOff(ctx context.Context, userID string, platformID int) error {
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: operationID}
|
|
||||||
if !config.Config.Callback.CallbackUserKickOff.Enable {
|
if !config.Config.Callback.CallbackUserKickOff.Enable {
|
||||||
return callbackResp
|
return nil
|
||||||
}
|
}
|
||||||
callbackUserKickOffReq := cbApi.CallbackUserKickOffReq{
|
req := &cbapi.CallbackUserKickOffReq{
|
||||||
UserStatusCallbackReq: cbApi.UserStatusCallbackReq{
|
UserStatusCallbackReq: cbapi.UserStatusCallbackReq{
|
||||||
UserStatusBaseCallback: cbApi.UserStatusBaseCallback{
|
UserStatusBaseCallback: cbapi.UserStatusBaseCallback{
|
||||||
CallbackCommand: constant.CallbackUserKickOffCommand,
|
CallbackCommand: constant.CallbackUserKickOffCommand,
|
||||||
OperationID: operationID,
|
OperationID: tracelog.GetOperationID(ctx),
|
||||||
PlatformID: int32(platformID),
|
PlatformID: platformID,
|
||||||
Platform: constant.PlatformIDToName(platformID),
|
Platform: constant.PlatformIDToName(platformID),
|
||||||
},
|
},
|
||||||
UserID: userID,
|
UserID: userID,
|
||||||
},
|
},
|
||||||
Seq: int(time.Now().UnixNano() / 1e6),
|
Seq: time.Now().UnixMilli(),
|
||||||
}
|
}
|
||||||
callbackUserKickOffResp := &cbApi.CallbackUserKickOffResp{CommonCallbackResp: &callbackResp}
|
resp := &cbapi.CommonCallbackResp{}
|
||||||
if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackUserKickOffCommand, callbackUserKickOffReq, callbackUserKickOffResp, config.Config.Callback.CallbackUserOffline.CallbackTimeOut); err != nil {
|
return http.CallBackPostReturn(url(), req, resp, config.Config.Callback.CallbackUserOffline)
|
||||||
callbackResp.ErrCode = http2.StatusInternalServerError
|
|
||||||
callbackResp.ErrMsg = err.Error()
|
|
||||||
}
|
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//func callbackUserOnline(operationID, userID string, platformID int, token string, isAppBackground bool, connID string) cbApi.CommonCallbackResp {
|
||||||
|
// callbackResp := cbApi.CommonCallbackResp{OperationID: operationID}
|
||||||
|
// if !config.Config.Callback.CallbackUserOnline.Enable {
|
||||||
|
// return callbackResp
|
||||||
|
// }
|
||||||
|
// callbackUserOnlineReq := cbApi.CallbackUserOnlineReq{
|
||||||
|
// Token: token,
|
||||||
|
// UserStatusCallbackReq: cbApi.UserStatusCallbackReq{
|
||||||
|
// UserStatusBaseCallback: cbApi.UserStatusBaseCallback{
|
||||||
|
// CallbackCommand: constant.CallbackUserOnlineCommand,
|
||||||
|
// OperationID: operationID,
|
||||||
|
// PlatformID: int32(platformID),
|
||||||
|
// Platform: constant.PlatformIDToName(platformID),
|
||||||
|
// },
|
||||||
|
// UserID: userID,
|
||||||
|
// },
|
||||||
|
// Seq: int(time.Now().UnixNano() / 1e6),
|
||||||
|
// IsAppBackground: isAppBackground,
|
||||||
|
// ConnID: connID,
|
||||||
|
// }
|
||||||
|
// callbackUserOnlineResp := &cbApi.CallbackUserOnlineResp{CommonCallbackResp: &callbackResp}
|
||||||
|
// if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackUserOnlineCommand, callbackUserOnlineReq, callbackUserOnlineResp, config.Config.Callback.CallbackUserOnline.CallbackTimeOut); err != nil {
|
||||||
|
// callbackResp.ErrCode = http2.StatusInternalServerError
|
||||||
|
// callbackResp.ErrMsg = err.Error()
|
||||||
|
// }
|
||||||
|
// return callbackResp
|
||||||
|
//}
|
||||||
|
//func callbackUserOffline(operationID, userID string, platformID int, connID string) cbApi.CommonCallbackResp {
|
||||||
|
// callbackResp := cbApi.CommonCallbackResp{OperationID: operationID}
|
||||||
|
// if !config.Config.Callback.CallbackUserOffline.Enable {
|
||||||
|
// return callbackResp
|
||||||
|
// }
|
||||||
|
// callbackOfflineReq := cbApi.CallbackUserOfflineReq{
|
||||||
|
// UserStatusCallbackReq: cbApi.UserStatusCallbackReq{
|
||||||
|
// UserStatusBaseCallback: cbApi.UserStatusBaseCallback{
|
||||||
|
// CallbackCommand: constant.CallbackUserOfflineCommand,
|
||||||
|
// OperationID: operationID,
|
||||||
|
// PlatformID: int32(platformID),
|
||||||
|
// Platform: constant.PlatformIDToName(platformID),
|
||||||
|
// },
|
||||||
|
// UserID: userID,
|
||||||
|
// },
|
||||||
|
// Seq: int(time.Now().UnixNano() / 1e6),
|
||||||
|
// ConnID: connID,
|
||||||
|
// }
|
||||||
|
// callbackUserOfflineResp := &cbApi.CallbackUserOfflineResp{CommonCallbackResp: &callbackResp}
|
||||||
|
// if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackUserOfflineCommand, callbackOfflineReq, callbackUserOfflineResp, config.Config.Callback.CallbackUserOffline.CallbackTimeOut); err != nil {
|
||||||
|
// callbackResp.ErrCode = http2.StatusInternalServerError
|
||||||
|
// callbackResp.ErrMsg = err.Error()
|
||||||
|
// }
|
||||||
|
// return callbackResp
|
||||||
|
//}
|
||||||
|
//func callbackUserKickOff(operationID string, userID string, platformID int) cbApi.CommonCallbackResp {
|
||||||
|
// callbackResp := cbApi.CommonCallbackResp{OperationID: operationID}
|
||||||
|
// if !config.Config.Callback.CallbackUserKickOff.Enable {
|
||||||
|
// return callbackResp
|
||||||
|
// }
|
||||||
|
// callbackUserKickOffReq := cbApi.CallbackUserKickOffReq{
|
||||||
|
// UserStatusCallbackReq: cbApi.UserStatusCallbackReq{
|
||||||
|
// UserStatusBaseCallback: cbApi.UserStatusBaseCallback{
|
||||||
|
// CallbackCommand: constant.CallbackUserKickOffCommand,
|
||||||
|
// OperationID: operationID,
|
||||||
|
// PlatformID: int32(platformID),
|
||||||
|
// Platform: constant.PlatformIDToName(platformID),
|
||||||
|
// },
|
||||||
|
// UserID: userID,
|
||||||
|
// },
|
||||||
|
// Seq: int(time.Now().UnixNano() / 1e6),
|
||||||
|
// }
|
||||||
|
// callbackUserKickOffResp := &cbApi.CallbackUserKickOffResp{CommonCallbackResp: &callbackResp}
|
||||||
|
// if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackUserKickOffCommand, callbackUserKickOffReq, callbackUserKickOffResp, config.Config.Callback.CallbackUserOffline.CallbackTimeOut); err != nil {
|
||||||
|
// callbackResp.ErrCode = http2.StatusInternalServerError
|
||||||
|
// callbackResp.ErrMsg = err.Error()
|
||||||
|
// }
|
||||||
|
// return callbackResp
|
||||||
|
//}
|
||||||
|
148
internal/msggateway/new/client.go
Normal file
148
internal/msggateway/new/client.go
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
package new
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
promePkg "Open_IM/pkg/common/prometheus"
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"github.com/envoyproxy/protoc-gen-validate/validate"
|
||||||
|
"github.com/go-playground/validator/v10"
|
||||||
|
"open_im_sdk/pkg/log"
|
||||||
|
"open_im_sdk/pkg/utils"
|
||||||
|
"runtime/debug"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
// MessageText is for UTF-8 encoded text messages like JSON.
|
||||||
|
MessageText = iota + 1
|
||||||
|
// MessageBinary is for binary messages like protobufs.
|
||||||
|
MessageBinary
|
||||||
|
// CloseMessage denotes a close control message. The optional message
|
||||||
|
// payload contains a numeric code and text. Use the FormatCloseMessage
|
||||||
|
// function to format a close message payload.
|
||||||
|
CloseMessage = 8
|
||||||
|
|
||||||
|
// PingMessage denotes a ping control message. The optional message payload
|
||||||
|
// is UTF-8 encoded text.
|
||||||
|
PingMessage = 9
|
||||||
|
|
||||||
|
// PongMessage denotes a pong control message. The optional message payload
|
||||||
|
// is UTF-8 encoded text.
|
||||||
|
PongMessage = 10
|
||||||
|
)
|
||||||
|
|
||||||
|
type Client struct {
|
||||||
|
w *sync.Mutex
|
||||||
|
conn LongConn
|
||||||
|
PlatformID int32
|
||||||
|
PushedMaxSeq uint32
|
||||||
|
IsCompress bool
|
||||||
|
userID string
|
||||||
|
IsBackground bool
|
||||||
|
token string
|
||||||
|
connID string
|
||||||
|
onlineAt int64 // 上线时间戳(毫秒)
|
||||||
|
handler MessageHandler
|
||||||
|
unregisterChan chan *Client
|
||||||
|
compressor Compressor
|
||||||
|
encoder Encoder
|
||||||
|
userContext UserConnContext
|
||||||
|
validate *validator.Validate
|
||||||
|
}
|
||||||
|
|
||||||
|
func newClient( conn LongConn,isCompress bool, userID string, isBackground bool, token string,
|
||||||
|
connID string, onlineAt int64, handler MessageHandler,unregisterChan chan *Client) *Client {
|
||||||
|
return &Client{
|
||||||
|
conn: conn,
|
||||||
|
IsCompress: isCompress,
|
||||||
|
userID: userID, IsBackground:
|
||||||
|
isBackground, token: token,
|
||||||
|
connID: connID,
|
||||||
|
onlineAt: onlineAt,
|
||||||
|
handler: handler,
|
||||||
|
unregisterChan: unregisterChan,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func(c *Client) readMessage(){
|
||||||
|
defer func() {
|
||||||
|
if r:=recover(); r != nil {
|
||||||
|
fmt.Println("socket have panic err:", r, string(debug.Stack()))
|
||||||
|
}
|
||||||
|
//c.close()
|
||||||
|
}()
|
||||||
|
var returnErr error
|
||||||
|
for {
|
||||||
|
messageType, message, returnErr := c.conn.ReadMessage()
|
||||||
|
if returnErr!=nil{
|
||||||
|
break
|
||||||
|
}
|
||||||
|
switch messageType {
|
||||||
|
case PingMessage:
|
||||||
|
case PongMessage:
|
||||||
|
case CloseMessage:
|
||||||
|
return
|
||||||
|
case MessageText:
|
||||||
|
case MessageBinary:
|
||||||
|
if len(message) == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
returnErr = c.handleMessage(message)
|
||||||
|
if returnErr!=nil{
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
func (c *Client) handleMessage(message []byte)error {
|
||||||
|
if c.IsCompress {
|
||||||
|
var decompressErr error
|
||||||
|
message,decompressErr = c.compressor.DeCompress(message)
|
||||||
|
if decompressErr != nil {
|
||||||
|
return utils.Wrap(decompressErr,"")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var binaryReq Req
|
||||||
|
err := c.encoder.Decode(message, &binaryReq)
|
||||||
|
if err != nil {
|
||||||
|
return utils.Wrap(err,"")
|
||||||
|
}
|
||||||
|
if err := c.validate.Struct(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,"operationID",binaryReq.OperationID)
|
||||||
|
ctx = context.WithValue(ctx,"userID",binaryReq.SendID)
|
||||||
|
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:
|
||||||
|
resp,messageErr=c.handler.SetUserDeviceBackground(ctx,binaryReq)
|
||||||
|
default:
|
||||||
|
return errors.New(fmt.Sprintf("ReqIdentifier failed,sendID:%d,msgIncr:%s,reqIdentifier:%s",binaryReq.SendID,binaryReq.MsgIncr,binaryReq.ReqIdentifier))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
func (c *Client) close() {
|
||||||
|
|
||||||
|
}
|
||||||
|
func () {
|
||||||
|
|
||||||
|
}
|
44
internal/msggateway/new/compressor.go
Normal file
44
internal/msggateway/new/compressor.go
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
package new
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"compress/gzip"
|
||||||
|
"io/ioutil"
|
||||||
|
"open_im_sdk/pkg/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Compressor interface {
|
||||||
|
Compress(rawData []byte) ([]byte, error)
|
||||||
|
DeCompress(compressedData []byte) ([]byte, error)
|
||||||
|
}
|
||||||
|
type GzipCompressor struct {
|
||||||
|
compressProtocol string
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewGzipCompressor() *GzipCompressor {
|
||||||
|
return &GzipCompressor{compressProtocol: "gzip"}
|
||||||
|
}
|
||||||
|
func (g *GzipCompressor) Compress(rawData []byte) ([]byte, error) {
|
||||||
|
gzipBuffer := bytes.Buffer{}
|
||||||
|
gz := gzip.NewWriter(&gzipBuffer)
|
||||||
|
if _, err := gz.Write(rawData); err != nil {
|
||||||
|
return nil, utils.Wrap(err, "")
|
||||||
|
}
|
||||||
|
if err := gz.Close(); err != nil {
|
||||||
|
return nil, utils.Wrap(err, "")
|
||||||
|
}
|
||||||
|
return gzipBuffer.Bytes(), nil
|
||||||
|
}
|
||||||
|
func (g *GzipCompressor) DeCompress(compressedData []byte) ([]byte, error) {
|
||||||
|
buff := bytes.NewBuffer(compressedData)
|
||||||
|
reader, err := gzip.NewReader(buff)
|
||||||
|
if err != nil {
|
||||||
|
return nil, utils.Wrap(err, "NewReader failed")
|
||||||
|
}
|
||||||
|
compressedData, err = ioutil.ReadAll(reader)
|
||||||
|
if err != nil {
|
||||||
|
return nil, utils.Wrap(err, "ReadAll failed")
|
||||||
|
}
|
||||||
|
_ = reader.Close()
|
||||||
|
return compressedData, nil
|
||||||
|
}
|
27
internal/msggateway/new/context.go
Normal file
27
internal/msggateway/new/context.go
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
package new
|
||||||
|
|
||||||
|
import "net/http"
|
||||||
|
|
||||||
|
type UserConnContext struct {
|
||||||
|
RespWriter http.ResponseWriter
|
||||||
|
Req *http.Request
|
||||||
|
Path string
|
||||||
|
Method string
|
||||||
|
RemoteAddr string
|
||||||
|
}
|
||||||
|
|
||||||
|
func newContext(respWriter http.ResponseWriter, req *http.Request) *UserConnContext {
|
||||||
|
return &UserConnContext{
|
||||||
|
RespWriter: respWriter,
|
||||||
|
Req: req,
|
||||||
|
Path: req.URL.Path,
|
||||||
|
Method: req.Method,
|
||||||
|
RemoteAddr: req.RemoteAddr,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func (c *UserConnContext) Query(key string) string {
|
||||||
|
return c.Req.URL.Query().Get(key)
|
||||||
|
}
|
||||||
|
func (c *UserConnContext) GetHeader(key string) string {
|
||||||
|
return c.Req.Header.Get(key)
|
||||||
|
}
|
37
internal/msggateway/new/encoder.go
Normal file
37
internal/msggateway/new/encoder.go
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package new
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/gob"
|
||||||
|
"open_im_sdk/pkg/utils"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Encoder interface {
|
||||||
|
Encode(data interface{}) ([]byte, error)
|
||||||
|
Decode(encodeData []byte, decodeData interface{}) error
|
||||||
|
}
|
||||||
|
|
||||||
|
type GobEncoder struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewGobEncoder() *GobEncoder {
|
||||||
|
return &GobEncoder{}
|
||||||
|
}
|
||||||
|
func (g *GobEncoder) Encode(data interface{}) ([]byte, error) {
|
||||||
|
buff := bytes.Buffer{}
|
||||||
|
enc := gob.NewEncoder(&buff)
|
||||||
|
err := enc.Encode(data)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return buff.Bytes(), nil
|
||||||
|
}
|
||||||
|
func (g *GobEncoder) Decode(encodeData []byte, decodeData interface{}) error {
|
||||||
|
buff := bytes.NewBuffer(encodeData)
|
||||||
|
dec := gob.NewDecoder(buff)
|
||||||
|
err := dec.Decode(decodeData)
|
||||||
|
if err != nil {
|
||||||
|
return utils.Wrap(err, "")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
83
internal/msggateway/new/long_conn.go
Normal file
83
internal/msggateway/new/long_conn.go
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
package new
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/gorilla/websocket"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type LongConn interface {
|
||||||
|
//Close this connection
|
||||||
|
Close() error
|
||||||
|
//Write message to connection,messageType means data type,can be set binary(2) and text(1).
|
||||||
|
WriteMessage(messageType int, message []byte) error
|
||||||
|
//Read message from connection.
|
||||||
|
ReadMessage() (int, []byte, error)
|
||||||
|
//SetReadTimeout sets the read deadline on the underlying network connection,
|
||||||
|
//after a read has timed out, will return an error.
|
||||||
|
SetReadTimeout(timeout int) error
|
||||||
|
//SetWriteTimeout sets the write deadline when send message,when read has timed out,will return error.
|
||||||
|
SetWriteTimeout(timeout int) error
|
||||||
|
//Try to dial a connection,url must set auth args,header can control compress data
|
||||||
|
Dial(urlStr string, requestHeader http.Header) (*http.Response, error)
|
||||||
|
//Whether the connection of the current long connection is nil
|
||||||
|
IsNil() bool
|
||||||
|
//Set the connection of the current long connection to nil
|
||||||
|
SetConnNil()
|
||||||
|
//Check the connection of the current and when it was sent are the same
|
||||||
|
CheckSendConnDiffNow() bool
|
||||||
|
}
|
||||||
|
type GWebSocket struct {
|
||||||
|
protocolType int
|
||||||
|
conn *websocket.Conn
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewDefault(protocolType int) *GWebSocket {
|
||||||
|
return &GWebSocket{protocolType: protocolType}
|
||||||
|
}
|
||||||
|
func (d *GWebSocket) Close() error {
|
||||||
|
return d.conn.Close()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *GWebSocket) WriteMessage(messageType int, message []byte) error {
|
||||||
|
d.setSendConn(d.conn)
|
||||||
|
return d.conn.WriteMessage(messageType, message)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *GWebSocket) setSendConn(sendConn *websocket.Conn) {
|
||||||
|
d.sendConn = sendConn
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *GWebSocket) ReadMessage() (int, []byte, error) {
|
||||||
|
return d.conn.ReadMessage()
|
||||||
|
}
|
||||||
|
func (d *GWebSocket) SetReadTimeout(timeout int) error {
|
||||||
|
return d.conn.SetReadDeadline(time.Now().Add(time.Duration(timeout) * time.Second))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *GWebSocket) SetWriteTimeout(timeout int) error {
|
||||||
|
return d.conn.SetWriteDeadline(time.Now().Add(time.Duration(timeout) * time.Second))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *GWebSocket) Dial(urlStr string, requestHeader http.Header) (*http.Response, error) {
|
||||||
|
conn, httpResp, err := websocket.DefaultDialer.Dial(urlStr, requestHeader)
|
||||||
|
if err == nil {
|
||||||
|
d.conn = conn
|
||||||
|
}
|
||||||
|
return httpResp, err
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *GWebSocket) IsNil() bool {
|
||||||
|
if d.conn != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func (d *GWebSocket) SetConnNil() {
|
||||||
|
d.conn = nil
|
||||||
|
}
|
||||||
|
func (d *GWebSocket) CheckSendConnDiffNow() bool {
|
||||||
|
return d.conn == d.sendConn
|
||||||
|
}
|
49
internal/msggateway/new/message_handler.go
Normal file
49
internal/msggateway/new/message_handler.go
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package new
|
||||||
|
|
||||||
|
import "context"
|
||||||
|
|
||||||
|
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 MessageHandler interface {
|
||||||
|
GetSeq(context context.Context, data Req) ([]byte, error)
|
||||||
|
SendMessage(context context.Context, data Req) ([]byte, error)
|
||||||
|
SendSignalMessage(context context.Context, data Req) ([]byte, error)
|
||||||
|
PullMessageBySeqList(context context.Context, data Req) ([]byte, error)
|
||||||
|
UserLogout(context context.Context, data Req) ([]byte, error)
|
||||||
|
SetUserDeviceBackground(context context.Context, data Req) ([]byte, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ MessageHandler = (*GrpcHandler)(nil)
|
||||||
|
|
||||||
|
type GrpcHandler struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g GrpcHandler) GetSeq(context context.Context, data Req) ([]byte, error) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g GrpcHandler) SendMessage(context context.Context, data Req) ([]byte, error) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g GrpcHandler) SendSignalMessage(context context.Context, data Req) ([]byte, error) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g GrpcHandler) PullMessageBySeqList(context context.Context, data Req) ([]byte, error) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g GrpcHandler) UserLogout(context context.Context, data Req) ([]byte, error) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g GrpcHandler) SetUserDeviceBackground(context context.Context, data Req) ([]byte, error) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
81
internal/msggateway/new/n_ws_server.go
Normal file
81
internal/msggateway/new/n_ws_server.go
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
package new
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"github.com/gorilla/websocket"
|
||||||
|
"net/http"
|
||||||
|
"open_im_sdk/pkg/utils"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type LongConnServer interface {
|
||||||
|
Run() error
|
||||||
|
}
|
||||||
|
|
||||||
|
type Server struct {
|
||||||
|
rpcPort int
|
||||||
|
wsMaxConnNum int
|
||||||
|
longConnServer *LongConnServer
|
||||||
|
rpcServer *RpcServer
|
||||||
|
}
|
||||||
|
type WsServer struct {
|
||||||
|
port int
|
||||||
|
wsMaxConnNum int
|
||||||
|
wsUpGrader *websocket.Upgrader
|
||||||
|
registerChan chan *Client
|
||||||
|
unregisterChan chan *Client
|
||||||
|
clients *UserMap
|
||||||
|
clientPool sync.Pool
|
||||||
|
onlineUserNum int64
|
||||||
|
onlineUserConnNum int64
|
||||||
|
compressor Compressor
|
||||||
|
handler MessageHandler
|
||||||
|
}
|
||||||
|
|
||||||
|
func newWsServer(opts ...Option) (*WsServer, error) {
|
||||||
|
var config configs
|
||||||
|
for _, o := range opts {
|
||||||
|
o(&config)
|
||||||
|
}
|
||||||
|
if config.port < 1024 {
|
||||||
|
return nil, errors.New("port not allow to listen")
|
||||||
|
|
||||||
|
}
|
||||||
|
return &WsServer{
|
||||||
|
port: config.port,
|
||||||
|
wsMaxConnNum: config.maxConnNum,
|
||||||
|
wsUpGrader: &websocket.Upgrader{
|
||||||
|
HandshakeTimeout: config.handshakeTimeout,
|
||||||
|
ReadBufferSize: config.messageMaxMsgLength,
|
||||||
|
CheckOrigin: func(r *http.Request) bool { return true },
|
||||||
|
},
|
||||||
|
clientPool: sync.Pool{
|
||||||
|
New: func() interface{} {
|
||||||
|
return new(Client)
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
func (ws *WsServer) Run() error {
|
||||||
|
http.HandleFunc("/", ws.wsHandler) //Get request from client to handle by wsHandler
|
||||||
|
return http.ListenAndServe(":"+utils.IntToString(ws.port), nil) //Start listening
|
||||||
|
|
||||||
|
}
|
||||||
|
func (ws *WsServer) wsHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
context := newContext(w, r)
|
||||||
|
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 ")
|
||||||
|
}
|
||||||
|
}
|
36
internal/msggateway/new/options.go
Normal file
36
internal/msggateway/new/options.go
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
package new
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
type Option func(opt *configs)
|
||||||
|
type configs struct {
|
||||||
|
//长连接监听端口
|
||||||
|
port int
|
||||||
|
//长连接允许最大链接数
|
||||||
|
maxConnNum int
|
||||||
|
//连接握手超时时间
|
||||||
|
handshakeTimeout time.Duration
|
||||||
|
//允许消息最大长度
|
||||||
|
messageMaxMsgLength int
|
||||||
|
}
|
||||||
|
|
||||||
|
func WithPort(port int) Option {
|
||||||
|
return func(opt *configs) {
|
||||||
|
opt.port = port
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func WithMaxConnNum(num int) Option {
|
||||||
|
return func(opt *configs) {
|
||||||
|
opt.maxConnNum = num
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func WithHandshakeTimeout(t time.Duration) Option {
|
||||||
|
return func(opt *configs) {
|
||||||
|
opt.handshakeTimeout = t
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func WithMessageMaxMsgLength(length int) Option {
|
||||||
|
return func(opt *configs) {
|
||||||
|
opt.messageMaxMsgLength = length
|
||||||
|
}
|
||||||
|
}
|
64
internal/msggateway/new/user_map.go
Normal file
64
internal/msggateway/new/user_map.go
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
package new
|
||||||
|
|
||||||
|
import "sync"
|
||||||
|
|
||||||
|
type UserMap struct {
|
||||||
|
m sync.Map
|
||||||
|
}
|
||||||
|
|
||||||
|
func newUserMap() *UserMap {
|
||||||
|
return &UserMap{}
|
||||||
|
}
|
||||||
|
func (u *UserMap) GetAll(key string) []*Client {
|
||||||
|
allClients, ok := u.m.Load(key)
|
||||||
|
if ok {
|
||||||
|
return allClients.([]*Client)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
func (u *UserMap) Get(key string, platformID int32) (*Client, bool) {
|
||||||
|
allClients, existed := u.m.Load(key)
|
||||||
|
if existed {
|
||||||
|
for _, client := range allClients.([]*Client) {
|
||||||
|
if client.PlatformID == platformID {
|
||||||
|
return client, existed
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil, false
|
||||||
|
}
|
||||||
|
return nil, existed
|
||||||
|
}
|
||||||
|
func (u *UserMap) Set(key string, v *Client) {
|
||||||
|
allClients, existed := u.m.Load(key)
|
||||||
|
if existed {
|
||||||
|
oldClients := allClients.([]*Client)
|
||||||
|
oldClients = append(oldClients, v)
|
||||||
|
u.m.Store(key, oldClients)
|
||||||
|
} else {
|
||||||
|
clients := make([]*Client, 3)
|
||||||
|
clients = append(clients, v)
|
||||||
|
u.m.Store(key, clients)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func (u *UserMap) delete(key string, platformID int32) {
|
||||||
|
allClients, existed := u.m.Load(key)
|
||||||
|
if existed {
|
||||||
|
oldClients := allClients.([]*Client)
|
||||||
|
|
||||||
|
a := make([]*Client, len(oldClients))
|
||||||
|
for _, client := range oldClients {
|
||||||
|
if client.PlatformID != platformID {
|
||||||
|
a = append(a, client)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(a) == 0 {
|
||||||
|
u.m.Delete(key)
|
||||||
|
} else {
|
||||||
|
u.m.Store(key, a)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
func (u *UserMap) DeleteAll(key string) {
|
||||||
|
u.m.Delete(key)
|
||||||
|
}
|
@ -1,28 +1,30 @@
|
|||||||
package logic
|
package logic
|
||||||
|
|
||||||
import (
|
import (
|
||||||
cbApi "Open_IM/pkg/callback_struct"
|
cbapi "Open_IM/pkg/callbackstruct"
|
||||||
"Open_IM/pkg/common/callback"
|
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/http"
|
"Open_IM/pkg/common/http"
|
||||||
"Open_IM/pkg/common/log"
|
"Open_IM/pkg/common/tracelog"
|
||||||
common "Open_IM/pkg/proto/sdkws"
|
common "Open_IM/pkg/proto/sdkws"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
http2 "net/http"
|
"context"
|
||||||
)
|
)
|
||||||
|
|
||||||
func callbackOfflinePush(operationID string, userIDList []string, msg *common.MsgData, offlinePushUserIDList *[]string) cbApi.CommonCallbackResp {
|
func url() string {
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: operationID}
|
return config.Config.Callback.CallbackUrl
|
||||||
|
}
|
||||||
|
|
||||||
|
func CallbackOfflinePush(ctx context.Context, userIDList []string, msg *common.MsgData, offlinePushUserIDList *[]string) error {
|
||||||
if !config.Config.Callback.CallbackOfflinePush.Enable {
|
if !config.Config.Callback.CallbackOfflinePush.Enable {
|
||||||
return callbackResp
|
return nil
|
||||||
}
|
}
|
||||||
req := cbApi.CallbackBeforePushReq{
|
req := &cbapi.CallbackBeforePushReq{
|
||||||
UserStatusBatchCallbackReq: cbApi.UserStatusBatchCallbackReq{
|
UserStatusBatchCallbackReq: cbapi.UserStatusBatchCallbackReq{
|
||||||
UserStatusBaseCallback: cbApi.UserStatusBaseCallback{
|
UserStatusBaseCallback: cbapi.UserStatusBaseCallback{
|
||||||
CallbackCommand: constant.CallbackOfflinePushCommand,
|
CallbackCommand: constant.CallbackOfflinePushCommand,
|
||||||
OperationID: operationID,
|
OperationID: tracelog.GetOperationID(ctx),
|
||||||
PlatformID: msg.SenderPlatformID,
|
PlatformID: int(msg.SenderPlatformID),
|
||||||
Platform: constant.PlatformIDToName(int(msg.SenderPlatformID)),
|
Platform: constant.PlatformIDToName(int(msg.SenderPlatformID)),
|
||||||
},
|
},
|
||||||
UserIDList: userIDList,
|
UserIDList: userIDList,
|
||||||
@ -34,120 +36,214 @@ func callbackOfflinePush(operationID string, userIDList []string, msg *common.Ms
|
|||||||
ContentType: msg.ContentType,
|
ContentType: msg.ContentType,
|
||||||
SessionType: msg.SessionType,
|
SessionType: msg.SessionType,
|
||||||
AtUserIDList: msg.AtUserIDList,
|
AtUserIDList: msg.AtUserIDList,
|
||||||
Content: callback.GetContent(msg),
|
Content: utils.GetContent(msg),
|
||||||
}
|
}
|
||||||
resp := &cbApi.CallbackBeforePushResp{CommonCallbackResp: &callbackResp}
|
resp := &cbapi.CallbackBeforePushResp{}
|
||||||
if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackOfflinePushCommand, req, resp, config.Config.Callback.CallbackOfflinePush.CallbackTimeOut); err != nil {
|
err := http.CallBackPostReturn(url(), req, resp, config.Config.Callback.CallbackOfflinePush)
|
||||||
callbackResp.ErrCode = http2.StatusInternalServerError
|
if err != nil {
|
||||||
callbackResp.ErrMsg = err.Error()
|
return err
|
||||||
if !*config.Config.Callback.CallbackOfflinePush.CallbackFailedContinue {
|
|
||||||
callbackResp.ActionCode = constant.ActionForbidden
|
|
||||||
return callbackResp
|
|
||||||
} else {
|
|
||||||
callbackResp.ActionCode = constant.ActionAllow
|
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if resp.ErrCode == constant.CallbackHandleSuccess && resp.ActionCode == constant.ActionAllow {
|
|
||||||
if len(resp.UserIDList) != 0 {
|
if len(resp.UserIDList) != 0 {
|
||||||
*offlinePushUserIDList = resp.UserIDList
|
*offlinePushUserIDList = resp.UserIDList
|
||||||
}
|
}
|
||||||
if resp.OfflinePushInfo != nil {
|
if resp.OfflinePushInfo != nil {
|
||||||
msg.OfflinePushInfo = resp.OfflinePushInfo
|
msg.OfflinePushInfo = resp.OfflinePushInfo
|
||||||
}
|
}
|
||||||
}
|
return nil
|
||||||
log.NewDebug(operationID, utils.GetSelfFuncName(), offlinePushUserIDList, resp.UserIDList)
|
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func callbackOnlinePush(operationID string, userIDList []string, msg *common.MsgData) cbApi.CommonCallbackResp {
|
func CallbackOnlinePush(operationID string, userIDList []string, msg *common.MsgData) error {
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: operationID}
|
if !config.Config.Callback.CallbackOnlinePush.Enable || utils.Contain(msg.SendID, userIDList...) {
|
||||||
if !config.Config.Callback.CallbackOnlinePush.Enable || utils.IsContain(msg.SendID, userIDList) {
|
return nil
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
req := cbApi.CallbackBeforePushReq{
|
req := cbapi.CallbackBeforePushReq{
|
||||||
UserStatusBatchCallbackReq: cbApi.UserStatusBatchCallbackReq{
|
UserStatusBatchCallbackReq: cbapi.UserStatusBatchCallbackReq{
|
||||||
UserStatusBaseCallback: cbApi.UserStatusBaseCallback{
|
UserStatusBaseCallback: cbapi.UserStatusBaseCallback{
|
||||||
CallbackCommand: constant.CallbackOnlinePushCommand,
|
CallbackCommand: constant.CallbackOnlinePushCommand,
|
||||||
OperationID: operationID,
|
OperationID: operationID,
|
||||||
PlatformID: msg.SenderPlatformID,
|
PlatformID: int(msg.SenderPlatformID),
|
||||||
Platform: constant.PlatformIDToName(int(msg.SenderPlatformID)),
|
Platform: constant.PlatformIDToName(int(msg.SenderPlatformID)),
|
||||||
},
|
},
|
||||||
UserIDList: userIDList,
|
UserIDList: userIDList,
|
||||||
},
|
},
|
||||||
//OfflinePushInfo: msg.OfflinePushInfo,
|
|
||||||
ClientMsgID: msg.ClientMsgID,
|
ClientMsgID: msg.ClientMsgID,
|
||||||
SendID: msg.SendID,
|
SendID: msg.SendID,
|
||||||
GroupID: msg.GroupID,
|
GroupID: msg.GroupID,
|
||||||
ContentType: msg.ContentType,
|
ContentType: msg.ContentType,
|
||||||
SessionType: msg.SessionType,
|
SessionType: msg.SessionType,
|
||||||
AtUserIDList: msg.AtUserIDList,
|
AtUserIDList: msg.AtUserIDList,
|
||||||
Content: callback.GetContent(msg),
|
Content: utils.GetContent(msg),
|
||||||
}
|
}
|
||||||
resp := &cbApi.CallbackBeforePushResp{CommonCallbackResp: &callbackResp}
|
resp := &cbapi.CallbackBeforePushResp{}
|
||||||
if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackOnlinePushCommand, req, resp, config.Config.Callback.CallbackOnlinePush.CallbackTimeOut); err != nil {
|
return http.CallBackPostReturn(url(), req, resp, config.Config.Callback.CallbackOnlinePush)
|
||||||
callbackResp.ErrCode = http2.StatusInternalServerError
|
|
||||||
callbackResp.ErrMsg = err.Error()
|
|
||||||
if !config.Config.Callback.CallbackOnlinePush.CallbackFailedContinue {
|
|
||||||
callbackResp.ActionCode = constant.ActionForbidden
|
|
||||||
return callbackResp
|
|
||||||
} else {
|
|
||||||
callbackResp.ActionCode = constant.ActionAllow
|
|
||||||
return callbackResp
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if resp.ErrCode == constant.CallbackHandleSuccess && resp.ActionCode == constant.ActionAllow {
|
|
||||||
//if resp.OfflinePushInfo != nil {
|
|
||||||
// msg.OfflinePushInfo = resp.OfflinePushInfo
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func callbackBeforeSuperGroupOnlinePush(operationID string, groupID string, msg *common.MsgData, pushToUserList *[]string) cbApi.CommonCallbackResp {
|
func CallbackBeforeSuperGroupOnlinePush(ctx context.Context, groupID string, msg *common.MsgData, pushToUserList *[]string) error {
|
||||||
log.Debug(operationID, utils.GetSelfFuncName(), groupID, msg.String(), pushToUserList)
|
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: operationID}
|
|
||||||
if !config.Config.Callback.CallbackBeforeSuperGroupOnlinePush.Enable {
|
if !config.Config.Callback.CallbackBeforeSuperGroupOnlinePush.Enable {
|
||||||
return callbackResp
|
return nil
|
||||||
}
|
}
|
||||||
req := cbApi.CallbackBeforeSuperGroupOnlinePushReq{
|
req := cbapi.CallbackBeforeSuperGroupOnlinePushReq{
|
||||||
UserStatusBaseCallback: cbApi.UserStatusBaseCallback{
|
UserStatusBaseCallback: cbapi.UserStatusBaseCallback{
|
||||||
CallbackCommand: constant.CallbackSuperGroupOnlinePushCommand,
|
CallbackCommand: constant.CallbackSuperGroupOnlinePushCommand,
|
||||||
OperationID: operationID,
|
OperationID: tracelog.GetOperationID(ctx),
|
||||||
PlatformID: msg.SenderPlatformID,
|
PlatformID: int(msg.SenderPlatformID),
|
||||||
Platform: constant.PlatformIDToName(int(msg.SenderPlatformID)),
|
Platform: constant.PlatformIDToName(int(msg.SenderPlatformID)),
|
||||||
},
|
},
|
||||||
//OfflinePushInfo: msg.OfflinePushInfo,
|
|
||||||
ClientMsgID: msg.ClientMsgID,
|
ClientMsgID: msg.ClientMsgID,
|
||||||
SendID: msg.SendID,
|
SendID: msg.SendID,
|
||||||
GroupID: groupID,
|
GroupID: groupID,
|
||||||
ContentType: msg.ContentType,
|
ContentType: msg.ContentType,
|
||||||
SessionType: msg.SessionType,
|
SessionType: msg.SessionType,
|
||||||
AtUserIDList: msg.AtUserIDList,
|
AtUserIDList: msg.AtUserIDList,
|
||||||
Content: callback.GetContent(msg),
|
Content: utils.GetContent(msg),
|
||||||
Seq: msg.Seq,
|
Seq: msg.Seq,
|
||||||
}
|
}
|
||||||
resp := &cbApi.CallbackBeforeSuperGroupOnlinePushResp{CommonCallbackResp: &callbackResp}
|
resp := &cbapi.CallbackBeforeSuperGroupOnlinePushResp{}
|
||||||
if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackSuperGroupOnlinePushCommand, req, resp, config.Config.Callback.CallbackBeforeSuperGroupOnlinePush.CallbackTimeOut); err != nil {
|
if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackBeforeSuperGroupOnlinePush); err != nil {
|
||||||
callbackResp.ErrCode = http2.StatusInternalServerError
|
return err
|
||||||
callbackResp.ErrMsg = err.Error()
|
|
||||||
if !config.Config.Callback.CallbackBeforeSuperGroupOnlinePush.CallbackFailedContinue {
|
|
||||||
callbackResp.ActionCode = constant.ActionForbidden
|
|
||||||
return callbackResp
|
|
||||||
} else {
|
|
||||||
callbackResp.ActionCode = constant.ActionAllow
|
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if resp.ErrCode == constant.CallbackHandleSuccess && resp.ActionCode == constant.ActionAllow {
|
|
||||||
if len(resp.UserIDList) != 0 {
|
if len(resp.UserIDList) != 0 {
|
||||||
*pushToUserList = resp.UserIDList
|
*pushToUserList = resp.UserIDList
|
||||||
}
|
}
|
||||||
//if resp.OfflinePushInfo != nil {
|
return nil
|
||||||
// msg.OfflinePushInfo = resp.OfflinePushInfo
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
log.NewDebug(operationID, utils.GetSelfFuncName(), pushToUserList, resp.UserIDList)
|
|
||||||
return callbackResp
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//func callbackOfflinePush(operationID string, userIDList []string, msg *common.MsgData, offlinePushUserIDList *[]string) cbApi.CommonCallbackResp {
|
||||||
|
// callbackResp := cbapi.CommonCallbackResp{OperationID: operationID}
|
||||||
|
// if !config.Config.Callback.CallbackOfflinePush.Enable {
|
||||||
|
// return callbackResp
|
||||||
|
// }
|
||||||
|
// req := cbApi.CallbackBeforePushReq{
|
||||||
|
// UserStatusBatchCallbackReq: cbApi.UserStatusBatchCallbackReq{
|
||||||
|
// UserStatusBaseCallback: cbApi.UserStatusBaseCallback{
|
||||||
|
// CallbackCommand: constant.CallbackOfflinePushCommand,
|
||||||
|
// OperationID: operationID,
|
||||||
|
// PlatformID: msg.SenderPlatformID,
|
||||||
|
// Platform: constant.PlatformIDToName(int(msg.SenderPlatformID)),
|
||||||
|
// },
|
||||||
|
// UserIDList: userIDList,
|
||||||
|
// },
|
||||||
|
// OfflinePushInfo: msg.OfflinePushInfo,
|
||||||
|
// ClientMsgID: msg.ClientMsgID,
|
||||||
|
// SendID: msg.SendID,
|
||||||
|
// GroupID: msg.GroupID,
|
||||||
|
// ContentType: msg.ContentType,
|
||||||
|
// SessionType: msg.SessionType,
|
||||||
|
// AtUserIDList: msg.AtUserIDList,
|
||||||
|
// Content: callback.GetContent(msg),
|
||||||
|
// }
|
||||||
|
// resp := &cbApi.CallbackBeforePushResp{CommonCallbackResp: &callbackResp}
|
||||||
|
// if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackOfflinePushCommand, req, resp, config.Config.Callback.CallbackOfflinePush.CallbackTimeOut); err != nil {
|
||||||
|
// callbackResp.ErrCode = http2.StatusInternalServerError
|
||||||
|
// callbackResp.ErrMsg = err.Error()
|
||||||
|
// if !*config.Config.Callback.CallbackOfflinePush.CallbackFailedContinue {
|
||||||
|
// callbackResp.ActionCode = constant.ActionForbidden
|
||||||
|
// return callbackResp
|
||||||
|
// } else {
|
||||||
|
// callbackResp.ActionCode = constant.ActionAllow
|
||||||
|
// return callbackResp
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if resp.ErrCode == constant.CallbackHandleSuccess && resp.ActionCode == constant.ActionAllow {
|
||||||
|
// if len(resp.UserIDList) != 0 {
|
||||||
|
// *offlinePushUserIDList = resp.UserIDList
|
||||||
|
// }
|
||||||
|
// if resp.OfflinePushInfo != nil {
|
||||||
|
// msg.OfflinePushInfo = resp.OfflinePushInfo
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// log.NewDebug(operationID, utils.GetSelfFuncName(), offlinePushUserIDList, resp.UserIDList)
|
||||||
|
// return callbackResp
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func callbackOnlinePush(operationID string, userIDList []string, msg *common.MsgData) cbApi.CommonCallbackResp {
|
||||||
|
// callbackResp := cbApi.CommonCallbackResp{OperationID: operationID}
|
||||||
|
// if !config.Config.Callback.CallbackOnlinePush.Enable || utils.IsContain(msg.SendID, userIDList) {
|
||||||
|
// return callbackResp
|
||||||
|
// }
|
||||||
|
// req := cbApi.CallbackBeforePushReq{
|
||||||
|
// UserStatusBatchCallbackReq: cbApi.UserStatusBatchCallbackReq{
|
||||||
|
// UserStatusBaseCallback: cbApi.UserStatusBaseCallback{
|
||||||
|
// CallbackCommand: constant.CallbackOnlinePushCommand,
|
||||||
|
// OperationID: operationID,
|
||||||
|
// PlatformID: msg.SenderPlatformID,
|
||||||
|
// Platform: constant.PlatformIDToName(int(msg.SenderPlatformID)),
|
||||||
|
// },
|
||||||
|
// UserIDList: userIDList,
|
||||||
|
// },
|
||||||
|
// //OfflinePushInfo: msg.OfflinePushInfo,
|
||||||
|
// ClientMsgID: msg.ClientMsgID,
|
||||||
|
// SendID: msg.SendID,
|
||||||
|
// GroupID: msg.GroupID,
|
||||||
|
// ContentType: msg.ContentType,
|
||||||
|
// SessionType: msg.SessionType,
|
||||||
|
// AtUserIDList: msg.AtUserIDList,
|
||||||
|
// Content: callback.GetContent(msg),
|
||||||
|
// }
|
||||||
|
// resp := &cbApi.CallbackBeforePushResp{CommonCallbackResp: &callbackResp}
|
||||||
|
// if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackOnlinePushCommand, req, resp, config.Config.Callback.CallbackOnlinePush.CallbackTimeOut); err != nil {
|
||||||
|
// callbackResp.ErrCode = http2.StatusInternalServerError
|
||||||
|
// callbackResp.ErrMsg = err.Error()
|
||||||
|
// if !config.Config.Callback.CallbackOnlinePush.CallbackFailedContinue {
|
||||||
|
// callbackResp.ActionCode = constant.ActionForbidden
|
||||||
|
// return callbackResp
|
||||||
|
// } else {
|
||||||
|
// callbackResp.ActionCode = constant.ActionAllow
|
||||||
|
// return callbackResp
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if resp.ErrCode == constant.CallbackHandleSuccess && resp.ActionCode == constant.ActionAllow {
|
||||||
|
// //if resp.OfflinePushInfo != nil {
|
||||||
|
// // msg.OfflinePushInfo = resp.OfflinePushInfo
|
||||||
|
// //}
|
||||||
|
// }
|
||||||
|
// return callbackResp
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func callbackBeforeSuperGroupOnlinePush(operationID string, groupID string, msg *common.MsgData, pushToUserList *[]string) cbApi.CommonCallbackResp {
|
||||||
|
// log.Debug(operationID, utils.GetSelfFuncName(), groupID, msg.String(), pushToUserList)
|
||||||
|
// callbackResp := cbApi.CommonCallbackResp{OperationID: operationID}
|
||||||
|
// if !config.Config.Callback.CallbackBeforeSuperGroupOnlinePush.Enable {
|
||||||
|
// return callbackResp
|
||||||
|
// }
|
||||||
|
// req := cbApi.CallbackBeforeSuperGroupOnlinePushReq{
|
||||||
|
// UserStatusBaseCallback: cbApi.UserStatusBaseCallback{
|
||||||
|
// CallbackCommand: constant.CallbackSuperGroupOnlinePushCommand,
|
||||||
|
// OperationID: operationID,
|
||||||
|
// PlatformID: msg.SenderPlatformID,
|
||||||
|
// Platform: constant.PlatformIDToName(int(msg.SenderPlatformID)),
|
||||||
|
// },
|
||||||
|
// //OfflinePushInfo: msg.OfflinePushInfo,
|
||||||
|
// ClientMsgID: msg.ClientMsgID,
|
||||||
|
// SendID: msg.SendID,
|
||||||
|
// GroupID: groupID,
|
||||||
|
// ContentType: msg.ContentType,
|
||||||
|
// SessionType: msg.SessionType,
|
||||||
|
// AtUserIDList: msg.AtUserIDList,
|
||||||
|
// Content: callback.GetContent(msg),
|
||||||
|
// Seq: msg.Seq,
|
||||||
|
// }
|
||||||
|
// resp := &cbApi.CallbackBeforeSuperGroupOnlinePushResp{CommonCallbackResp: &callbackResp}
|
||||||
|
// if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackSuperGroupOnlinePushCommand, req, resp, config.Config.Callback.CallbackBeforeSuperGroupOnlinePush.CallbackTimeOut); err != nil {
|
||||||
|
// callbackResp.ErrCode = http2.StatusInternalServerError
|
||||||
|
// callbackResp.ErrMsg = err.Error()
|
||||||
|
// if !config.Config.Callback.CallbackBeforeSuperGroupOnlinePush.CallbackFailedContinue {
|
||||||
|
// callbackResp.ActionCode = constant.ActionForbidden
|
||||||
|
// return callbackResp
|
||||||
|
// } else {
|
||||||
|
// callbackResp.ActionCode = constant.ActionAllow
|
||||||
|
// return callbackResp
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// if resp.ErrCode == constant.CallbackHandleSuccess && resp.ActionCode == constant.ActionAllow {
|
||||||
|
// if len(resp.UserIDList) != 0 {
|
||||||
|
// *pushToUserList = resp.UserIDList
|
||||||
|
// }
|
||||||
|
// //if resp.OfflinePushInfo != nil {
|
||||||
|
// // msg.OfflinePushInfo = resp.OfflinePushInfo
|
||||||
|
// //}
|
||||||
|
// }
|
||||||
|
// log.NewDebug(operationID, utils.GetSelfFuncName(), pushToUserList, resp.UserIDList)
|
||||||
|
// return callbackResp
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
@ -2,70 +2,47 @@ package auth
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/internal/common/check"
|
"Open_IM/internal/common/check"
|
||||||
"Open_IM/internal/common/rpc_server"
|
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/db/cache"
|
"Open_IM/pkg/common/db/cache"
|
||||||
"Open_IM/pkg/common/db/controller"
|
"Open_IM/pkg/common/db/controller"
|
||||||
|
"Open_IM/pkg/common/db/relation"
|
||||||
|
relationTb "Open_IM/pkg/common/db/table/relation"
|
||||||
"Open_IM/pkg/common/log"
|
"Open_IM/pkg/common/log"
|
||||||
prome "Open_IM/pkg/common/prometheus"
|
|
||||||
"Open_IM/pkg/common/tokenverify"
|
"Open_IM/pkg/common/tokenverify"
|
||||||
"Open_IM/pkg/common/tracelog"
|
"Open_IM/pkg/common/tracelog"
|
||||||
|
discoveryRegistry "Open_IM/pkg/discoveryregistry"
|
||||||
pbAuth "Open_IM/pkg/proto/auth"
|
pbAuth "Open_IM/pkg/proto/auth"
|
||||||
pbRelay "Open_IM/pkg/proto/relay"
|
pbRelay "Open_IM/pkg/proto/relay"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
"context"
|
"context"
|
||||||
grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
|
"github.com/OpenIMSDK/openKeeper"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewRpcAuthServer(port int) *rpcAuth {
|
func Start(client *openKeeper.ZkClient, server *grpc.Server) error {
|
||||||
r, err := rpcserver.NewRpcServer(config.Config.RpcRegisterIP, port, config.Config.RpcRegisterName.OpenImAuthName, config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema)
|
mysql, err := relation.NewGormDB()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
return err
|
||||||
}
|
}
|
||||||
var redis cache.RedisClient
|
if err := mysql.AutoMigrate(&relationTb.FriendModel{}, &relationTb.FriendRequestModel{}, &relationTb.BlackModel{}); err != nil {
|
||||||
redis.InitRedis()
|
return err
|
||||||
return &rpcAuth{
|
}
|
||||||
RpcServer: r,
|
redis, err := cache.NewRedis()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
pbAuth.RegisterAuthServer(server, &authServer{
|
||||||
|
userCheck: check.NewUserCheck(client),
|
||||||
|
RegisterCenter: client,
|
||||||
AuthInterface: controller.NewAuthController(redis.GetClient(), config.Config.TokenPolicy.AccessSecret, config.Config.TokenPolicy.AccessExpire),
|
AuthInterface: controller.NewAuthController(redis.GetClient(), config.Config.TokenPolicy.AccessSecret, config.Config.TokenPolicy.AccessExpire),
|
||||||
}
|
})
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *rpcAuth) Run() {
|
func (s *authServer) UserToken(ctx context.Context, req *pbAuth.UserTokenReq) (*pbAuth.UserTokenResp, error) {
|
||||||
operationID := utils.OperationIDGenerator()
|
|
||||||
log.NewInfo(operationID, "rpc auth start...")
|
|
||||||
listener, address, err := rpcserver.GetTcpListen(config.Config.ListenIP, s.Port)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
log.NewInfo(operationID, "listen network success ", listener, address)
|
|
||||||
var grpcOpts []grpc.ServerOption
|
|
||||||
if config.Config.Prometheus.Enable {
|
|
||||||
prome.NewGrpcRequestCounter()
|
|
||||||
prome.NewGrpcRequestFailedCounter()
|
|
||||||
prome.NewGrpcRequestSuccessCounter()
|
|
||||||
prome.NewUserRegisterCounter()
|
|
||||||
prome.NewUserLoginCounter()
|
|
||||||
grpcOpts = append(grpcOpts, []grpc.ServerOption{
|
|
||||||
// grpc.UnaryInterceptor(prome.UnaryServerInterceptorProme),
|
|
||||||
grpc.StreamInterceptor(grpcPrometheus.StreamServerInterceptor),
|
|
||||||
grpc.UnaryInterceptor(grpcPrometheus.UnaryServerInterceptor),
|
|
||||||
}...)
|
|
||||||
}
|
|
||||||
srv := grpc.NewServer(grpcOpts...)
|
|
||||||
defer srv.GracefulStop()
|
|
||||||
pbAuth.RegisterAuthServer(srv, s)
|
|
||||||
err = srv.Serve(listener)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
log.NewInfo(operationID, "rpc auth ok")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *rpcAuth) UserToken(ctx context.Context, req *pbAuth.UserTokenReq) (*pbAuth.UserTokenResp, error) {
|
|
||||||
resp := pbAuth.UserTokenResp{}
|
resp := pbAuth.UserTokenResp{}
|
||||||
if _, err := check.GetUsersInfo(ctx, req.UserID); err != nil {
|
if _, err := s.userCheck.GetUsersInfo(ctx, req.UserID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
token, err := s.CreateToken(ctx, req.UserID, constant.PlatformIDToName(int(req.PlatformID)))
|
token, err := s.CreateToken(ctx, req.UserID, constant.PlatformIDToName(int(req.PlatformID)))
|
||||||
@ -77,7 +54,7 @@ func (s *rpcAuth) UserToken(ctx context.Context, req *pbAuth.UserTokenReq) (*pbA
|
|||||||
return &resp, nil
|
return &resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *rpcAuth) parseToken(ctx context.Context, tokensString string) (claims *tokenverify.Claims, err error) {
|
func (s *authServer) parseToken(ctx context.Context, tokensString string) (claims *tokenverify.Claims, err error) {
|
||||||
claims, err = tokenverify.GetClaimFromToken(tokensString)
|
claims, err = tokenverify.GetClaimFromToken(tokensString)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, utils.Wrap(err, "")
|
return nil, utils.Wrap(err, "")
|
||||||
@ -102,7 +79,7 @@ func (s *rpcAuth) parseToken(ctx context.Context, tokensString string) (claims *
|
|||||||
return nil, constant.ErrTokenNotExist.Wrap()
|
return nil, constant.ErrTokenNotExist.Wrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *rpcAuth) ParseToken(ctx context.Context, req *pbAuth.ParseTokenReq) (resp *pbAuth.ParseTokenResp, err error) {
|
func (s *authServer) ParseToken(ctx context.Context, req *pbAuth.ParseTokenReq) (resp *pbAuth.ParseTokenResp, err error) {
|
||||||
resp = &pbAuth.ParseTokenResp{}
|
resp = &pbAuth.ParseTokenResp{}
|
||||||
claims, err := s.parseToken(ctx, req.Token)
|
claims, err := s.parseToken(ctx, req.Token)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -114,7 +91,7 @@ func (s *rpcAuth) ParseToken(ctx context.Context, req *pbAuth.ParseTokenReq) (re
|
|||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *rpcAuth) ForceLogout(ctx context.Context, req *pbAuth.ForceLogoutReq) (*pbAuth.ForceLogoutResp, error) {
|
func (s *authServer) ForceLogout(ctx context.Context, req *pbAuth.ForceLogoutReq) (*pbAuth.ForceLogoutResp, error) {
|
||||||
resp := pbAuth.ForceLogoutResp{}
|
resp := pbAuth.ForceLogoutResp{}
|
||||||
if err := tokenverify.CheckAdmin(ctx); err != nil {
|
if err := tokenverify.CheckAdmin(ctx); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -125,7 +102,7 @@ func (s *rpcAuth) ForceLogout(ctx context.Context, req *pbAuth.ForceLogoutReq) (
|
|||||||
return &resp, nil
|
return &resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *rpcAuth) forceKickOff(ctx context.Context, userID string, platformID int32, operationID string) error {
|
func (s *authServer) forceKickOff(ctx context.Context, userID string, platformID int32, operationID string) error {
|
||||||
grpcCons, err := s.RegisterCenter.GetConns(config.Config.RpcRegisterName.OpenImRelayName)
|
grpcCons, err := s.RegisterCenter.GetConns(config.Config.RpcRegisterName.OpenImRelayName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -140,7 +117,8 @@ func (s *rpcAuth) forceKickOff(ctx context.Context, userID string, platformID in
|
|||||||
return constant.ErrInternalServer.Wrap()
|
return constant.ErrInternalServer.Wrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
type rpcAuth struct {
|
type authServer struct {
|
||||||
*rpcserver.RpcServer
|
|
||||||
controller.AuthInterface
|
controller.AuthInterface
|
||||||
|
userCheck *check.UserCheck
|
||||||
|
RegisterCenter discoveryRegistry.SvcDiscoveryRegistry
|
||||||
}
|
}
|
||||||
|
@ -6,11 +6,14 @@ import (
|
|||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/db/cache"
|
"Open_IM/pkg/common/db/cache"
|
||||||
"Open_IM/pkg/common/db/controller"
|
"Open_IM/pkg/common/db/controller"
|
||||||
relationTb "Open_IM/pkg/common/db/relation"
|
"Open_IM/pkg/common/db/relation"
|
||||||
unrealationTb "Open_IM/pkg/common/db/unrelation"
|
tableRelation "Open_IM/pkg/common/db/table/relation"
|
||||||
|
"Open_IM/pkg/common/db/unrelation"
|
||||||
"Open_IM/pkg/common/log"
|
"Open_IM/pkg/common/log"
|
||||||
"Open_IM/pkg/common/prome"
|
promePkg "Open_IM/pkg/common/prometheus"
|
||||||
|
"Open_IM/pkg/getcdv3"
|
||||||
pbConversation "Open_IM/pkg/proto/conversation"
|
pbConversation "Open_IM/pkg/proto/conversation"
|
||||||
|
pbUser "Open_IM/pkg/proto/user"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
"context"
|
"context"
|
||||||
"github.com/dtm-labs/rockscache"
|
"github.com/dtm-labs/rockscache"
|
||||||
@ -47,7 +50,7 @@ func NewConversationServer(port int) *conversationServer {
|
|||||||
var cCache cache.ConversationCache
|
var cCache cache.ConversationCache
|
||||||
//mysql init
|
//mysql init
|
||||||
var mysql relation.Mysql
|
var mysql relation.Mysql
|
||||||
err := mysql.InitConn().AutoMigrateModel(&table.ConversationModel{})
|
err := mysql.InitConn().AutoMigrateModel(&tableRelation.ConversationModel{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic("db init err:" + err.Error())
|
panic("db init err:" + err.Error())
|
||||||
}
|
}
|
||||||
@ -92,11 +95,11 @@ func (c *conversationServer) Run() {
|
|||||||
//grpc server
|
//grpc server
|
||||||
var grpcOpts []grpc.ServerOption
|
var grpcOpts []grpc.ServerOption
|
||||||
if config.Config.Prometheus.Enable {
|
if config.Config.Prometheus.Enable {
|
||||||
prome.NewGrpcRequestCounter()
|
promePkg.NewGrpcRequestCounter()
|
||||||
prome.NewGrpcRequestFailedCounter()
|
promePkg.NewGrpcRequestFailedCounter()
|
||||||
prome.NewGrpcRequestSuccessCounter()
|
promePkg.NewGrpcRequestSuccessCounter()
|
||||||
grpcOpts = append(grpcOpts, []grpc.ServerOption{
|
grpcOpts = append(grpcOpts, []grpc.ServerOption{
|
||||||
// grpc.UnaryInterceptor(prome.UnaryServerInterceptorProme),
|
// grpc.UnaryInterceptor(promePkg.UnaryServerInterceptorProme),
|
||||||
grpc.StreamInterceptor(grpcPrometheus.StreamServerInterceptor),
|
grpc.StreamInterceptor(grpcPrometheus.StreamServerInterceptor),
|
||||||
grpc.UnaryInterceptor(grpcPrometheus.UnaryServerInterceptor),
|
grpc.UnaryInterceptor(grpcPrometheus.UnaryServerInterceptor),
|
||||||
}...)
|
}...)
|
||||||
@ -170,7 +173,7 @@ func (c *conversationServer) GetConversations(ctx context.Context, req *pbConver
|
|||||||
|
|
||||||
func (c *conversationServer) BatchSetConversations(ctx context.Context, req *pbConversation.BatchSetConversationsReq) (*pbConversation.BatchSetConversationsResp, error) {
|
func (c *conversationServer) BatchSetConversations(ctx context.Context, req *pbConversation.BatchSetConversationsReq) (*pbConversation.BatchSetConversationsResp, error) {
|
||||||
resp := &pbConversation.BatchSetConversationsResp{}
|
resp := &pbConversation.BatchSetConversationsResp{}
|
||||||
var conversations []*table.ConversationModel
|
var conversations []*tableRelation.ConversationModel
|
||||||
if err := utils.CopyStructFields(&conversations, req.Conversations); err != nil {
|
if err := utils.CopyStructFields(&conversations, req.Conversations); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -203,16 +206,16 @@ func (c *conversationServer) ModifyConversationField(ctx context.Context, req *p
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var conversation table.ConversationModel
|
var conversation tableRelation.ConversationModel
|
||||||
if err := utils.CopyStructFields(&conversation, req.Conversation); err != nil {
|
if err := utils.CopyStructFields(&conversation, req.Conversation); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if req.FieldType == constant.FieldIsPrivateChat {
|
if req.FieldType == constant.FieldIsPrivateChat {
|
||||||
err := c.ConversationInterface.SyncPeerUserPrivateConversationTx(ctx, req.Conversation)
|
err := c.ConversationInterface.SyncPeerUserPrivateConversationTx(ctx, &conversation)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.ConversationSetPrivateNotification(req.OperationID, req.Conversation.OwnerUserID, req.Conversation.UserID, req.Conversation.IsPrivateChat)
|
chat.ConversationSetPrivateNotification(ctx, req.Conversation.OwnerUserID, req.Conversation.UserID, req.Conversation.IsPrivateChat)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
//haveUserID, err := c.ConversationInterface.GetUserIDExistConversation(ctx, req.UserIDList, req.Conversation.ConversationID)
|
//haveUserID, err := c.ConversationInterface.GetUserIDExistConversation(ctx, req.UserIDList, req.Conversation.ConversationID)
|
||||||
@ -239,29 +242,18 @@ func (c *conversationServer) ModifyConversationField(ctx context.Context, req *p
|
|||||||
case constant.FieldBurnDuration:
|
case constant.FieldBurnDuration:
|
||||||
filedMap["burn_duration"] = req.Conversation.BurnDuration
|
filedMap["burn_duration"] = req.Conversation.BurnDuration
|
||||||
}
|
}
|
||||||
c.ConversationInterface.SetUsersConversationFiledTx(ctx, req.UserIDList, &conversation, filedMap)
|
err = c.ConversationInterface.SetUsersConversationFiledTx(ctx, req.UserIDList, &conversation, filedMap)
|
||||||
err = c.ConversationInterface.UpdateUsersConversationFiled(ctx, haveUserID, req.Conversation.ConversationID, filedMap)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
var conversations []*pbConversation.Conversation
|
|
||||||
for _, v := range utils.DifferenceString(haveUserID, req.UserIDList) {
|
|
||||||
temp := new(pbConversation.Conversation)
|
|
||||||
_ = utils.CopyStructFields(temp, req.Conversation)
|
|
||||||
temp.OwnerUserID = v
|
|
||||||
conversations = append(conversations, temp)
|
|
||||||
}
|
|
||||||
err = c.ConversationInterface.CreateConversation(ctx, conversations)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if isSyncConversation {
|
if isSyncConversation {
|
||||||
for _, v := range req.UserIDList {
|
for _, v := range req.UserIDList {
|
||||||
chat.ConversationChangeNotification(req.OperationID, v)
|
chat.ConversationChangeNotification(ctx, v)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for _, v := range req.UserIDList {
|
for _, v := range req.UserIDList {
|
||||||
chat.ConversationUnreadChangeNotification(req.OperationID, v, req.Conversation.ConversationID, req.Conversation.UpdateUnreadCountTime)
|
chat.ConversationUnreadChangeNotification(ctx, v, req.Conversation.ConversationID, req.Conversation.UpdateUnreadCountTime)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
package friend
|
package friend
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/internal/common/check"
|
|
||||||
"Open_IM/internal/common/convert"
|
"Open_IM/internal/common/convert"
|
||||||
chat "Open_IM/internal/rpc/msg"
|
|
||||||
"Open_IM/pkg/common/db/table/relation"
|
"Open_IM/pkg/common/db/table/relation"
|
||||||
"Open_IM/pkg/common/tokenverify"
|
"Open_IM/pkg/common/tokenverify"
|
||||||
"Open_IM/pkg/common/tracelog"
|
"Open_IM/pkg/common/tracelog"
|
||||||
@ -13,14 +11,14 @@ import (
|
|||||||
|
|
||||||
func (s *friendServer) GetPaginationBlacks(ctx context.Context, req *pbFriend.GetPaginationBlacksReq) (resp *pbFriend.GetPaginationBlacksResp, err error) {
|
func (s *friendServer) GetPaginationBlacks(ctx context.Context, req *pbFriend.GetPaginationBlacksReq) (resp *pbFriend.GetPaginationBlacksResp, err error) {
|
||||||
resp = &pbFriend.GetPaginationBlacksResp{}
|
resp = &pbFriend.GetPaginationBlacksResp{}
|
||||||
if err := check.Access(ctx, req.UserID); err != nil {
|
if err := s.userCheck.Access(ctx, req.UserID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
blacks, total, err := s.BlackInterface.FindOwnerBlacks(ctx, req.UserID, req.Pagination.PageNumber, req.Pagination.ShowNumber)
|
blacks, total, err := s.BlackInterface.FindOwnerBlacks(ctx, req.UserID, req.Pagination.PageNumber, req.Pagination.ShowNumber)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
resp.Blacks, err = (*convert.DBBlack)(nil).DB2PB(blacks)
|
resp.Blacks, err = (*convert.NewDBBlack(nil, s.RegisterCenter)).DB2PB(ctx, blacks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -41,13 +39,13 @@ func (s *friendServer) IsBlack(ctx context.Context, req *pbFriend.IsBlackReq) (*
|
|||||||
|
|
||||||
func (s *friendServer) RemoveBlack(ctx context.Context, req *pbFriend.RemoveBlackReq) (*pbFriend.RemoveBlackResp, error) {
|
func (s *friendServer) RemoveBlack(ctx context.Context, req *pbFriend.RemoveBlackReq) (*pbFriend.RemoveBlackResp, error) {
|
||||||
resp := &pbFriend.RemoveBlackResp{}
|
resp := &pbFriend.RemoveBlackResp{}
|
||||||
if err := check.Access(ctx, req.OwnerUserID); err != nil {
|
if err := s.userCheck.Access(ctx, req.OwnerUserID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if err := s.BlackInterface.Delete(ctx, []*relation.BlackModel{{OwnerUserID: req.OwnerUserID, BlockUserID: req.BlackUserID}}); err != nil {
|
if err := s.BlackInterface.Delete(ctx, []*relation.BlackModel{{OwnerUserID: req.OwnerUserID, BlockUserID: req.BlackUserID}}); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.BlackDeletedNotification(ctx, req)
|
s.notification.BlackDeletedNotification(ctx, req)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,6 +58,6 @@ func (s *friendServer) AddBlack(ctx context.Context, req *pbFriend.AddBlackReq)
|
|||||||
if err := s.BlackInterface.Create(ctx, []*relation.BlackModel{&black}); err != nil {
|
if err := s.BlackInterface.Create(ctx, []*relation.BlackModel{&black}); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.BlackAddedNotification(ctx, req)
|
s.notification.BlackAddedNotification(ctx, req)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
@ -1,59 +1,26 @@
|
|||||||
package friend
|
package friend
|
||||||
|
|
||||||
import (
|
import (
|
||||||
cbApi "Open_IM/pkg/callback_struct"
|
cbapi "Open_IM/pkg/callbackstruct"
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/http"
|
"Open_IM/pkg/common/http"
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
"Open_IM/pkg/common/tracelog"
|
"Open_IM/pkg/common/tracelog"
|
||||||
pbFriend "Open_IM/pkg/proto/friend"
|
pbfriend "Open_IM/pkg/proto/friend"
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
//"Open_IM/pkg/proto/msg"
|
|
||||||
"Open_IM/pkg/utils"
|
|
||||||
http2 "net/http"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func callbackBeforeAddFriendV1(ctx context.Context, req *pbFriend.AddFriendReq) error {
|
func CallbackBeforeAddFriend(ctx context.Context, req *pbfriend.ApplyToAddFriendReq) error {
|
||||||
resp := callbackBeforeAddFriend(ctx, req)
|
|
||||||
if resp.ErrCode != 0 {
|
|
||||||
return (&constant.ErrInfo{
|
|
||||||
ErrCode: resp.ErrCode,
|
|
||||||
ErrMsg: resp.ErrMsg,
|
|
||||||
}).Wrap()
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func callbackBeforeAddFriend(ctx context.Context, req *pbFriend.AddFriendReq) cbApi.CommonCallbackResp {
|
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: tracelog.GetOperationID(ctx)}
|
|
||||||
if !config.Config.Callback.CallbackBeforeAddFriend.Enable {
|
if !config.Config.Callback.CallbackBeforeAddFriend.Enable {
|
||||||
return callbackResp
|
return nil
|
||||||
}
|
}
|
||||||
|
cbReq := &cbapi.CallbackBeforeAddFriendReq{
|
||||||
commonCallbackReq := &cbApi.CallbackBeforeAddFriendReq{
|
|
||||||
CallbackCommand: constant.CallbackBeforeAddFriendCommand,
|
CallbackCommand: constant.CallbackBeforeAddFriendCommand,
|
||||||
FromUserID: req.FromUserID,
|
FromUserID: req.FromUserID,
|
||||||
ToUserID: req.ToUserID,
|
ToUserID: req.ToUserID,
|
||||||
ReqMsg: req.ReqMsg,
|
ReqMsg: req.ReqMsg,
|
||||||
OperationID: tracelog.GetOperationID(ctx),
|
OperationID: tracelog.GetOperationID(ctx),
|
||||||
}
|
}
|
||||||
resp := &cbApi.CallbackBeforeAddFriendResp{
|
resp := &cbapi.CallbackBeforeAddFriendResp{}
|
||||||
CommonCallbackResp: &callbackResp,
|
return http.CallBackPostReturn(config.Config.Callback.CallbackUrl, cbReq, resp, config.Config.Callback.CallbackBeforeAddFriend)
|
||||||
}
|
|
||||||
//utils.CopyStructFields(req, msg.MsgData)
|
|
||||||
defer log.NewDebug(tracelog.GetOperationID(ctx), utils.GetSelfFuncName(), commonCallbackReq, *resp)
|
|
||||||
if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeAddFriendCommand, commonCallbackReq, resp, config.Config.Callback.CallbackBeforeAddFriend); err != nil {
|
|
||||||
callbackResp.ErrCode = http2.StatusInternalServerError
|
|
||||||
callbackResp.ErrMsg = err.Error()
|
|
||||||
if !*config.Config.Callback.CallbackBeforeAddFriend.CallbackFailedContinue {
|
|
||||||
callbackResp.ActionCode = constant.ActionForbidden
|
|
||||||
return callbackResp
|
|
||||||
} else {
|
|
||||||
callbackResp.ActionCode = constant.ActionAllow
|
|
||||||
return callbackResp
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
|
@ -3,110 +3,60 @@ package friend
|
|||||||
import (
|
import (
|
||||||
"Open_IM/internal/common/check"
|
"Open_IM/internal/common/check"
|
||||||
"Open_IM/internal/common/convert"
|
"Open_IM/internal/common/convert"
|
||||||
"Open_IM/internal/common/rpc_server"
|
"Open_IM/internal/common/notification"
|
||||||
chat "Open_IM/internal/rpc/msg"
|
|
||||||
"Open_IM/pkg/common/config"
|
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/db/controller"
|
"Open_IM/pkg/common/db/controller"
|
||||||
"Open_IM/pkg/common/db/relation"
|
"Open_IM/pkg/common/db/relation"
|
||||||
relationTb "Open_IM/pkg/common/db/table/relation"
|
relationTb "Open_IM/pkg/common/db/table/relation"
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
"Open_IM/pkg/common/middleware"
|
|
||||||
prome "Open_IM/pkg/common/prometheus"
|
|
||||||
"Open_IM/pkg/common/tokenverify"
|
"Open_IM/pkg/common/tokenverify"
|
||||||
"Open_IM/pkg/common/tracelog"
|
"Open_IM/pkg/common/tracelog"
|
||||||
pbFriend "Open_IM/pkg/proto/friend"
|
discoveryRegistry "Open_IM/pkg/discoveryregistry"
|
||||||
|
pbfriend "Open_IM/pkg/proto/friend"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
"context"
|
"context"
|
||||||
grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
|
"github.com/OpenIMSDK/openKeeper"
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
type friendServer struct {
|
type friendServer struct {
|
||||||
*rpcserver.RpcServer
|
|
||||||
|
|
||||||
controller.FriendInterface
|
controller.FriendInterface
|
||||||
controller.BlackInterface
|
controller.BlackInterface
|
||||||
|
notification *notification.Check
|
||||||
|
userCheck *check.UserCheck
|
||||||
|
RegisterCenter discoveryRegistry.SvcDiscoveryRegistry
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewFriendServer(port int) *friendServer {
|
func Start(client *openKeeper.ZkClient, server *grpc.Server) error {
|
||||||
r, err := rpcserver.NewRpcServer(config.Config.RpcRegisterIP, port, config.Config.RpcRegisterName.OpenImFriendName, config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema)
|
mysql, err := relation.NewGormDB()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
return err
|
||||||
}
|
}
|
||||||
//mysql init
|
if err := mysql.AutoMigrate(&relationTb.FriendModel{}, &relationTb.FriendRequestModel{}, &relationTb.BlackModel{}); err != nil {
|
||||||
var mysql relation.Mysql
|
return err
|
||||||
var model relation.FriendGorm
|
|
||||||
err = mysql.InitConn().AutoMigrateModel(&relationTb.FriendModel{})
|
|
||||||
if err != nil {
|
|
||||||
panic("db init err:" + err.Error())
|
|
||||||
}
|
|
||||||
err = mysql.InitConn().AutoMigrateModel(&relationTb.FriendRequestModel{})
|
|
||||||
if err != nil {
|
|
||||||
panic("db init err:" + err.Error())
|
|
||||||
}
|
|
||||||
err = mysql.InitConn().AutoMigrateModel(&relationTb.BlackModel{})
|
|
||||||
if err != nil {
|
|
||||||
panic("db init err:" + err.Error())
|
|
||||||
}
|
|
||||||
if mysql.GormConn() != nil {
|
|
||||||
model.DB = mysql.GormConn()
|
|
||||||
} else {
|
|
||||||
panic("db init err:" + "conn is nil")
|
|
||||||
}
|
|
||||||
return &friendServer{
|
|
||||||
RpcServer: r,
|
|
||||||
FriendInterface: controller.NewFriendController(model.DB),
|
|
||||||
BlackInterface: controller.NewBlackController(model.DB),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *friendServer) Run() {
|
|
||||||
operationID := utils.OperationIDGenerator()
|
|
||||||
log.NewInfo(operationID, "friendServer run...")
|
|
||||||
listener, address, err := rpcserver.GetTcpListen(config.Config.ListenIP, s.Port)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.NewInfo(operationID, "listen ok ", address)
|
|
||||||
defer listener.Close()
|
|
||||||
//grpc server
|
|
||||||
var grpcOpts []grpc.ServerOption
|
|
||||||
grpcOpts = append(grpcOpts, grpc.UnaryInterceptor(middleware.RpcServerInterceptor))
|
|
||||||
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()
|
|
||||||
pbFriend.RegisterFriendServer(srv, s)
|
|
||||||
err = srv.Serve(listener)
|
|
||||||
if err != nil {
|
|
||||||
log.NewError(operationID, "Serve failed ", err.Error(), listener)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
pbfriend.RegisterFriendServer(server, &friendServer{
|
||||||
|
FriendInterface: controller.NewFriendController(mysql),
|
||||||
|
BlackInterface: controller.NewBlackController(mysql),
|
||||||
|
notification: notification.NewCheck(client),
|
||||||
|
userCheck: check.NewUserCheck(client),
|
||||||
|
RegisterCenter: client,
|
||||||
|
})
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ok
|
// ok
|
||||||
func (s *friendServer) ApplyToAddFriend(ctx context.Context, req *pbFriend.ApplyToAddFriendReq) (resp *pbFriend.ApplyToAddFriendResp, err error) {
|
func (s *friendServer) ApplyToAddFriend(ctx context.Context, req *pbfriend.ApplyToAddFriendReq) (resp *pbfriend.ApplyToAddFriendResp, err error) {
|
||||||
resp = &pbFriend.ApplyToAddFriendResp{}
|
resp = &pbfriend.ApplyToAddFriendResp{}
|
||||||
if err := tokenverify.CheckAccessV3(ctx, req.FromUserID); err != nil {
|
if err := tokenverify.CheckAccessV3(ctx, req.FromUserID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if err := callbackBeforeAddFriendV1(ctx, req); err != nil {
|
if err := CallbackBeforeAddFriend(ctx, req); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if req.ToUserID == req.FromUserID {
|
if req.ToUserID == req.FromUserID {
|
||||||
return nil, constant.ErrCanNotAddYourself.Wrap()
|
return nil, constant.ErrCanNotAddYourself.Wrap()
|
||||||
}
|
}
|
||||||
if _, err := check.GetUsersInfo(ctx, req.ToUserID, req.FromUserID); err != nil {
|
if _, err := s.userCheck.GetUsersInfoMap(ctx, []string{req.ToUserID, req.FromUserID}, true); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
in1, in2, err := s.FriendInterface.CheckIn(ctx, req.FromUserID, req.ToUserID)
|
in1, in2, err := s.FriendInterface.CheckIn(ctx, req.FromUserID, req.ToUserID)
|
||||||
@ -119,17 +69,17 @@ func (s *friendServer) ApplyToAddFriend(ctx context.Context, req *pbFriend.Apply
|
|||||||
if err = s.FriendInterface.AddFriendRequest(ctx, req.FromUserID, req.ToUserID, req.ReqMsg, req.Ex); err != nil {
|
if err = s.FriendInterface.AddFriendRequest(ctx, req.FromUserID, req.ToUserID, req.ReqMsg, req.Ex); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.FriendApplicationAddNotification(ctx, req)
|
s.notification.FriendApplicationAddNotification(ctx, req)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ok
|
// ok
|
||||||
func (s *friendServer) ImportFriends(ctx context.Context, req *pbFriend.ImportFriendReq) (resp *pbFriend.ImportFriendResp, err error) {
|
func (s *friendServer) ImportFriends(ctx context.Context, req *pbfriend.ImportFriendReq) (resp *pbfriend.ImportFriendResp, err error) {
|
||||||
resp = &pbFriend.ImportFriendResp{}
|
resp = &pbfriend.ImportFriendResp{}
|
||||||
if err := tokenverify.CheckAdmin(ctx); err != nil {
|
if err := tokenverify.CheckAdmin(ctx); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if _, err := check.GetUsersInfo(ctx, req.OwnerUserID, req.FriendUserIDs); err != nil {
|
if _, err := s.userCheck.GetUsersInfos(ctx, append([]string{req.OwnerUserID}, req.FriendUserIDs...), true); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,9 +97,9 @@ func (s *friendServer) ImportFriends(ctx context.Context, req *pbFriend.ImportFr
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ok
|
// ok
|
||||||
func (s *friendServer) RespondFriendApply(ctx context.Context, req *pbFriend.RespondFriendApplyReq) (resp *pbFriend.RespondFriendApplyResp, err error) {
|
func (s *friendServer) RespondFriendApply(ctx context.Context, req *pbfriend.RespondFriendApplyReq) (resp *pbfriend.RespondFriendApplyResp, err error) {
|
||||||
resp = &pbFriend.RespondFriendApplyResp{}
|
resp = &pbfriend.RespondFriendApplyResp{}
|
||||||
if err := check.Access(ctx, req.ToUserID); err != nil {
|
if err := s.userCheck.Access(ctx, req.ToUserID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
friendRequest := relationTb.FriendRequestModel{FromUserID: req.FromUserID, ToUserID: req.ToUserID, HandleMsg: req.HandleMsg, HandleResult: req.HandleResult}
|
friendRequest := relationTb.FriendRequestModel{FromUserID: req.FromUserID, ToUserID: req.ToUserID, HandleMsg: req.HandleMsg, HandleResult: req.HandleResult}
|
||||||
@ -158,7 +108,7 @@ func (s *friendServer) RespondFriendApply(ctx context.Context, req *pbFriend.Res
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.FriendApplicationAgreedNotification(ctx, req)
|
s.notification.FriendApplicationAgreedNotification(ctx, req)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
if req.HandleResult == constant.FriendResponseRefuse {
|
if req.HandleResult == constant.FriendResponseRefuse {
|
||||||
@ -166,16 +116,16 @@ func (s *friendServer) RespondFriendApply(ctx context.Context, req *pbFriend.Res
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.FriendApplicationRefusedNotification(ctx, req)
|
s.notification.FriendApplicationRefusedNotification(ctx, req)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
return nil, constant.ErrArgs.Wrap("req.HandleResult != -1/1")
|
return nil, constant.ErrArgs.Wrap("req.HandleResult != -1/1")
|
||||||
}
|
}
|
||||||
|
|
||||||
// ok
|
// ok
|
||||||
func (s *friendServer) DeleteFriend(ctx context.Context, req *pbFriend.DeleteFriendReq) (resp *pbFriend.DeleteFriendResp, err error) {
|
func (s *friendServer) DeleteFriend(ctx context.Context, req *pbfriend.DeleteFriendReq) (resp *pbfriend.DeleteFriendResp, err error) {
|
||||||
resp = &pbFriend.DeleteFriendResp{}
|
resp = &pbfriend.DeleteFriendResp{}
|
||||||
if err := check.Access(ctx, req.OwnerUserID); err != nil {
|
if err := s.userCheck.Access(ctx, req.OwnerUserID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
_, err = s.FindFriendsWithError(ctx, req.OwnerUserID, []string{req.FriendUserID})
|
_, err = s.FindFriendsWithError(ctx, req.OwnerUserID, []string{req.FriendUserID})
|
||||||
@ -185,14 +135,14 @@ func (s *friendServer) DeleteFriend(ctx context.Context, req *pbFriend.DeleteFri
|
|||||||
if err := s.FriendInterface.Delete(ctx, req.OwnerUserID, []string{req.FriendUserID}); err != nil {
|
if err := s.FriendInterface.Delete(ctx, req.OwnerUserID, []string{req.FriendUserID}); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.FriendDeletedNotification(ctx, req)
|
s.notification.FriendDeletedNotification(ctx, req)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ok
|
// ok
|
||||||
func (s *friendServer) SetFriendRemark(ctx context.Context, req *pbFriend.SetFriendRemarkReq) (resp *pbFriend.SetFriendRemarkResp, err error) {
|
func (s *friendServer) SetFriendRemark(ctx context.Context, req *pbfriend.SetFriendRemarkReq) (resp *pbfriend.SetFriendRemarkResp, err error) {
|
||||||
resp = &pbFriend.SetFriendRemarkResp{}
|
resp = &pbfriend.SetFriendRemarkResp{}
|
||||||
if err := check.Access(ctx, req.OwnerUserID); err != nil {
|
if err := s.userCheck.Access(ctx, req.OwnerUserID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
_, err = s.FindFriendsWithError(ctx, req.OwnerUserID, []string{req.FriendUserID})
|
_, err = s.FindFriendsWithError(ctx, req.OwnerUserID, []string{req.FriendUserID})
|
||||||
@ -202,21 +152,21 @@ func (s *friendServer) SetFriendRemark(ctx context.Context, req *pbFriend.SetFri
|
|||||||
if err := s.FriendInterface.UpdateRemark(ctx, req.OwnerUserID, req.FriendUserID, req.Remark); err != nil {
|
if err := s.FriendInterface.UpdateRemark(ctx, req.OwnerUserID, req.FriendUserID, req.Remark); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.FriendRemarkSetNotification(ctx, req.OwnerUserID, req.FriendUserID)
|
s.notification.FriendRemarkSetNotification(ctx, req.OwnerUserID, req.FriendUserID)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// ok
|
// ok
|
||||||
func (s *friendServer) GetDesignatedFriends(ctx context.Context, req *pbFriend.GetDesignatedFriendsReq) (resp *pbFriend.GetDesignatedFriendsResp, err error) {
|
func (s *friendServer) GetDesignatedFriends(ctx context.Context, req *pbfriend.GetDesignatedFriendsReq) (resp *pbfriend.GetDesignatedFriendsResp, err error) {
|
||||||
resp = &pbFriend.GetDesignatedFriendsResp{}
|
resp = &pbfriend.GetDesignatedFriendsResp{}
|
||||||
if err := check.Access(ctx, req.UserID); err != nil {
|
if err := s.userCheck.Access(ctx, req.UserID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
friends, total, err := s.FriendInterface.PageOwnerFriends(ctx, req.UserID, req.Pagination.PageNumber, req.Pagination.ShowNumber)
|
friends, total, err := s.FriendInterface.PageOwnerFriends(ctx, req.UserID, req.Pagination.PageNumber, req.Pagination.ShowNumber)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
resp.FriendsInfo, err = (*convert.DBFriend)(nil).DB2PB(friends)
|
resp.FriendsInfo, err = (*convert.NewDBFriend(nil, s.RegisterCenter)).DB2PB(ctx, friends)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -225,16 +175,16 @@ func (s *friendServer) GetDesignatedFriends(ctx context.Context, req *pbFriend.G
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ok 获取接收到的好友申请(即别人主动申请的)
|
// ok 获取接收到的好友申请(即别人主动申请的)
|
||||||
func (s *friendServer) GetPaginationFriendsApplyTo(ctx context.Context, req *pbFriend.GetPaginationFriendsApplyToReq) (resp *pbFriend.GetPaginationFriendsApplyToResp, err error) {
|
func (s *friendServer) GetPaginationFriendsApplyTo(ctx context.Context, req *pbfriend.GetPaginationFriendsApplyToReq) (resp *pbfriend.GetPaginationFriendsApplyToResp, err error) {
|
||||||
resp = &pbFriend.GetPaginationFriendsApplyToResp{}
|
resp = &pbfriend.GetPaginationFriendsApplyToResp{}
|
||||||
if err := check.Access(ctx, req.UserID); err != nil {
|
if err := s.userCheck.Access(ctx, req.UserID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
friendRequests, total, err := s.FriendInterface.PageFriendRequestToMe(ctx, req.UserID, req.Pagination.PageNumber, req.Pagination.ShowNumber)
|
friendRequests, total, err := s.FriendInterface.PageFriendRequestToMe(ctx, req.UserID, req.Pagination.PageNumber, req.Pagination.ShowNumber)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
resp.FriendRequests, err = (*convert.DBFriendRequest)(nil).DB2PB(friendRequests)
|
resp.FriendRequests, err = (*convert.NewDBFriendRequest(nil, s.RegisterCenter)).DB2PB(ctx, friendRequests)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -243,16 +193,16 @@ func (s *friendServer) GetPaginationFriendsApplyTo(ctx context.Context, req *pbF
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ok 获取主动发出去的好友申请列表
|
// ok 获取主动发出去的好友申请列表
|
||||||
func (s *friendServer) GetPaginationFriendsApplyFrom(ctx context.Context, req *pbFriend.GetPaginationFriendsApplyFromReq) (resp *pbFriend.GetPaginationFriendsApplyFromResp, err error) {
|
func (s *friendServer) GetPaginationFriendsApplyFrom(ctx context.Context, req *pbfriend.GetPaginationFriendsApplyFromReq) (resp *pbfriend.GetPaginationFriendsApplyFromResp, err error) {
|
||||||
resp = &pbFriend.GetPaginationFriendsApplyFromResp{}
|
resp = &pbfriend.GetPaginationFriendsApplyFromResp{}
|
||||||
if err := check.Access(ctx, req.UserID); err != nil {
|
if err := s.userCheck.Access(ctx, req.UserID); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
friendRequests, total, err := s.FriendInterface.PageFriendRequestFromMe(ctx, req.UserID, req.Pagination.PageNumber, req.Pagination.ShowNumber)
|
friendRequests, total, err := s.FriendInterface.PageFriendRequestFromMe(ctx, req.UserID, req.Pagination.PageNumber, req.Pagination.ShowNumber)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
resp.FriendRequests, err = (*convert.DBFriendRequest)(nil).DB2PB(friendRequests)
|
resp.FriendRequests, err = (*convert.NewDBFriendRequest(nil, s.RegisterCenter)).DB2PB(ctx, friendRequests)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -261,8 +211,8 @@ func (s *friendServer) GetPaginationFriendsApplyFrom(ctx context.Context, req *p
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ok
|
// ok
|
||||||
func (s *friendServer) IsFriend(ctx context.Context, req *pbFriend.IsFriendReq) (resp *pbFriend.IsFriendResp, err error) {
|
func (s *friendServer) IsFriend(ctx context.Context, req *pbfriend.IsFriendReq) (resp *pbfriend.IsFriendResp, err error) {
|
||||||
resp = &pbFriend.IsFriendResp{}
|
resp = &pbfriend.IsFriendResp{}
|
||||||
resp.InUser1Friends, resp.InUser2Friends, err = s.FriendInterface.CheckIn(ctx, req.UserID1, req.UserID2)
|
resp.InUser1Friends, resp.InUser2Friends, err = s.FriendInterface.CheckIn(ctx, req.UserID1, req.UserID2)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -271,8 +221,8 @@ func (s *friendServer) IsFriend(ctx context.Context, req *pbFriend.IsFriendReq)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ok
|
// ok
|
||||||
func (s *friendServer) GetPaginationFriends(ctx context.Context, req *pbFriend.GetPaginationFriendsReq) (resp *pbFriend.GetPaginationFriendsResp, err error) {
|
func (s *friendServer) GetPaginationFriends(ctx context.Context, req *pbfriend.GetPaginationFriendsReq) (resp *pbfriend.GetPaginationFriendsResp, err error) {
|
||||||
resp = &pbFriend.GetPaginationFriendsResp{}
|
resp = &pbfriend.GetPaginationFriendsResp{}
|
||||||
if utils.Duplicate(req.FriendUserIDs) {
|
if utils.Duplicate(req.FriendUserIDs) {
|
||||||
return nil, constant.ErrArgs.Wrap("friend userID repeated")
|
return nil, constant.ErrArgs.Wrap("friend userID repeated")
|
||||||
}
|
}
|
||||||
@ -280,7 +230,7 @@ func (s *friendServer) GetPaginationFriends(ctx context.Context, req *pbFriend.G
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if resp.FriendsInfo, err = (*convert.DBFriend)(nil).DB2PB(friends); err != nil {
|
if resp.FriendsInfo, err = (*convert.NewDBFriend(nil, s.RegisterCenter)).DB2PB(ctx, friends); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
|
@ -1,167 +1,139 @@
|
|||||||
package group
|
package group
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"Open_IM/pkg/apistruct"
|
||||||
"Open_IM/pkg/callbackstruct"
|
"Open_IM/pkg/callbackstruct"
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/db/table/relation"
|
"Open_IM/pkg/common/db/table/relation"
|
||||||
"Open_IM/pkg/common/http"
|
"Open_IM/pkg/common/http"
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
"Open_IM/pkg/common/tracelog"
|
"Open_IM/pkg/common/tracelog"
|
||||||
pbGroup "Open_IM/pkg/proto/group"
|
"Open_IM/pkg/proto/group"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
"context"
|
"context"
|
||||||
"google.golang.org/protobuf/types/known/wrapperspb"
|
"google.golang.org/protobuf/types/known/wrapperspb"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func callbackBeforeCreateGroup(ctx context.Context, req *pbGroup.CreateGroupReq) (err error) {
|
func CallbackBeforeCreateGroup(ctx context.Context, req *group.CreateGroupReq) (err error) {
|
||||||
defer func() {
|
|
||||||
tracelog.SetCtxInfo(ctx, utils.GetFuncName(1), err, "req", req)
|
|
||||||
}()
|
|
||||||
if !config.Config.Callback.CallbackBeforeCreateGroup.Enable {
|
if !config.Config.Callback.CallbackBeforeCreateGroup.Enable {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
commonCallbackReq := &cbApi.CallbackBeforeCreateGroupReq{
|
defer func() {
|
||||||
|
tracelog.SetCtxInfo(ctx, utils.GetFuncName(1), err, "req", req)
|
||||||
|
}()
|
||||||
|
cbReq := &callbackstruct.CallbackBeforeCreateGroupReq{
|
||||||
CallbackCommand: constant.CallbackBeforeCreateGroupCommand,
|
CallbackCommand: constant.CallbackBeforeCreateGroupCommand,
|
||||||
OperationID: req.OperationID,
|
OperationID: tracelog.GetOperationID(ctx),
|
||||||
GroupInfo: *req.GroupInfo,
|
GroupInfo: *req.GroupInfo,
|
||||||
InitMemberList: req.InitMemberList,
|
|
||||||
}
|
}
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: req.OperationID}
|
cbReq.InitMemberList = append(cbReq.InitMemberList, &apistruct.GroupAddMemberInfo{
|
||||||
resp := &cbApi.CallbackBeforeCreateGroupResp{
|
UserID: req.OwnerUserID,
|
||||||
CommonCallbackResp: &callbackResp,
|
RoleLevel: constant.GroupOwner,
|
||||||
}
|
})
|
||||||
//utils.CopyStructFields(req, msg.MsgData)
|
for _, userID := range req.AdminUserIDs {
|
||||||
defer log.NewDebug(req.OperationID, utils.GetSelfFuncName(), commonCallbackReq, *resp)
|
cbReq.InitMemberList = append(cbReq.InitMemberList, &apistruct.GroupAddMemberInfo{
|
||||||
err = http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeCreateGroupCommand, commonCallbackReq,
|
UserID: userID,
|
||||||
resp, config.Config.Callback.CallbackBeforeCreateGroup)
|
RoleLevel: constant.GroupAdmin,
|
||||||
if err == nil {
|
})
|
||||||
if resp.GroupID != nil {
|
|
||||||
req.GroupInfo.GroupID = *resp.GroupID
|
|
||||||
}
|
|
||||||
if resp.GroupName != nil {
|
|
||||||
req.GroupInfo.GroupName = *resp.GroupName
|
|
||||||
}
|
|
||||||
if resp.Notification != nil {
|
|
||||||
req.GroupInfo.Notification = *resp.Notification
|
|
||||||
}
|
|
||||||
if resp.Introduction != nil {
|
|
||||||
req.GroupInfo.Introduction = *resp.Introduction
|
|
||||||
}
|
|
||||||
if resp.FaceURL != nil {
|
|
||||||
req.GroupInfo.FaceURL = *resp.FaceURL
|
|
||||||
}
|
|
||||||
if resp.OwnerUserID != nil {
|
|
||||||
req.GroupInfo.OwnerUserID = *resp.OwnerUserID
|
|
||||||
}
|
|
||||||
if resp.Ex != nil {
|
|
||||||
req.GroupInfo.Ex = *resp.Ex
|
|
||||||
}
|
|
||||||
if resp.Status != nil {
|
|
||||||
req.GroupInfo.Status = *resp.Status
|
|
||||||
}
|
|
||||||
if resp.CreatorUserID != nil {
|
|
||||||
req.GroupInfo.CreatorUserID = *resp.CreatorUserID
|
|
||||||
}
|
|
||||||
if resp.GroupType != nil {
|
|
||||||
req.GroupInfo.GroupType = *resp.GroupType
|
|
||||||
}
|
|
||||||
if resp.NeedVerification != nil {
|
|
||||||
req.GroupInfo.NeedVerification = *resp.NeedVerification
|
|
||||||
}
|
|
||||||
if resp.LookMemberInfo != nil {
|
|
||||||
req.GroupInfo.LookMemberInfo = *resp.LookMemberInfo
|
|
||||||
}
|
}
|
||||||
|
for _, userID := range req.AdminUserIDs {
|
||||||
|
cbReq.InitMemberList = append(cbReq.InitMemberList, &apistruct.GroupAddMemberInfo{
|
||||||
|
UserID: userID,
|
||||||
|
RoleLevel: constant.GroupOrdinaryUsers,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
resp := &callbackstruct.CallbackBeforeCreateGroupResp{}
|
||||||
|
err = http.CallBackPostReturn(config.Config.Callback.CallbackUrl, cbReq, resp, config.Config.Callback.CallbackBeforeCreateGroup)
|
||||||
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
}
|
||||||
|
utils.NotNilReplace(&req.GroupInfo.GroupID, resp.GroupID)
|
||||||
|
utils.NotNilReplace(&req.GroupInfo.GroupName, resp.GroupName)
|
||||||
|
utils.NotNilReplace(&req.GroupInfo.Notification, resp.Notification)
|
||||||
|
utils.NotNilReplace(&req.GroupInfo.Introduction, resp.Introduction)
|
||||||
|
utils.NotNilReplace(&req.GroupInfo.FaceURL, resp.FaceURL)
|
||||||
|
utils.NotNilReplace(&req.GroupInfo.OwnerUserID, resp.OwnerUserID)
|
||||||
|
utils.NotNilReplace(&req.GroupInfo.Ex, resp.Ex)
|
||||||
|
utils.NotNilReplace(&req.GroupInfo.Status, resp.Status)
|
||||||
|
utils.NotNilReplace(&req.GroupInfo.CreatorUserID, resp.CreatorUserID)
|
||||||
|
utils.NotNilReplace(&req.GroupInfo.GroupType, resp.GroupType)
|
||||||
|
utils.NotNilReplace(&req.GroupInfo.NeedVerification, resp.NeedVerification)
|
||||||
|
utils.NotNilReplace(&req.GroupInfo.LookMemberInfo, resp.LookMemberInfo)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func CallbackBeforeMemberJoinGroup(ctx context.Context, operationID string, groupMember *relation.GroupMemberModel, groupEx string) (err error) {
|
func CallbackBeforeMemberJoinGroup(ctx context.Context, groupMember *relation.GroupMemberModel, groupEx string) (err error) {
|
||||||
defer func() {
|
|
||||||
tracelog.SetCtxInfo(ctx, utils.GetFuncName(1), err, "groupMember", *groupMember, "groupEx", groupEx)
|
|
||||||
}()
|
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: operationID}
|
|
||||||
if !config.Config.Callback.CallbackBeforeMemberJoinGroup.Enable {
|
if !config.Config.Callback.CallbackBeforeMemberJoinGroup.Enable {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
log.NewDebug(operationID, "args: ", *groupMember)
|
defer func() {
|
||||||
callbackReq := cbApi.CallbackBeforeMemberJoinGroupReq{
|
tracelog.SetCtxInfo(ctx, utils.GetFuncName(1), err, "groupMember", *groupMember, "groupEx", groupEx)
|
||||||
|
}()
|
||||||
|
callbackReq := &callbackstruct.CallbackBeforeMemberJoinGroupReq{
|
||||||
CallbackCommand: constant.CallbackBeforeMemberJoinGroupCommand,
|
CallbackCommand: constant.CallbackBeforeMemberJoinGroupCommand,
|
||||||
OperationID: operationID,
|
OperationID: tracelog.GetOperationID(ctx),
|
||||||
GroupID: groupMember.GroupID,
|
GroupID: groupMember.GroupID,
|
||||||
UserID: groupMember.UserID,
|
UserID: groupMember.UserID,
|
||||||
Ex: groupMember.Ex,
|
Ex: groupMember.Ex,
|
||||||
GroupEx: groupEx,
|
GroupEx: groupEx,
|
||||||
}
|
}
|
||||||
resp := &cbApi.CallbackBeforeMemberJoinGroupResp{
|
resp := &callbackstruct.CallbackBeforeMemberJoinGroupResp{}
|
||||||
CommonCallbackResp: &callbackResp,
|
err = http.CallBackPostReturn(config.Config.Callback.CallbackUrl, callbackReq, resp, config.Config.Callback.CallbackBeforeMemberJoinGroup)
|
||||||
}
|
if err != nil {
|
||||||
err = http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeMemberJoinGroupCommand, callbackReq,
|
|
||||||
resp, config.Config.Callback.CallbackBeforeMemberJoinGroup)
|
|
||||||
if err == nil {
|
|
||||||
if resp.MuteEndTime != nil {
|
|
||||||
groupMember.MuteEndTime = utils.UnixSecondToTime(*resp.MuteEndTime)
|
|
||||||
}
|
|
||||||
if resp.FaceURL != nil {
|
|
||||||
groupMember.FaceURL = *resp.FaceURL
|
|
||||||
}
|
|
||||||
if resp.Ex != nil {
|
|
||||||
groupMember.Ex = *resp.Ex
|
|
||||||
}
|
|
||||||
if resp.NickName != nil {
|
|
||||||
groupMember.Nickname = *resp.NickName
|
|
||||||
}
|
|
||||||
if resp.RoleLevel != nil {
|
|
||||||
groupMember.RoleLevel = *resp.RoleLevel
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return err
|
return err
|
||||||
|
}
|
||||||
|
if resp.MuteEndTime != nil {
|
||||||
|
groupMember.MuteEndTime = time.UnixMilli(*resp.MuteEndTime)
|
||||||
|
}
|
||||||
|
utils.NotNilReplace(&groupMember.FaceURL, resp.FaceURL)
|
||||||
|
utils.NotNilReplace(&groupMember.Ex, resp.Ex)
|
||||||
|
utils.NotNilReplace(&groupMember.Nickname, resp.Nickname)
|
||||||
|
utils.NotNilReplace(&groupMember.RoleLevel, resp.RoleLevel)
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func CallbackBeforeSetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGroupMemberInfo) (err error) {
|
func CallbackBeforeSetGroupMemberInfo(ctx context.Context, req *group.SetGroupMemberInfo) (err error) {
|
||||||
defer func() {
|
|
||||||
tracelog.SetCtxInfo(ctx, utils.GetFuncName(1), err, "req", *req)
|
|
||||||
}()
|
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: req.OperationID}
|
|
||||||
if !config.Config.Callback.CallbackBeforeSetGroupMemberInfo.Enable {
|
if !config.Config.Callback.CallbackBeforeSetGroupMemberInfo.Enable {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
callbackReq := cbApi.CallbackBeforeSetGroupMemberInfoReq{
|
defer func() {
|
||||||
|
tracelog.SetCtxInfo(ctx, utils.GetFuncName(1), err, "req", *req)
|
||||||
|
}()
|
||||||
|
callbackReq := callbackstruct.CallbackBeforeSetGroupMemberInfoReq{
|
||||||
CallbackCommand: constant.CallbackBeforeSetGroupMemberInfoCommand,
|
CallbackCommand: constant.CallbackBeforeSetGroupMemberInfoCommand,
|
||||||
OperationID: req.OperationID,
|
OperationID: tracelog.GetOperationID(ctx),
|
||||||
GroupID: req.GroupID,
|
GroupID: req.GroupID,
|
||||||
UserID: req.UserID,
|
UserID: req.UserID,
|
||||||
}
|
}
|
||||||
if req.Nickname != nil {
|
if req.Nickname != nil {
|
||||||
callbackReq.Nickname = req.Nickname.Value
|
callbackReq.Nickname = &req.Nickname.Value
|
||||||
}
|
}
|
||||||
if req.FaceURL != nil {
|
if req.FaceURL != nil {
|
||||||
callbackReq.FaceURL = req.FaceURL.Value
|
callbackReq.FaceURL = &req.FaceURL.Value
|
||||||
}
|
}
|
||||||
if req.RoleLevel != nil {
|
if req.RoleLevel != nil {
|
||||||
callbackReq.RoleLevel = req.RoleLevel.Value
|
callbackReq.RoleLevel = &req.RoleLevel.Value
|
||||||
}
|
}
|
||||||
if req.Ex != nil {
|
if req.Ex != nil {
|
||||||
callbackReq.Ex = req.Ex.Value
|
callbackReq.Ex = &req.Ex.Value
|
||||||
}
|
}
|
||||||
resp := &cbApi.CallbackBeforeSetGroupMemberInfoResp{
|
resp := &callbackstruct.CallbackBeforeSetGroupMemberInfoResp{}
|
||||||
CommonCallbackResp: &callbackResp,
|
err = http.CallBackPostReturn(config.Config.Callback.CallbackUrl, callbackReq, resp, config.Config.Callback.CallbackBeforeSetGroupMemberInfo)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
}
|
}
|
||||||
err = http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeSetGroupMemberInfoCommand, callbackReq,
|
|
||||||
resp, config.Config.Callback.CallbackBeforeSetGroupMemberInfo.CallbackTimeOut, &config.Config.Callback.CallbackBeforeSetGroupMemberInfo.CallbackFailedContinue)
|
|
||||||
if err == nil {
|
|
||||||
if resp.FaceURL != nil {
|
if resp.FaceURL != nil {
|
||||||
req.FaceURL = &wrapperspb.StringValue{Value: *resp.FaceURL}
|
req.FaceURL = wrapperspb.String(*resp.FaceURL)
|
||||||
}
|
}
|
||||||
if resp.Nickname != nil {
|
if resp.Nickname != nil {
|
||||||
req.Nickname = &wrapperspb.StringValue{Value: *resp.Nickname}
|
req.Nickname = wrapperspb.String(*resp.Nickname)
|
||||||
}
|
}
|
||||||
if resp.RoleLevel != nil {
|
if resp.RoleLevel != nil {
|
||||||
req.RoleLevel = &wrapperspb.Int32Value{Value: *resp.RoleLevel}
|
req.RoleLevel = wrapperspb.Int32(*resp.RoleLevel)
|
||||||
}
|
}
|
||||||
if resp.Ex != nil {
|
if resp.Ex != nil {
|
||||||
req.Ex = &wrapperspb.StringValue{Value: *resp.Ex}
|
req.Ex = wrapperspb.String(*resp.Ex)
|
||||||
}
|
}
|
||||||
}
|
return nil
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,7 @@ func UpdateGroupInfoMap(group *sdkws.GroupInfoForSet) map[string]any {
|
|||||||
m["group_name"] = group.GroupName
|
m["group_name"] = group.GroupName
|
||||||
}
|
}
|
||||||
if group.Notification != "" {
|
if group.Notification != "" {
|
||||||
m["notification"] = group.Notification
|
m["Notification"] = group.Notification
|
||||||
}
|
}
|
||||||
if group.Introduction != "" {
|
if group.Introduction != "" {
|
||||||
m["introduction"] = group.Introduction
|
m["introduction"] = group.Introduction
|
||||||
|
@ -1,94 +0,0 @@
|
|||||||
package group
|
|
||||||
|
|
||||||
import (
|
|
||||||
"Open_IM/pkg/common/constant"
|
|
||||||
"Open_IM/pkg/common/tracelog"
|
|
||||||
pbConversation "Open_IM/pkg/proto/conversation"
|
|
||||||
sdkws "Open_IM/pkg/proto/sdkws"
|
|
||||||
"Open_IM/pkg/utils"
|
|
||||||
"context"
|
|
||||||
"errors"
|
|
||||||
"math/big"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
func GetPublicUserInfoOne(ctx context.Context, userID string) (*sdkws.PublicUserInfo, error) {
|
|
||||||
return nil, errors.New("todo")
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetUsersInfo(ctx context.Context, userIDs []string) ([]*sdkws.UserInfo, error) {
|
|
||||||
return nil, errors.New("todo")
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetUserInfoMap(ctx context.Context, userIDs []string) (map[string]*sdkws.UserInfo, error) {
|
|
||||||
users, err := GetUsersInfo(ctx, userIDs)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return utils.SliceToMap(users, func(e *sdkws.UserInfo) string {
|
|
||||||
return e.UserID
|
|
||||||
}), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetPublicUserInfo(ctx context.Context, userIDs []string) ([]*sdkws.PublicUserInfo, error) {
|
|
||||||
return nil, errors.New("todo")
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetPublicUserInfoMap(ctx context.Context, userIDs []string) (map[string]*sdkws.PublicUserInfo, error) {
|
|
||||||
users, err := GetPublicUserInfo(ctx, userIDs)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return utils.SliceToMap(users, func(e *sdkws.PublicUserInfo) string {
|
|
||||||
return e.UserID
|
|
||||||
}), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func GetUsername(ctx context.Context, userIDs []string) (map[string]string, error) {
|
|
||||||
if len(userIDs) == 0 {
|
|
||||||
return map[string]string{}, nil
|
|
||||||
}
|
|
||||||
users, err := GetPublicUserInfo(ctx, userIDs)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if ids := utils.Single(userIDs, utils.Slice(users, func(e *sdkws.PublicUserInfo) string {
|
|
||||||
return e.UserID
|
|
||||||
})); len(ids) > 0 {
|
|
||||||
return nil, constant.ErrUserIDNotFound.Wrap(strings.Join(ids, ","))
|
|
||||||
}
|
|
||||||
return utils.SliceToMapAny(users, func(e *sdkws.PublicUserInfo) (string, string) {
|
|
||||||
return e.UserID, e.Nickname
|
|
||||||
}), nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func GroupNotification(ctx context.Context, groupID string) {
|
|
||||||
var conversationReq pbConversation.ModifyConversationFieldReq
|
|
||||||
conversation := pbConversation.Conversation{
|
|
||||||
OwnerUserID: tracelog.GetOpUserID(ctx),
|
|
||||||
ConversationID: utils.GetConversationIDBySessionType(groupID, constant.GroupChatType),
|
|
||||||
ConversationType: constant.GroupChatType,
|
|
||||||
GroupID: groupID,
|
|
||||||
}
|
|
||||||
conversationReq.Conversation = &conversation
|
|
||||||
conversationReq.OperationID = tracelog.GetOperationID(ctx)
|
|
||||||
conversationReq.FieldType = constant.FieldGroupAtType
|
|
||||||
conversation.GroupAtType = constant.GroupNotification
|
|
||||||
conversationReq.UserIDList = cacheResp.UserIDList
|
|
||||||
|
|
||||||
_, err = pbConversation.NewConversationClient(s.etcdConn.GetConn("", config.Config.RpcRegisterName.OpenImConversationName)).ModifyConversationField(ctx, &conversationReq)
|
|
||||||
tracelog.SetCtxInfo(ctx, "ModifyConversationField", err, "req", &conversationReq, "resp", conversationReply)
|
|
||||||
}
|
|
||||||
|
|
||||||
func genGroupID(ctx context.Context, groupID string) string {
|
|
||||||
if groupID != "" {
|
|
||||||
return groupID
|
|
||||||
}
|
|
||||||
groupID = utils.Md5(tracelog.GetOperationID(ctx) + strconv.FormatInt(time.Now().UnixNano(), 10))
|
|
||||||
bi := big.NewInt(0)
|
|
||||||
bi.SetString(groupID[0:8], 16)
|
|
||||||
groupID = bi.String()
|
|
||||||
return groupID
|
|
||||||
}
|
|
@ -1,120 +1,61 @@
|
|||||||
package group
|
package group
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/internal/common/network"
|
"Open_IM/internal/common/check"
|
||||||
chat "Open_IM/internal/rpc/msg"
|
"Open_IM/internal/common/notification"
|
||||||
"Open_IM/pkg/common/config"
|
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/db/cache"
|
"Open_IM/pkg/common/db/cache"
|
||||||
"Open_IM/pkg/common/db/controller"
|
"Open_IM/pkg/common/db/controller"
|
||||||
"Open_IM/pkg/common/db/relation"
|
"Open_IM/pkg/common/db/relation"
|
||||||
relationTb "Open_IM/pkg/common/db/table/relation"
|
relationTb "Open_IM/pkg/common/db/table/relation"
|
||||||
"Open_IM/pkg/common/db/unrelation"
|
"Open_IM/pkg/common/db/unrelation"
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
"Open_IM/pkg/common/middleware"
|
|
||||||
prome "Open_IM/pkg/common/prometheus"
|
|
||||||
"Open_IM/pkg/common/tokenverify"
|
"Open_IM/pkg/common/tokenverify"
|
||||||
"Open_IM/pkg/common/tracelog"
|
"Open_IM/pkg/common/tracelog"
|
||||||
discoveryRegistry "Open_IM/pkg/discoveryregistry"
|
pbConversation "Open_IM/pkg/proto/conversation"
|
||||||
pbGroup "Open_IM/pkg/proto/group"
|
pbGroup "Open_IM/pkg/proto/group"
|
||||||
"Open_IM/pkg/proto/sdkws"
|
"Open_IM/pkg/proto/sdkws"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
|
"github.com/OpenIMSDK/openKeeper"
|
||||||
"net"
|
"google.golang.org/grpc"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"math/big"
|
||||||
|
"math/rand"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/OpenIMSDK/openKeeper"
|
|
||||||
"google.golang.org/grpc"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
func Start(client *openKeeper.ZkClient, server *grpc.Server) error {
|
||||||
|
db, err := relation.NewGormDB()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := db.AutoMigrate(&relationTb.GroupModel{}, &relationTb.GroupMemberModel{}, &relationTb.GroupRequestModel{}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
redis, err := cache.NewRedis()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
mongo, err := unrelation.NewMongo()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
pbGroup.RegisterGroupServer(server, &groupServer{
|
||||||
|
GroupInterface: controller.NewGroupInterface(controller.NewGroupDatabase(db, redis.GetClient(), mongo.GetClient())),
|
||||||
|
UserCheck: check.NewUserCheck(client),
|
||||||
|
ConversationChecker: check.NewConversationChecker(client),
|
||||||
|
})
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type groupServer struct {
|
type groupServer struct {
|
||||||
rpcPort int
|
|
||||||
rpcRegisterName string
|
|
||||||
schema string
|
|
||||||
zkAddr []string
|
|
||||||
GroupInterface controller.GroupInterface
|
GroupInterface controller.GroupInterface
|
||||||
registerCenter discoveryRegistry.SvcDiscoveryRegistry
|
UserCheck *check.UserCheck
|
||||||
}
|
Notification *notification.Check
|
||||||
|
ConversationChecker *check.ConversationChecker
|
||||||
func NewGroupServer(port int) *groupServer {
|
|
||||||
log.NewPrivateLog(constant.LogFileName)
|
|
||||||
g := groupServer{
|
|
||||||
rpcPort: port,
|
|
||||||
rpcRegisterName: config.Config.RpcRegisterName.OpenImGroupName,
|
|
||||||
schema: config.Config.Zookeeper.Schema,
|
|
||||||
zkAddr: config.Config.Zookeeper.ZkAddr,
|
|
||||||
}
|
|
||||||
//mysql init
|
|
||||||
var mysql relation.Mysql
|
|
||||||
var mongo unrelation.Mongo
|
|
||||||
var groupModel relationTb.GroupModel
|
|
||||||
var redis cache.RedisClient
|
|
||||||
err := mysql.InitConn().AutoMigrateModel(&groupModel)
|
|
||||||
if err != nil {
|
|
||||||
panic("db init err:" + err.Error())
|
|
||||||
}
|
|
||||||
mongo.InitMongo()
|
|
||||||
redis.InitRedis()
|
|
||||||
mongo.CreateSuperGroupIndex()
|
|
||||||
zkClient, err := openKeeper.NewClient(config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema, 10, "", "")
|
|
||||||
if err != nil {
|
|
||||||
panic(err.Error())
|
|
||||||
}
|
|
||||||
registerIP, err := network.GetRpcRegisterIP(config.Config.RpcRegisterIP)
|
|
||||||
g.registerCenter = zkClient
|
|
||||||
err = g.registerCenter.Register(config.Config.RpcRegisterName.OpenImGroupName, registerIP, port)
|
|
||||||
if err != nil {
|
|
||||||
panic(err.Error())
|
|
||||||
}
|
|
||||||
//conns, err := g.registerCenter.GetConns(config.Config.RpcRegisterName.OpenImConversationName)
|
|
||||||
g.GroupInterface = controller.NewGroupInterface(mysql.GormConn(), redis.GetClient(), mongo.GetClient())
|
|
||||||
return &g
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *groupServer) Run() {
|
|
||||||
operationID := utils.OperationIDGenerator()
|
|
||||||
log.NewInfo(operationID, "group rpc start ")
|
|
||||||
address := network.GetListenIP(config.Config.ListenIP) + ":" + strconv.Itoa(s.rpcPort)
|
|
||||||
//listener network
|
|
||||||
listener, err := net.Listen("tcp", address)
|
|
||||||
if err != nil {
|
|
||||||
panic("listening err:" + err.Error() + s.rpcRegisterName)
|
|
||||||
}
|
|
||||||
log.NewInfo(operationID, "listen network success, ", address, listener)
|
|
||||||
|
|
||||||
defer listener.Close()
|
|
||||||
//grpc server
|
|
||||||
recvSize := 1024 * 1024 * constant.GroupRPCRecvSize
|
|
||||||
sendSize := 1024 * 1024 * constant.GroupRPCSendSize
|
|
||||||
var grpcOpts = []grpc.ServerOption{
|
|
||||||
grpc.MaxRecvMsgSize(recvSize),
|
|
||||||
grpc.MaxSendMsgSize(sendSize),
|
|
||||||
grpc.UnaryInterceptor(middleware.RpcServerInterceptor),
|
|
||||||
}
|
|
||||||
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()
|
|
||||||
//Service registers with etcd
|
|
||||||
pbGroup.RegisterGroupServer(srv, s)
|
|
||||||
err = srv.Serve(listener)
|
|
||||||
if err != nil {
|
|
||||||
log.NewError(operationID, "Serve failed ", err.Error())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
log.NewInfo(operationID, "group rpc success")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *groupServer) CheckGroupAdmin(ctx context.Context, groupID string) error {
|
func (s *groupServer) CheckGroupAdmin(ctx context.Context, groupID string) error {
|
||||||
@ -130,6 +71,52 @@ func (s *groupServer) CheckGroupAdmin(ctx context.Context, groupID string) error
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *groupServer) GetUsernameMap(ctx context.Context, userIDs []string, complete bool) (map[string]string, error) {
|
||||||
|
if len(userIDs) == 0 {
|
||||||
|
return map[string]string{}, nil
|
||||||
|
}
|
||||||
|
users, err := s.UserCheck.GetPublicUserInfos(ctx, userIDs, complete)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return utils.SliceToMapAny(users, func(e *sdkws.PublicUserInfo) (string, string) {
|
||||||
|
return e.UserID, e.Nickname
|
||||||
|
}), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *groupServer) IsNotFound(err error) bool {
|
||||||
|
return utils.Unwrap(err) == gorm.ErrRecordNotFound
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *groupServer) GenGroupID(ctx context.Context, groupID *string) error {
|
||||||
|
if *groupID != "" {
|
||||||
|
_, err := s.GroupInterface.TakeGroup(ctx, *groupID)
|
||||||
|
if err == nil {
|
||||||
|
return constant.ErrGroupIDExisted.Wrap("group id existed " + *groupID)
|
||||||
|
} else if s.IsNotFound(err) {
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for i := 0; i < 10; i++ {
|
||||||
|
id := utils.Md5(strings.Join([]string{tracelog.GetOperationID(ctx), strconv.FormatInt(time.Now().UnixNano(), 10), strconv.Itoa(rand.Int())}, ",;,"))
|
||||||
|
bi := big.NewInt(0)
|
||||||
|
bi.SetString(id[0:8], 16)
|
||||||
|
id = bi.String()
|
||||||
|
_, err := s.GroupInterface.TakeGroup(ctx, id)
|
||||||
|
if err == nil {
|
||||||
|
continue
|
||||||
|
} else if s.IsNotFound(err) {
|
||||||
|
*groupID = id
|
||||||
|
return nil
|
||||||
|
} else {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return constant.ErrData.Wrap("group id gen error")
|
||||||
|
}
|
||||||
|
|
||||||
func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupReq) (*pbGroup.CreateGroupResp, error) {
|
func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupReq) (*pbGroup.CreateGroupResp, error) {
|
||||||
resp := &pbGroup.CreateGroupResp{GroupInfo: &sdkws.GroupInfo{}}
|
resp := &pbGroup.CreateGroupResp{GroupInfo: &sdkws.GroupInfo{}}
|
||||||
if err := tokenverify.CheckAccessV3(ctx, req.OwnerUserID); err != nil {
|
if err := tokenverify.CheckAccessV3(ctx, req.OwnerUserID); err != nil {
|
||||||
@ -142,19 +129,18 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
|
|||||||
if utils.Duplicate(userIDs) {
|
if utils.Duplicate(userIDs) {
|
||||||
return nil, constant.ErrArgs.Wrap("group member repeated")
|
return nil, constant.ErrArgs.Wrap("group member repeated")
|
||||||
}
|
}
|
||||||
userMap, err := GetUserInfoMap(ctx, userIDs)
|
userMap, err := s.UserCheck.GetUsersInfoMap(ctx, userIDs, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if ids := utils.Single(userIDs, utils.Keys(userMap)); len(ids) > 0 {
|
if err := CallbackBeforeCreateGroup(ctx, req); err != nil {
|
||||||
return nil, constant.ErrUserIDNotFound.Wrap(strings.Join(ids, ","))
|
|
||||||
}
|
|
||||||
if err := callbackBeforeCreateGroup(ctx, req); err != nil {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var groupMembers []*relationTb.GroupMemberModel
|
var groupMembers []*relationTb.GroupMemberModel
|
||||||
group := PbToDBGroupInfo(req.GroupInfo)
|
group := PbToDBGroupInfo(req.GroupInfo)
|
||||||
group.GroupID = genGroupID(ctx, req.GroupInfo.GroupID)
|
if err := s.GenGroupID(ctx, &group.GroupID); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
joinGroup := func(userID string, roleLevel int32) error {
|
joinGroup := func(userID string, roleLevel int32) error {
|
||||||
groupMember := PbToDbGroupMember(userMap[userID])
|
groupMember := PbToDbGroupMember(userMap[userID])
|
||||||
groupMember.Nickname = ""
|
groupMember.Nickname = ""
|
||||||
@ -163,7 +149,7 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
|
|||||||
groupMember.OperatorUserID = tracelog.GetOpUserID(ctx)
|
groupMember.OperatorUserID = tracelog.GetOpUserID(ctx)
|
||||||
groupMember.JoinSource = constant.JoinByInvitation
|
groupMember.JoinSource = constant.JoinByInvitation
|
||||||
groupMember.InviterUserID = tracelog.GetOpUserID(ctx)
|
groupMember.InviterUserID = tracelog.GetOpUserID(ctx)
|
||||||
if err := CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), groupMember, group.Ex); err != nil {
|
if err := CallbackBeforeMemberJoinGroup(ctx, groupMember, group.Ex); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
groupMembers = append(groupMembers, groupMember)
|
groupMembers = append(groupMembers, groupMember)
|
||||||
@ -196,11 +182,11 @@ func (s *groupServer) CreateGroup(ctx context.Context, req *pbGroup.CreateGroupR
|
|||||||
if req.GroupInfo.GroupType == constant.SuperGroup {
|
if req.GroupInfo.GroupType == constant.SuperGroup {
|
||||||
go func() {
|
go func() {
|
||||||
for _, userID := range userIDs {
|
for _, userID := range userIDs {
|
||||||
chat.SuperGroupNotification(tracelog.GetOperationID(ctx), userID, userID)
|
s.Notification.SuperGroupNotification(ctx, userID, userID)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
} else {
|
} else {
|
||||||
chat.GroupCreatedNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), group.GroupID, userIDs)
|
s.Notification.GroupCreatedNotification(ctx, group.GroupID, userIDs)
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
@ -269,13 +255,10 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
|
|||||||
if ids := utils.Single(req.InvitedUserIDs, utils.Keys(memberMap)); len(ids) > 0 {
|
if ids := utils.Single(req.InvitedUserIDs, utils.Keys(memberMap)); len(ids) > 0 {
|
||||||
return nil, constant.ErrArgs.Wrap("user in group " + strings.Join(ids, ","))
|
return nil, constant.ErrArgs.Wrap("user in group " + strings.Join(ids, ","))
|
||||||
}
|
}
|
||||||
userMap, err := GetUserInfoMap(ctx, req.InvitedUserIDs)
|
userMap, err := s.UserCheck.GetUsersInfoMap(ctx, req.InvitedUserIDs, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if ids := utils.Single(req.InvitedUserIDs, utils.Keys(userMap)); len(ids) > 0 {
|
|
||||||
return nil, constant.ErrArgs.Wrap("user not found " + strings.Join(ids, ","))
|
|
||||||
}
|
|
||||||
if group.NeedVerification == constant.AllNeedVerification {
|
if group.NeedVerification == constant.AllNeedVerification {
|
||||||
if !tokenverify.IsAppManagerUid(ctx) {
|
if !tokenverify.IsAppManagerUid(ctx) {
|
||||||
opUserID := tracelog.GetOpUserID(ctx)
|
opUserID := tracelog.GetOpUserID(ctx)
|
||||||
@ -297,7 +280,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
for _, request := range requests {
|
for _, request := range requests {
|
||||||
chat.JoinGroupApplicationNotification(ctx, &pbGroup.JoinGroupReq{
|
s.Notification.JoinGroupApplicationNotification(ctx, &pbGroup.JoinGroupReq{
|
||||||
GroupID: request.GroupID,
|
GroupID: request.GroupID,
|
||||||
ReqMessage: request.ReqMsg,
|
ReqMessage: request.ReqMsg,
|
||||||
JoinSource: request.JoinSource,
|
JoinSource: request.JoinSource,
|
||||||
@ -313,7 +296,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
for _, userID := range req.InvitedUserIDs {
|
for _, userID := range req.InvitedUserIDs {
|
||||||
chat.SuperGroupNotification(tracelog.GetOperationID(ctx), userID, userID)
|
s.Notification.SuperGroupNotification(ctx, userID, userID)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
opUserID := tracelog.GetOpUserID(ctx)
|
opUserID := tracelog.GetOpUserID(ctx)
|
||||||
@ -326,7 +309,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
|
|||||||
member.OperatorUserID = opUserID
|
member.OperatorUserID = opUserID
|
||||||
member.InviterUserID = opUserID
|
member.InviterUserID = opUserID
|
||||||
member.JoinSource = constant.JoinByInvitation
|
member.JoinSource = constant.JoinByInvitation
|
||||||
if err := CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), member, group.Ex); err != nil {
|
if err := CallbackBeforeMemberJoinGroup(ctx, member, group.Ex); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
groupMembers = append(groupMembers, member)
|
groupMembers = append(groupMembers, member)
|
||||||
@ -334,7 +317,7 @@ func (s *groupServer) InviteUserToGroup(ctx context.Context, req *pbGroup.Invite
|
|||||||
if err := s.GroupInterface.CreateGroup(ctx, nil, groupMembers); err != nil {
|
if err := s.GroupInterface.CreateGroup(ctx, nil, groupMembers); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.MemberInvitedNotification(tracelog.GetOperationID(ctx), req.GroupID, tracelog.GetOpUserID(ctx), req.Reason, req.InvitedUserIDs)
|
s.Notification.MemberInvitedNotification(ctx, req.GroupID, req.Reason, req.InvitedUserIDs)
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
@ -352,9 +335,9 @@ func (s *groupServer) GetGroupAllMember(ctx context.Context, req *pbGroup.GetGro
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
nameMap, err := GetUsername(ctx, utils.Filter(members, func(e *relationTb.GroupMemberModel) (string, bool) {
|
nameMap, err := s.GetUsernameMap(ctx, utils.Filter(members, func(e *relationTb.GroupMemberModel) (string, bool) {
|
||||||
return e.UserID, e.Nickname == ""
|
return e.UserID, e.Nickname == ""
|
||||||
}))
|
}), true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -374,9 +357,9 @@ func (s *groupServer) GetGroupMemberList(ctx context.Context, req *pbGroup.GetGr
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
resp.Total = total
|
resp.Total = total
|
||||||
nameMap, err := GetUsername(ctx, utils.Filter(members, func(e *relationTb.GroupMemberModel) (string, bool) {
|
nameMap, err := s.GetUsernameMap(ctx, utils.Filter(members, func(e *relationTb.GroupMemberModel) (string, bool) {
|
||||||
return e.UserID, e.Nickname == ""
|
return e.UserID, e.Nickname == ""
|
||||||
}))
|
}), true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -411,7 +394,7 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou
|
|||||||
}
|
}
|
||||||
go func() {
|
go func() {
|
||||||
for _, userID := range req.KickedUserIDs {
|
for _, userID := range req.KickedUserIDs {
|
||||||
chat.SuperGroupNotification(tracelog.GetOperationID(ctx), userID, userID)
|
s.Notification.SuperGroupNotification(ctx, userID, userID)
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
} else {
|
} else {
|
||||||
@ -451,7 +434,7 @@ func (s *groupServer) KickGroupMember(ctx context.Context, req *pbGroup.KickGrou
|
|||||||
if err := s.GroupInterface.DeleteGroupMember(ctx, group.GroupID, req.KickedUserIDs); err != nil {
|
if err := s.GroupInterface.DeleteGroupMember(ctx, group.GroupID, req.KickedUserIDs); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.MemberKickedNotification(req, req.KickedUserIDs)
|
s.Notification.MemberKickedNotification(ctx, req, req.KickedUserIDs)
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
@ -468,9 +451,9 @@ func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetG
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
nameMap, err := GetUsername(ctx, utils.Filter(members, func(e *relationTb.GroupMemberModel) (string, bool) {
|
nameMap, err := s.GetUsernameMap(ctx, utils.Filter(members, func(e *relationTb.GroupMemberModel) (string, bool) {
|
||||||
return e.UserID, e.Nickname == ""
|
return e.UserID, e.Nickname == ""
|
||||||
}))
|
}), true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -503,13 +486,10 @@ func (s *groupServer) GetGroupApplicationList(ctx context.Context, req *pbGroup.
|
|||||||
}
|
}
|
||||||
userIDs = utils.Distinct(userIDs)
|
userIDs = utils.Distinct(userIDs)
|
||||||
groupIDs = utils.Distinct(groupIDs)
|
groupIDs = utils.Distinct(groupIDs)
|
||||||
userMap, err := GetPublicUserInfoMap(ctx, userIDs)
|
userMap, err := s.UserCheck.GetPublicUserInfoMap(ctx, userIDs, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if ids := utils.Single(utils.Keys(userMap), userIDs); len(ids) > 0 {
|
|
||||||
return nil, constant.ErrUserIDNotFound.Wrap(strings.Join(ids, ","))
|
|
||||||
}
|
|
||||||
groups, err := s.GroupInterface.FindGroup(ctx, utils.Distinct(groupIDs))
|
groups, err := s.GroupInterface.FindGroup(ctx, utils.Distinct(groupIDs))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -588,19 +568,18 @@ func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbGroup
|
|||||||
if groupRequest.HandleResult != 0 {
|
if groupRequest.HandleResult != 0 {
|
||||||
return nil, constant.ErrArgs.Wrap("group request already processed")
|
return nil, constant.ErrArgs.Wrap("group request already processed")
|
||||||
}
|
}
|
||||||
if _, err := s.GroupInterface.TakeGroupMember(ctx, req.GroupID, req.FromUserID); err != nil {
|
var join bool
|
||||||
if !IsNotFound(err) {
|
if _, err = s.GroupInterface.TakeGroupMember(ctx, req.GroupID, req.FromUserID); err == nil {
|
||||||
|
join = true // 已经在群里了
|
||||||
|
} else if !s.IsNotFound(err) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
} else {
|
user, err := s.UserCheck.GetPublicUserInfo(ctx, req.FromUserID)
|
||||||
return nil, constant.ErrArgs.Wrap("already in group")
|
|
||||||
}
|
|
||||||
user, err := GetPublicUserInfoOne(ctx, req.FromUserID)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var member *relationTb.GroupMemberModel
|
var member *relationTb.GroupMemberModel
|
||||||
if req.HandleResult == constant.GroupResponseAgree {
|
if (!join) && req.HandleResult == constant.GroupResponseAgree {
|
||||||
member = &relationTb.GroupMemberModel{
|
member = &relationTb.GroupMemberModel{
|
||||||
GroupID: req.GroupID,
|
GroupID: req.GroupID,
|
||||||
UserID: user.UserID,
|
UserID: user.UserID,
|
||||||
@ -613,25 +592,27 @@ func (s *groupServer) GroupApplicationResponse(ctx context.Context, req *pbGroup
|
|||||||
OperatorUserID: tracelog.GetOpUserID(ctx),
|
OperatorUserID: tracelog.GetOpUserID(ctx),
|
||||||
Ex: groupRequest.Ex,
|
Ex: groupRequest.Ex,
|
||||||
}
|
}
|
||||||
if err = CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), member, group.Ex); err != nil {
|
if err = CallbackBeforeMemberJoinGroup(ctx, member, group.Ex); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := s.GroupInterface.HandlerGroupRequest(ctx, req.GroupID, req.FromUserID, req.HandledMsg, req.HandleResult, member); err != nil {
|
if err := s.GroupInterface.HandlerGroupRequest(ctx, req.GroupID, req.FromUserID, req.HandledMsg, req.HandleResult, member); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if !join {
|
||||||
if req.HandleResult == constant.GroupResponseAgree {
|
if req.HandleResult == constant.GroupResponseAgree {
|
||||||
chat.GroupApplicationAcceptedNotification(req)
|
s.Notification.GroupApplicationAcceptedNotification(ctx, req)
|
||||||
chat.MemberEnterNotification(req)
|
s.Notification.MemberEnterNotification(ctx, req)
|
||||||
} else if req.HandleResult == constant.GroupResponseRefuse {
|
} else if req.HandleResult == constant.GroupResponseRefuse {
|
||||||
chat.GroupApplicationRejectedNotification(req)
|
s.Notification.GroupApplicationRejectedNotification(ctx, req)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) (*pbGroup.JoinGroupResp, error) {
|
func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq) (*pbGroup.JoinGroupResp, error) {
|
||||||
resp := &pbGroup.JoinGroupResp{}
|
resp := &pbGroup.JoinGroupResp{}
|
||||||
if _, err := GetPublicUserInfoOne(ctx, tracelog.GetOpUserID(ctx)); err != nil {
|
if _, err := s.UserCheck.GetPublicUserInfo(ctx, tracelog.GetOpUserID(ctx)); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
group, err := s.GroupInterface.TakeGroup(ctx, req.GroupID)
|
group, err := s.GroupInterface.TakeGroup(ctx, req.GroupID)
|
||||||
@ -655,13 +636,13 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq)
|
|||||||
groupMember.OperatorUserID = tracelog.GetOpUserID(ctx)
|
groupMember.OperatorUserID = tracelog.GetOpUserID(ctx)
|
||||||
groupMember.JoinSource = constant.JoinByInvitation
|
groupMember.JoinSource = constant.JoinByInvitation
|
||||||
groupMember.InviterUserID = tracelog.GetOpUserID(ctx)
|
groupMember.InviterUserID = tracelog.GetOpUserID(ctx)
|
||||||
if err := CallbackBeforeMemberJoinGroup(ctx, tracelog.GetOperationID(ctx), groupMember, group.Ex); err != nil {
|
if err := CallbackBeforeMemberJoinGroup(ctx, groupMember, group.Ex); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if err := s.GroupInterface.CreateGroup(ctx, nil, []*relationTb.GroupMemberModel{groupMember}); err != nil {
|
if err := s.GroupInterface.CreateGroup(ctx, nil, []*relationTb.GroupMemberModel{groupMember}); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.MemberEnterDirectlyNotification(req.GroupID, tracelog.GetOpUserID(ctx), tracelog.GetOperationID(ctx))
|
s.Notification.MemberEnterDirectlyNotification(ctx, req.GroupID, tracelog.GetOpUserID(ctx), tracelog.GetOperationID(ctx))
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
groupRequest := relationTb.GroupRequestModel{
|
groupRequest := relationTb.GroupRequestModel{
|
||||||
@ -674,7 +655,7 @@ func (s *groupServer) JoinGroup(ctx context.Context, req *pbGroup.JoinGroupReq)
|
|||||||
if err := s.GroupInterface.CreateGroupRequest(ctx, []*relationTb.GroupRequestModel{&groupRequest}); err != nil {
|
if err := s.GroupInterface.CreateGroupRequest(ctx, []*relationTb.GroupRequestModel{&groupRequest}); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.JoinGroupApplicationNotification(ctx, req)
|
s.Notification.JoinGroupApplicationNotification(ctx, req)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -688,13 +669,13 @@ func (s *groupServer) QuitGroup(ctx context.Context, req *pbGroup.QuitGroupReq)
|
|||||||
if err := s.GroupInterface.DeleteSuperGroupMember(ctx, req.GroupID, []string{tracelog.GetOpUserID(ctx)}); err != nil {
|
if err := s.GroupInterface.DeleteSuperGroupMember(ctx, req.GroupID, []string{tracelog.GetOpUserID(ctx)}); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.SuperGroupNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), tracelog.GetOpUserID(ctx))
|
s.Notification.SuperGroupNotification(ctx, tracelog.GetOpUserID(ctx), tracelog.GetOpUserID(ctx))
|
||||||
} else {
|
} else {
|
||||||
_, err := s.GroupInterface.TakeGroupMember(ctx, req.GroupID, tracelog.GetOpUserID(ctx))
|
_, err := s.GroupInterface.TakeGroupMember(ctx, req.GroupID, tracelog.GetOpUserID(ctx))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.MemberQuitNotification(req)
|
s.Notification.MemberQuitNotification(ctx, req)
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
@ -717,6 +698,10 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf
|
|||||||
if group.Status == constant.GroupStatusDismissed {
|
if group.Status == constant.GroupStatusDismissed {
|
||||||
return nil, utils.Wrap(constant.ErrDismissedAlready, "")
|
return nil, utils.Wrap(constant.ErrDismissedAlready, "")
|
||||||
}
|
}
|
||||||
|
userIDs, err := s.GroupInterface.FindGroupMemberUserID(ctx, group.GroupID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
data := UpdateGroupInfoMap(req.GroupInfoForSet)
|
data := UpdateGroupInfoMap(req.GroupInfoForSet)
|
||||||
if len(data) > 0 {
|
if len(data) > 0 {
|
||||||
return resp, nil
|
return resp, nil
|
||||||
@ -728,9 +713,21 @@ func (s *groupServer) SetGroupInfo(ctx context.Context, req *pbGroup.SetGroupInf
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.GroupInfoSetNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupInfoForSet.GroupID, group.GroupName, group.Notification, group.Introduction, group.FaceURL, req.GroupInfoForSet.NeedVerification)
|
s.Notification.GroupInfoSetNotification(ctx, req.GroupInfoForSet.GroupID, group.GroupName, group.Notification, group.Introduction, group.FaceURL, req.GroupInfoForSet.NeedVerification)
|
||||||
if req.GroupInfoForSet.Notification != "" {
|
if req.GroupInfoForSet.Notification != "" {
|
||||||
GroupNotification(ctx, group.GroupID)
|
args := pbConversation.ModifyConversationFieldReq{
|
||||||
|
Conversation: &pbConversation.Conversation{
|
||||||
|
OwnerUserID: tracelog.GetOpUserID(ctx),
|
||||||
|
ConversationID: utils.GetConversationIDBySessionType(group.GroupID, constant.GroupChatType),
|
||||||
|
ConversationType: constant.GroupChatType,
|
||||||
|
GroupID: group.GroupID,
|
||||||
|
},
|
||||||
|
FieldType: constant.FieldGroupAtType,
|
||||||
|
UserIDList: userIDs,
|
||||||
|
}
|
||||||
|
if err := s.ConversationChecker.ModifyConversationField(ctx, &args); err != nil {
|
||||||
|
tracelog.SetCtxWarn(ctx, "ModifyConversationField", err, args)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
@ -778,7 +775,7 @@ func (s *groupServer) TransferGroupOwner(ctx context.Context, req *pbGroup.Trans
|
|||||||
if err := s.GroupInterface.TransferGroupOwner(ctx, req.GroupID, req.OldOwnerUserID, req.NewOwnerUserID, newOwner.RoleLevel); err != nil {
|
if err := s.GroupInterface.TransferGroupOwner(ctx, req.GroupID, req.OldOwnerUserID, req.NewOwnerUserID, newOwner.RoleLevel); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.GroupOwnerTransferredNotification(req)
|
s.Notification.GroupOwnerTransferredNotification(ctx, req)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -828,9 +825,9 @@ func (s *groupServer) GetGroupMembersCMS(ctx context.Context, req *pbGroup.GetGr
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
resp.Total = total
|
resp.Total = total
|
||||||
nameMap, err := GetUsername(ctx, utils.Filter(members, func(e *relationTb.GroupMemberModel) (string, bool) {
|
nameMap, err := s.GetUsernameMap(ctx, utils.Filter(members, func(e *relationTb.GroupMemberModel) (string, bool) {
|
||||||
return e.UserID, e.Nickname == ""
|
return e.UserID, e.Nickname == ""
|
||||||
}))
|
}), true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -845,7 +842,7 @@ func (s *groupServer) GetGroupMembersCMS(ctx context.Context, req *pbGroup.GetGr
|
|||||||
|
|
||||||
func (s *groupServer) GetUserReqApplicationList(ctx context.Context, req *pbGroup.GetUserReqApplicationListReq) (*pbGroup.GetUserReqApplicationListResp, error) {
|
func (s *groupServer) GetUserReqApplicationList(ctx context.Context, req *pbGroup.GetUserReqApplicationListReq) (*pbGroup.GetUserReqApplicationListResp, error) {
|
||||||
resp := &pbGroup.GetUserReqApplicationListResp{}
|
resp := &pbGroup.GetUserReqApplicationListResp{}
|
||||||
user, err := GetPublicUserInfoOne(ctx, req.UserID)
|
user, err := s.UserCheck.GetPublicUserInfo(ctx, req.UserID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -910,7 +907,7 @@ func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGrou
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
chat.GroupDismissedNotification(req)
|
s.Notification.GroupDismissedNotification(ctx, req)
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
@ -934,7 +931,7 @@ func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGrou
|
|||||||
if err := s.GroupInterface.UpdateGroupMember(ctx, member.GroupID, member.UserID, data); err != nil {
|
if err := s.GroupInterface.UpdateGroupMember(ctx, member.GroupID, member.UserID, data); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.GroupMemberMutedNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupID, req.UserID, req.MutedSeconds)
|
s.Notification.GroupMemberMutedNotification(ctx, req.GroupID, req.UserID, req.MutedSeconds)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -957,7 +954,7 @@ func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.Ca
|
|||||||
if err := s.GroupInterface.UpdateGroupMember(ctx, member.GroupID, member.UserID, data); err != nil {
|
if err := s.GroupInterface.UpdateGroupMember(ctx, member.GroupID, member.UserID, data); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.GroupMemberCancelMutedNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupID, req.UserID)
|
s.Notification.GroupMemberCancelMutedNotification(ctx, req.GroupID, req.UserID)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -969,7 +966,7 @@ func (s *groupServer) MuteGroup(ctx context.Context, req *pbGroup.MuteGroupReq)
|
|||||||
if err := s.GroupInterface.UpdateGroup(ctx, req.GroupID, UpdateGroupStatusMap(constant.GroupStatusMuted)); err != nil {
|
if err := s.GroupInterface.UpdateGroup(ctx, req.GroupID, UpdateGroupStatusMap(constant.GroupStatusMuted)); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.GroupMutedNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupID)
|
s.Notification.GroupMutedNotification(ctx, req.GroupID)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -981,7 +978,7 @@ func (s *groupServer) CancelMuteGroup(ctx context.Context, req *pbGroup.CancelMu
|
|||||||
if err := s.GroupInterface.UpdateGroup(ctx, req.GroupID, UpdateGroupStatusMap(constant.GroupOk)); err != nil {
|
if err := s.GroupInterface.UpdateGroup(ctx, req.GroupID, UpdateGroupStatusMap(constant.GroupOk)); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.GroupCancelMutedNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), req.GroupID)
|
s.Notification.GroupCancelMutedNotification(ctx, req.GroupID)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1058,7 +1055,7 @@ func (s *groupServer) SetGroupMemberInfo(ctx context.Context, req *pbGroup.SetGr
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
for _, member := range req.Members {
|
for _, member := range req.Members {
|
||||||
chat.GroupMemberInfoSetNotification(tracelog.GetOperationID(ctx), tracelog.GetOpUserID(ctx), member.GroupID, member.UserID)
|
s.Notification.GroupMemberInfoSetNotification(ctx, member.GroupID, member.UserID)
|
||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
@ -1103,9 +1100,9 @@ func (s *groupServer) GetUserInGroupMembers(ctx context.Context, req *pbGroup.Ge
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
nameMap, err := GetUsername(ctx, utils.Filter(members, func(e *relationTb.GroupMemberModel) (string, bool) {
|
nameMap, err := s.GetUsernameMap(ctx, utils.Filter(members, func(e *relationTb.GroupMemberModel) (string, bool) {
|
||||||
return e.UserID, e.Nickname == ""
|
return e.UserID, e.Nickname == ""
|
||||||
}))
|
}), true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -1127,3 +1124,27 @@ func (s *groupServer) GetGroupMemberUserID(ctx context.Context, req *pbGroup.Get
|
|||||||
}
|
}
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *groupServer) GetGroupMemberRoleLevel(ctx context.Context, req *pbGroup.GetGroupMemberRoleLevelReq) (*pbGroup.GetGroupMemberRoleLevelResp, error) {
|
||||||
|
resp := &pbGroup.GetGroupMemberRoleLevelResp{}
|
||||||
|
if len(req.RoleLevels) == 0 {
|
||||||
|
return nil, constant.ErrArgs.Wrap("RoleLevels empty")
|
||||||
|
}
|
||||||
|
members, err := s.GroupInterface.FindGroupMember(ctx, []string{req.GroupID}, nil, req.RoleLevels)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
nameMap, err := s.GetUsernameMap(ctx, utils.Filter(members, func(e *relationTb.GroupMemberModel) (string, bool) {
|
||||||
|
return e.UserID, e.Nickname == ""
|
||||||
|
}), true)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
resp.Members = utils.Slice(members, func(e *relationTb.GroupMemberModel) *sdkws.GroupMemberFullInfo {
|
||||||
|
if e.Nickname == "" {
|
||||||
|
e.Nickname = nameMap[e.UserID]
|
||||||
|
}
|
||||||
|
return DbToPbGroupMembersCMSResp(e)
|
||||||
|
})
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
package group
|
|
||||||
|
|
||||||
import (
|
|
||||||
"Open_IM/pkg/common/tracelog"
|
|
||||||
"gorm.io/gorm"
|
|
||||||
)
|
|
||||||
|
|
||||||
func IsNotFound(err error) bool {
|
|
||||||
if err == nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
return tracelog.Unwrap(err) == gorm.ErrRecordNotFound
|
|
||||||
}
|
|
@ -1,23 +1,27 @@
|
|||||||
package msg
|
package msg
|
||||||
|
|
||||||
import (
|
import (
|
||||||
cbApi "Open_IM/pkg/callback_struct"
|
cbapi "Open_IM/pkg/callbackstruct"
|
||||||
"Open_IM/pkg/common/callback"
|
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/http"
|
"Open_IM/pkg/common/http"
|
||||||
"Open_IM/pkg/common/log"
|
"Open_IM/pkg/common/tracelog"
|
||||||
pbChat "Open_IM/pkg/proto/msg"
|
pbChat "Open_IM/pkg/proto/msg"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
http2 "net/http"
|
"context"
|
||||||
)
|
)
|
||||||
|
|
||||||
func copyCallbackCommonReqStruct(msg *pbChat.SendMsgReq) cbApi.CommonCallbackReq {
|
func cbURL() string {
|
||||||
req := cbApi.CommonCallbackReq{
|
return config.Config.Callback.CallbackUrl
|
||||||
|
}
|
||||||
|
|
||||||
|
func toCommonCallback(ctx context.Context, msg *pbChat.SendMsgReq, command string) cbapi.CommonCallbackReq {
|
||||||
|
return cbapi.CommonCallbackReq{
|
||||||
SendID: msg.MsgData.SendID,
|
SendID: msg.MsgData.SendID,
|
||||||
ServerMsgID: msg.MsgData.ServerMsgID,
|
ServerMsgID: msg.MsgData.ServerMsgID,
|
||||||
|
CallbackCommand: command,
|
||||||
ClientMsgID: msg.MsgData.ClientMsgID,
|
ClientMsgID: msg.MsgData.ClientMsgID,
|
||||||
OperationID: msg.OperationID,
|
OperationID: tracelog.GetOperationID(ctx),
|
||||||
SenderPlatformID: msg.MsgData.SenderPlatformID,
|
SenderPlatformID: msg.MsgData.SenderPlatformID,
|
||||||
SenderNickname: msg.MsgData.SenderNickname,
|
SenderNickname: msg.MsgData.SenderNickname,
|
||||||
SessionType: msg.MsgData.SessionType,
|
SessionType: msg.MsgData.SessionType,
|
||||||
@ -27,202 +31,90 @@ func copyCallbackCommonReqStruct(msg *pbChat.SendMsgReq) cbApi.CommonCallbackReq
|
|||||||
CreateTime: msg.MsgData.CreateTime,
|
CreateTime: msg.MsgData.CreateTime,
|
||||||
AtUserIDList: msg.MsgData.AtUserIDList,
|
AtUserIDList: msg.MsgData.AtUserIDList,
|
||||||
SenderFaceURL: msg.MsgData.SenderFaceURL,
|
SenderFaceURL: msg.MsgData.SenderFaceURL,
|
||||||
Content: callback.GetContent(msg.MsgData),
|
Content: utils.GetContent(msg.MsgData),
|
||||||
Seq: msg.MsgData.Seq,
|
Seq: msg.MsgData.Seq,
|
||||||
Ex: msg.MsgData.Ex,
|
Ex: msg.MsgData.Ex,
|
||||||
}
|
}
|
||||||
return req
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func callbackBeforeSendSingleMsg(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp {
|
func CallbackBeforeSendSingleMsg(ctx context.Context, msg *pbChat.SendMsgReq) error {
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: msg.OperationID}
|
|
||||||
if !config.Config.Callback.CallbackBeforeSendSingleMsg.Enable {
|
if !config.Config.Callback.CallbackBeforeSendSingleMsg.Enable {
|
||||||
return callbackResp
|
return nil
|
||||||
}
|
}
|
||||||
log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), msg)
|
req := &cbapi.CallbackBeforeSendSingleMsgReq{
|
||||||
commonCallbackReq := copyCallbackCommonReqStruct(msg)
|
CommonCallbackReq: toCommonCallback(ctx, msg, constant.CallbackBeforeSendSingleMsgCommand),
|
||||||
commonCallbackReq.CallbackCommand = constant.CallbackBeforeSendSingleMsgCommand
|
|
||||||
req := cbApi.CallbackBeforeSendSingleMsgReq{
|
|
||||||
CommonCallbackReq: commonCallbackReq,
|
|
||||||
RecvID: msg.MsgData.RecvID,
|
RecvID: msg.MsgData.RecvID,
|
||||||
}
|
}
|
||||||
resp := &cbApi.CallbackBeforeSendSingleMsgResp{
|
resp := &cbapi.CallbackBeforeSendSingleMsgResp{}
|
||||||
CommonCallbackResp: &callbackResp,
|
return http.CallBackPostReturn(cbURL(), req, resp, config.Config.Callback.CallbackBeforeSendSingleMsg)
|
||||||
}
|
|
||||||
//utils.CopyStructFields(req, msg.MsgData)
|
|
||||||
defer log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), req, *resp)
|
|
||||||
if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeSendSingleMsgCommand,
|
|
||||||
req, resp, config.Config.Callback.CallbackBeforeSendSingleMsg.CallbackTimeOut, &config.Config.Callback.CallbackBeforeSendSingleMsg.CallbackFailedContinue); err != nil {
|
|
||||||
callbackResp.ErrCode = http2.StatusInternalServerError
|
|
||||||
callbackResp.ErrMsg = err.Error()
|
|
||||||
if !config.Config.Callback.CallbackBeforeSendSingleMsg.CallbackFailedContinue {
|
|
||||||
callbackResp.ActionCode = constant.ActionForbidden
|
|
||||||
return callbackResp
|
|
||||||
} else {
|
|
||||||
callbackResp.ActionCode = constant.ActionAllow
|
|
||||||
return callbackResp
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func callbackAfterSendSingleMsg(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp {
|
func CallbackAfterSendSingleMsg(ctx context.Context, msg *pbChat.SendMsgReq) error {
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: msg.OperationID}
|
|
||||||
if !config.Config.Callback.CallbackAfterSendSingleMsg.Enable {
|
if !config.Config.Callback.CallbackAfterSendSingleMsg.Enable {
|
||||||
return callbackResp
|
return nil
|
||||||
}
|
}
|
||||||
log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), msg)
|
req := &cbapi.CallbackAfterSendSingleMsgReq{
|
||||||
commonCallbackReq := copyCallbackCommonReqStruct(msg)
|
CommonCallbackReq: toCommonCallback(ctx, msg, constant.CallbackBeforeSendSingleMsgCommand),
|
||||||
commonCallbackReq.CallbackCommand = constant.CallbackAfterSendSingleMsgCommand
|
|
||||||
req := cbApi.CallbackAfterSendSingleMsgReq{
|
|
||||||
CommonCallbackReq: commonCallbackReq,
|
|
||||||
RecvID: msg.MsgData.RecvID,
|
RecvID: msg.MsgData.RecvID,
|
||||||
}
|
}
|
||||||
resp := &cbApi.CallbackAfterSendSingleMsgResp{CommonCallbackResp: &callbackResp}
|
resp := &cbapi.CallbackAfterSendSingleMsgResp{}
|
||||||
defer log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), req, *resp)
|
return http.CallBackPostReturn(cbURL(), req, resp, config.Config.Callback.CallbackAfterSendSingleMsg)
|
||||||
if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackAfterSendSingleMsgCommand,
|
|
||||||
req, resp, config.Config.Callback.CallbackAfterSendSingleMsg.CallbackTimeOut, &config.Config.Callback.CallbackAfterSendSingleMsg.CallbackFailedContinue); err != nil {
|
|
||||||
callbackResp.ErrCode = http2.StatusInternalServerError
|
|
||||||
callbackResp.ErrMsg = err.Error()
|
|
||||||
return callbackResp
|
|
||||||
}
|
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func callbackBeforeSendGroupMsg(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp {
|
func CallbackBeforeSendGroupMsg(ctx context.Context, msg *pbChat.SendMsgReq) error {
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: msg.OperationID}
|
if !config.Config.Callback.CallbackAfterSendSingleMsg.Enable {
|
||||||
if !config.Config.Callback.CallbackBeforeSendGroupMsg.Enable {
|
return nil
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), msg)
|
req := &cbapi.CallbackAfterSendGroupMsgReq{
|
||||||
commonCallbackReq := copyCallbackCommonReqStruct(msg)
|
CommonCallbackReq: toCommonCallback(ctx, msg, constant.CallbackBeforeSendSingleMsgCommand),
|
||||||
commonCallbackReq.CallbackCommand = constant.CallbackBeforeSendGroupMsgCommand
|
|
||||||
req := cbApi.CallbackAfterSendGroupMsgReq{
|
|
||||||
CommonCallbackReq: commonCallbackReq,
|
|
||||||
GroupID: msg.MsgData.GroupID,
|
GroupID: msg.MsgData.GroupID,
|
||||||
}
|
}
|
||||||
resp := &cbApi.CallbackBeforeSendGroupMsgResp{CommonCallbackResp: &callbackResp}
|
resp := &cbapi.CallbackBeforeSendGroupMsgResp{}
|
||||||
defer log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), req, *resp)
|
return http.CallBackPostReturn(cbURL(), req, resp, config.Config.Callback.CallbackAfterSendSingleMsg)
|
||||||
if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeSendGroupMsgCommand,
|
|
||||||
req, resp, config.Config.Callback.CallbackBeforeSendGroupMsg.CallbackTimeOut, &config.Config.Callback.CallbackBeforeSendGroupMsg.CallbackFailedContinue); err != nil {
|
|
||||||
callbackResp.ErrCode = http2.StatusInternalServerError
|
|
||||||
callbackResp.ErrMsg = err.Error()
|
|
||||||
if !config.Config.Callback.CallbackBeforeSendGroupMsg.CallbackFailedContinue {
|
|
||||||
callbackResp.ActionCode = constant.ActionForbidden
|
|
||||||
return callbackResp
|
|
||||||
} else {
|
|
||||||
callbackResp.ActionCode = constant.ActionAllow
|
|
||||||
return callbackResp
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func callbackAfterSendGroupMsg(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp {
|
func CallbackAfterSendGroupMsg(ctx context.Context, msg *pbChat.SendMsgReq) error {
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: msg.OperationID}
|
|
||||||
if !config.Config.Callback.CallbackAfterSendGroupMsg.Enable {
|
if !config.Config.Callback.CallbackAfterSendGroupMsg.Enable {
|
||||||
return callbackResp
|
return nil
|
||||||
}
|
}
|
||||||
log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), msg)
|
req := &cbapi.CallbackAfterSendGroupMsgReq{
|
||||||
commonCallbackReq := copyCallbackCommonReqStruct(msg)
|
CommonCallbackReq: toCommonCallback(ctx, msg, constant.CallbackAfterSendGroupMsgCommand),
|
||||||
commonCallbackReq.CallbackCommand = constant.CallbackAfterSendGroupMsgCommand
|
|
||||||
req := cbApi.CallbackAfterSendGroupMsgReq{
|
|
||||||
CommonCallbackReq: commonCallbackReq,
|
|
||||||
GroupID: msg.MsgData.GroupID,
|
GroupID: msg.MsgData.GroupID,
|
||||||
}
|
}
|
||||||
resp := &cbApi.CallbackAfterSendGroupMsgResp{CommonCallbackResp: &callbackResp}
|
resp := &cbapi.CallbackAfterSendGroupMsgResp{}
|
||||||
defer log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), req, *resp)
|
return http.CallBackPostReturn(cbURL(), req, resp, config.Config.Callback.CallbackAfterSendGroupMsg)
|
||||||
if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackAfterSendGroupMsgCommand, req, resp,
|
|
||||||
config.Config.Callback.CallbackAfterSendGroupMsg.CallbackTimeOut, nil); err != nil {
|
|
||||||
callbackResp.ErrCode = http2.StatusInternalServerError
|
|
||||||
callbackResp.ErrMsg = err.Error()
|
|
||||||
return callbackResp
|
|
||||||
}
|
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func callbackMsgModify(msg *pbChat.SendMsgReq) cbApi.CommonCallbackResp {
|
func CallbackMsgModify(ctx context.Context, msg *pbChat.SendMsgReq) error {
|
||||||
log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), msg)
|
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: msg.OperationID}
|
|
||||||
if !config.Config.Callback.CallbackMsgModify.Enable || msg.MsgData.ContentType != constant.Text {
|
if !config.Config.Callback.CallbackMsgModify.Enable || msg.MsgData.ContentType != constant.Text {
|
||||||
return callbackResp
|
return nil
|
||||||
}
|
}
|
||||||
commonCallbackReq := copyCallbackCommonReqStruct(msg)
|
req := &cbapi.CallbackMsgModifyCommandReq{
|
||||||
commonCallbackReq.CallbackCommand = constant.CallbackMsgModifyCommand
|
CommonCallbackReq: toCommonCallback(ctx, msg, constant.CallbackMsgModifyCommand),
|
||||||
req := cbApi.CallbackMsgModifyCommandReq{
|
|
||||||
CommonCallbackReq: commonCallbackReq,
|
|
||||||
}
|
}
|
||||||
resp := &cbApi.CallbackMsgModifyCommandResp{CommonCallbackResp: &callbackResp}
|
resp := &cbapi.CallbackMsgModifyCommandResp{}
|
||||||
defer log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), req, *resp)
|
if err := http.CallBackPostReturn(cbURL(), req, resp, config.Config.Callback.CallbackAfterSendGroupMsg); err != nil {
|
||||||
if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackMsgModifyCommand, req, resp,
|
return err
|
||||||
config.Config.Callback.CallbackMsgModify.CallbackTimeOut, &config.Config.Callback.CallbackMsgModify.CallbackFailedContinue); err != nil {
|
|
||||||
callbackResp.ErrCode = http2.StatusInternalServerError
|
|
||||||
callbackResp.ErrMsg = err.Error()
|
|
||||||
if !config.Config.Callback.CallbackMsgModify.CallbackFailedContinue {
|
|
||||||
callbackResp.ActionCode = constant.ActionForbidden
|
|
||||||
return callbackResp
|
|
||||||
} else {
|
|
||||||
callbackResp.ActionCode = constant.ActionAllow
|
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if resp.ErrCode == constant.CallbackHandleSuccess && resp.ActionCode == constant.ActionAllow {
|
|
||||||
if resp.Content != nil {
|
if resp.Content != nil {
|
||||||
msg.MsgData.Content = []byte(*resp.Content)
|
msg.MsgData.Content = []byte(*resp.Content)
|
||||||
}
|
}
|
||||||
if resp.RecvID != nil {
|
utils.NotNilReplace(msg.MsgData.OfflinePushInfo, resp.OfflinePushInfo)
|
||||||
msg.MsgData.RecvID = *resp.RecvID
|
utils.NotNilReplace(&msg.MsgData.RecvID, resp.RecvID)
|
||||||
}
|
utils.NotNilReplace(&msg.MsgData.GroupID, resp.GroupID)
|
||||||
if resp.GroupID != nil {
|
utils.NotNilReplace(&msg.MsgData.ClientMsgID, resp.ClientMsgID)
|
||||||
msg.MsgData.GroupID = *resp.GroupID
|
utils.NotNilReplace(&msg.MsgData.ServerMsgID, resp.ServerMsgID)
|
||||||
}
|
utils.NotNilReplace(&msg.MsgData.SenderPlatformID, resp.SenderPlatformID)
|
||||||
if resp.ClientMsgID != nil {
|
utils.NotNilReplace(&msg.MsgData.SenderNickname, resp.SenderNickname)
|
||||||
msg.MsgData.ClientMsgID = *resp.ClientMsgID
|
utils.NotNilReplace(&msg.MsgData.SenderFaceURL, resp.SenderFaceURL)
|
||||||
}
|
utils.NotNilReplace(&msg.MsgData.SessionType, resp.SessionType)
|
||||||
if resp.ServerMsgID != nil {
|
utils.NotNilReplace(&msg.MsgData.MsgFrom, resp.MsgFrom)
|
||||||
msg.MsgData.ServerMsgID = *resp.ServerMsgID
|
utils.NotNilReplace(&msg.MsgData.ContentType, resp.ContentType)
|
||||||
}
|
utils.NotNilReplace(&msg.MsgData.Status, resp.Status)
|
||||||
if resp.SenderPlatformID != nil {
|
utils.NotNilReplace(&msg.MsgData.Options, resp.Options)
|
||||||
msg.MsgData.SenderPlatformID = *resp.SenderPlatformID
|
utils.NotNilReplace(&msg.MsgData.AtUserIDList, resp.AtUserIDList)
|
||||||
}
|
utils.NotNilReplace(&msg.MsgData.MsgDataList, resp.MsgDataList)
|
||||||
if resp.SenderNickname != nil {
|
utils.NotNilReplace(&msg.MsgData.AttachedInfo, resp.AttachedInfo)
|
||||||
msg.MsgData.SenderNickname = *resp.SenderNickname
|
utils.NotNilReplace(&msg.MsgData.Ex, resp.Ex)
|
||||||
}
|
return nil
|
||||||
if resp.SenderFaceURL != nil {
|
|
||||||
msg.MsgData.SenderFaceURL = *resp.SenderFaceURL
|
|
||||||
}
|
|
||||||
if resp.SessionType != nil {
|
|
||||||
msg.MsgData.SessionType = *resp.SessionType
|
|
||||||
}
|
|
||||||
if resp.MsgFrom != nil {
|
|
||||||
msg.MsgData.MsgFrom = *resp.MsgFrom
|
|
||||||
}
|
|
||||||
if resp.ContentType != nil {
|
|
||||||
msg.MsgData.ContentType = *resp.ContentType
|
|
||||||
}
|
|
||||||
if resp.Status != nil {
|
|
||||||
msg.MsgData.Status = *resp.Status
|
|
||||||
}
|
|
||||||
if resp.Options != nil {
|
|
||||||
msg.MsgData.Options = *resp.Options
|
|
||||||
}
|
|
||||||
if resp.OfflinePushInfo != nil {
|
|
||||||
msg.MsgData.OfflinePushInfo = resp.OfflinePushInfo
|
|
||||||
}
|
|
||||||
if resp.AtUserIDList != nil {
|
|
||||||
msg.MsgData.AtUserIDList = *resp.AtUserIDList
|
|
||||||
}
|
|
||||||
if resp.MsgDataList != nil {
|
|
||||||
msg.MsgData.MsgDataList = *resp.MsgDataList
|
|
||||||
}
|
|
||||||
if resp.AttachedInfo != nil {
|
|
||||||
msg.MsgData.AttachedInfo = *resp.AttachedInfo
|
|
||||||
}
|
|
||||||
if resp.Ex != nil {
|
|
||||||
msg.MsgData.Ex = *resp.Ex
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
log.NewDebug(msg.OperationID, utils.GetSelfFuncName(), string(msg.MsgData.Content))
|
|
||||||
return callbackResp
|
|
||||||
}
|
}
|
||||||
|
@ -1,63 +0,0 @@
|
|||||||
package msg
|
|
||||||
|
|
||||||
import (
|
|
||||||
"Open_IM/pkg/common/constant"
|
|
||||||
"Open_IM/pkg/common/db"
|
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
"Open_IM/pkg/common/tokenverify"
|
|
||||||
pbChat "Open_IM/pkg/proto/msg"
|
|
||||||
"Open_IM/pkg/utils"
|
|
||||||
"context"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (rpc *rpcChat) ClearMsg(_ context.Context, req *pbChat.ClearMsgReq) (*pbChat.ClearMsgResp, error) {
|
|
||||||
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc req: ", req.String())
|
|
||||||
if req.OpUserID != req.UserID && !tokenverify.IsManagerUserID(req.UserID) {
|
|
||||||
errMsg := "No permission" + req.OpUserID + req.UserID
|
|
||||||
log.Error(req.OperationID, errMsg)
|
|
||||||
return &pbChat.ClearMsgResp{ErrCode: constant.ErrNoPermission.ErrCode, ErrMsg: errMsg}, nil
|
|
||||||
}
|
|
||||||
log.Debug(req.OperationID, "CleanUpOneUserAllMsgFromRedis args", req.UserID)
|
|
||||||
err := db.DB.CleanUpOneUserAllMsgFromRedis(req.UserID, req.OperationID)
|
|
||||||
if err != nil {
|
|
||||||
errMsg := "CleanUpOneUserAllMsgFromRedis failed " + err.Error() + req.OperationID + req.UserID
|
|
||||||
log.Error(req.OperationID, errMsg)
|
|
||||||
return &pbChat.ClearMsgResp{ErrCode: constant.ErrDatabase.ErrCode, ErrMsg: errMsg}, nil
|
|
||||||
}
|
|
||||||
log.Debug(req.OperationID, "CleanUpUserMsgFromMongo args", req.UserID)
|
|
||||||
err = db.DB.CleanUpUserMsgFromMongo(req.UserID, req.OperationID)
|
|
||||||
if err != nil {
|
|
||||||
errMsg := "CleanUpUserMsgFromMongo failed " + err.Error() + req.OperationID + req.UserID
|
|
||||||
log.Error(req.OperationID, errMsg)
|
|
||||||
return &pbChat.ClearMsgResp{ErrCode: constant.ErrDatabase.ErrCode, ErrMsg: errMsg}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
resp := pbChat.ClearMsgResp{ErrCode: 0}
|
|
||||||
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String())
|
|
||||||
return &resp, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rpc *rpcChat) SetMsgMinSeq(_ context.Context, req *pbChat.SetMsgMinSeqReq) (*pbChat.SetMsgMinSeqResp, error) {
|
|
||||||
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "rpc req: ", req.String())
|
|
||||||
if req.OpUserID != req.UserID && !tokenverify.IsManagerUserID(req.UserID) {
|
|
||||||
errMsg := "No permission" + req.OpUserID + req.UserID
|
|
||||||
log.Error(req.OperationID, errMsg)
|
|
||||||
return &pbChat.SetMsgMinSeqResp{ErrCode: constant.ErrNoPermission.ErrCode, ErrMsg: errMsg}, nil
|
|
||||||
}
|
|
||||||
if req.GroupID == "" {
|
|
||||||
err := db.DB.SetUserMinSeq(req.UserID, req.MinSeq)
|
|
||||||
if err != nil {
|
|
||||||
errMsg := "SetUserMinSeq failed " + err.Error() + req.OperationID + req.UserID + utils.Uint32ToString(req.MinSeq)
|
|
||||||
log.Error(req.OperationID, errMsg)
|
|
||||||
return &pbChat.SetMsgMinSeqResp{ErrCode: constant.ErrDatabase.ErrCode, ErrMsg: errMsg}, nil
|
|
||||||
}
|
|
||||||
return &pbChat.SetMsgMinSeqResp{}, nil
|
|
||||||
}
|
|
||||||
err := db.DB.SetGroupUserMinSeq(req.GroupID, req.UserID, uint64(req.MinSeq))
|
|
||||||
if err != nil {
|
|
||||||
errMsg := "SetGroupUserMinSeq failed " + err.Error() + req.OperationID + req.GroupID + req.UserID + utils.Uint32ToString(req.MinSeq)
|
|
||||||
log.Error(req.OperationID, errMsg)
|
|
||||||
return &pbChat.SetMsgMinSeqResp{ErrCode: constant.ErrDatabase.ErrCode, ErrMsg: errMsg}, nil
|
|
||||||
}
|
|
||||||
return &pbChat.SetMsgMinSeqResp{}, nil
|
|
||||||
}
|
|
@ -1,56 +0,0 @@
|
|||||||
package msg
|
|
||||||
|
|
||||||
import (
|
|
||||||
"Open_IM/pkg/common/constant"
|
|
||||||
"Open_IM/pkg/common/db"
|
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
"Open_IM/pkg/common/tokenverify"
|
|
||||||
"Open_IM/pkg/proto/msg"
|
|
||||||
common "Open_IM/pkg/proto/sdkws"
|
|
||||||
"Open_IM/pkg/utils"
|
|
||||||
"context"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (rpc *rpcChat) DelMsgList(_ context.Context, req *common.DelMsgListReq) (*common.DelMsgListResp, error) {
|
|
||||||
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
|
|
||||||
resp := &common.DelMsgListResp{}
|
|
||||||
select {
|
|
||||||
case rpc.delMsgCh <- deleteMsg{
|
|
||||||
UserID: req.UserID,
|
|
||||||
OpUserID: req.OpUserID,
|
|
||||||
SeqList: req.SeqList,
|
|
||||||
OperationID: req.OperationID,
|
|
||||||
}:
|
|
||||||
case <-time.After(1 * time.Second):
|
|
||||||
resp.ErrCode = constant.ErrSendLimit.ErrCode
|
|
||||||
resp.ErrMsg = constant.ErrSendLimit.ErrMsg
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String())
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
func (rpc *rpcChat) DelSuperGroupMsg(ctx context.Context, req *msg.DelSuperGroupMsgReq) (*msg.DelSuperGroupMsgResp, error) {
|
|
||||||
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
|
|
||||||
if !tokenverify.CheckAccess(ctx, req.OpUserID, req.UserID) {
|
|
||||||
log.NewError(req.OperationID, "CheckAccess false ", req.OpUserID, req.UserID)
|
|
||||||
return &msg.DelSuperGroupMsgResp{ErrCode: constant.ErrNoPermission.ErrCode, ErrMsg: constant.ErrNoPermission.ErrMsg}, nil
|
|
||||||
}
|
|
||||||
resp := &msg.DelSuperGroupMsgResp{}
|
|
||||||
groupMaxSeq, err := db.DB.GetGroupMaxSeq(req.GroupID)
|
|
||||||
if err != nil {
|
|
||||||
log.NewError(req.OperationID, "GetGroupMaxSeq false ", req.OpUserID, req.UserID, req.GroupID)
|
|
||||||
resp.ErrCode = constant.ErrDB.ErrCode
|
|
||||||
resp.ErrMsg = err.Error()
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
err = db.DB.SetGroupUserMinSeq(req.GroupID, req.UserID, groupMaxSeq)
|
|
||||||
if err != nil {
|
|
||||||
log.NewError(req.OperationID, "SetGroupUserMinSeq false ", req.OpUserID, req.UserID, req.GroupID)
|
|
||||||
resp.ErrCode = constant.ErrDB.ErrCode
|
|
||||||
resp.ErrMsg = err.Error()
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", resp.String())
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
43
internal/rpc/msg/delete.go
Normal file
43
internal/rpc/msg/delete.go
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
package msg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/tokenverify"
|
||||||
|
"Open_IM/pkg/proto/msg"
|
||||||
|
common "Open_IM/pkg/proto/sdkws"
|
||||||
|
"context"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (m *msgServer) DelMsgList(ctx context.Context, req *common.DelMsgListReq) (*common.DelMsgListResp, error) {
|
||||||
|
resp := &common.DelMsgListResp{}
|
||||||
|
if err := m.MsgInterface.DelMsgFromCache(ctx, req.UserID, req.SeqList); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
DeleteMessageNotification(ctx, req.UserID, req.SeqList)
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *msgServer) DelSuperGroupMsg(ctx context.Context, req *msg.DelSuperGroupMsgReq) (*msg.DelSuperGroupMsgResp, error) {
|
||||||
|
resp := &msg.DelSuperGroupMsgResp{}
|
||||||
|
if err := tokenverify.CheckAdmin(ctx); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
maxSeq, err := m.MsgInterface.GetGroupMaxSeq(ctx, req.GroupID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := m.MsgInterface.SetGroupUserMinSeq(ctx, req.GroupID, maxSeq); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *msgServer) ClearMsg(ctx context.Context, req *msg.ClearMsgReq) (*msg.ClearMsgResp, error) {
|
||||||
|
resp := &msg.ClearMsgResp{}
|
||||||
|
if err := tokenverify.CheckAccessV3(ctx, req.UserID); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := m.MsgInterface.DelUserAllSeq(ctx, req.UserID); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return resp, nil
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package msg
|
package msg
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"Open_IM/internal/common/notification"
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/db"
|
"Open_IM/pkg/common/db"
|
||||||
"Open_IM/pkg/common/log"
|
"Open_IM/pkg/common/log"
|
||||||
@ -13,12 +14,12 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (rpc *rpcChat) SetMessageReactionExtensions(ctx context.Context, req *msg.SetMessageReactionExtensionsReq) (resp *msg.SetMessageReactionExtensionsResp, err error) {
|
func (m *msgServer) SetMessageReactionExtensions(ctx context.Context, req *msg.SetMessageReactionExtensionsReq) (resp *msg.SetMessageReactionExtensionsResp, err error) {
|
||||||
log.Debug(req.OperationID, utils.GetSelfFuncName(), "rpc args is:", req.String())
|
log.Debug(req.OperationID, utils.GetSelfFuncName(), "m args is:", req.String())
|
||||||
var rResp msg.SetMessageReactionExtensionsResp
|
var rResp msg.SetMessageReactionExtensionsResp
|
||||||
rResp.ClientMsgID = req.ClientMsgID
|
rResp.ClientMsgID = req.ClientMsgID
|
||||||
rResp.MsgFirstModifyTime = req.MsgFirstModifyTime
|
rResp.MsgFirstModifyTime = req.MsgFirstModifyTime
|
||||||
callbackResp := callbackSetMessageReactionExtensions(req)
|
callbackResp := notification.callbackSetMessageReactionExtensions(req)
|
||||||
if callbackResp.ActionCode != constant.ActionAllow || callbackResp.ErrCode != 0 {
|
if callbackResp.ActionCode != constant.ActionAllow || callbackResp.ErrCode != 0 {
|
||||||
rResp.ErrCode = int32(callbackResp.ErrCode)
|
rResp.ErrCode = int32(callbackResp.ErrCode)
|
||||||
rResp.ErrMsg = callbackResp.ErrMsg
|
rResp.ErrMsg = callbackResp.ErrMsg
|
||||||
@ -41,7 +42,7 @@ func (rpc *rpcChat) SetMessageReactionExtensions(ctx context.Context, req *msg.S
|
|||||||
}
|
}
|
||||||
rResp.MsgFirstModifyTime = callbackResp.MsgFirstModifyTime
|
rResp.MsgFirstModifyTime = callbackResp.MsgFirstModifyTime
|
||||||
rResp.Result = callbackResp.ResultReactionExtensionList
|
rResp.Result = callbackResp.ResultReactionExtensionList
|
||||||
ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, isHistory, false)
|
notification.ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, isHistory, false)
|
||||||
return &rResp, nil
|
return &rResp, nil
|
||||||
}
|
}
|
||||||
for _, v := range callbackResp.ResultReactionExtensionList {
|
for _, v := range callbackResp.ResultReactionExtensionList {
|
||||||
@ -71,7 +72,7 @@ func (rpc *rpcChat) SetMessageReactionExtensions(ctx context.Context, req *msg.S
|
|||||||
log.Debug(req.OperationID, "redis handle firstly", req.String())
|
log.Debug(req.OperationID, "redis handle firstly", req.String())
|
||||||
rResp.MsgFirstModifyTime = utils.GetCurrentTimestampByMill()
|
rResp.MsgFirstModifyTime = utils.GetCurrentTimestampByMill()
|
||||||
for k, v := range req.ReactionExtensionList {
|
for k, v := range req.ReactionExtensionList {
|
||||||
err := rpc.dMessageLocker.LockMessageTypeKey(req.ClientMsgID, k)
|
err := m.dMessageLocker.LockMessageTypeKey(req.ClientMsgID, k)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
setKeyResultInfo(&rResp, 100, err.Error(), req.ClientMsgID, k, v)
|
setKeyResultInfo(&rResp, 100, err.Error(), req.ClientMsgID, k, v)
|
||||||
continue
|
continue
|
||||||
@ -90,7 +91,7 @@ func (rpc *rpcChat) SetMessageReactionExtensions(ctx context.Context, req *msg.S
|
|||||||
log.Error(req.OperationID, "SetMessageReactionExpire err:", err.Error(), req.String())
|
log.Error(req.OperationID, "SetMessageReactionExpire err:", err.Error(), req.String())
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
err := rpc.dMessageLocker.LockGlobalMessage(req.ClientMsgID)
|
err := m.dMessageLocker.LockGlobalMessage(req.ClientMsgID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rResp.ErrCode = 100
|
rResp.ErrCode = 100
|
||||||
rResp.ErrMsg = err.Error()
|
rResp.ErrMsg = err.Error()
|
||||||
@ -148,7 +149,7 @@ func (rpc *rpcChat) SetMessageReactionExtensions(ctx context.Context, req *msg.S
|
|||||||
rResp.Result = append(rResp.Result, temp)
|
rResp.Result = append(rResp.Result, temp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lockErr := rpc.dMessageLocker.UnLockGlobalMessage(req.ClientMsgID)
|
lockErr := m.dMessageLocker.UnLockGlobalMessage(req.ClientMsgID)
|
||||||
if lockErr != nil {
|
if lockErr != nil {
|
||||||
log.Error(req.OperationID, "UnLockGlobalMessage err:", lockErr.Error())
|
log.Error(req.OperationID, "UnLockGlobalMessage err:", lockErr.Error())
|
||||||
}
|
}
|
||||||
@ -158,7 +159,7 @@ func (rpc *rpcChat) SetMessageReactionExtensions(ctx context.Context, req *msg.S
|
|||||||
log.Debug(req.OperationID, "redis handle secondly", req.String())
|
log.Debug(req.OperationID, "redis handle secondly", req.String())
|
||||||
|
|
||||||
for k, v := range req.ReactionExtensionList {
|
for k, v := range req.ReactionExtensionList {
|
||||||
err := rpc.dMessageLocker.LockMessageTypeKey(req.ClientMsgID, k)
|
err := m.dMessageLocker.LockMessageTypeKey(req.ClientMsgID, k)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
setKeyResultInfo(&rResp, 100, err.Error(), req.ClientMsgID, k, v)
|
setKeyResultInfo(&rResp, 100, err.Error(), req.ClientMsgID, k, v)
|
||||||
continue
|
continue
|
||||||
@ -187,14 +188,14 @@ func (rpc *rpcChat) SetMessageReactionExtensions(ctx context.Context, req *msg.S
|
|||||||
}
|
}
|
||||||
if !isExists {
|
if !isExists {
|
||||||
if !req.IsReact {
|
if !req.IsReact {
|
||||||
ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, true, true)
|
notification.ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, true, true)
|
||||||
} else {
|
} else {
|
||||||
ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, false, false)
|
notification.ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, false, false)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, false, true)
|
notification.ExtendMessageUpdatedNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, false, true)
|
||||||
}
|
}
|
||||||
log.Debug(req.OperationID, utils.GetSelfFuncName(), "rpc return is:", rResp.String())
|
log.Debug(req.OperationID, utils.GetSelfFuncName(), "m return is:", rResp.String())
|
||||||
return &rResp, nil
|
return &rResp, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -215,8 +216,8 @@ func setDeleteKeyResultInfo(r *msg.DeleteMessageListReactionExtensionsResp, errC
|
|||||||
_ = db.DB.UnLockMessageTypeKey(clientMsgID, typeKey)
|
_ = db.DB.UnLockMessageTypeKey(clientMsgID, typeKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rpc *rpcChat) GetMessageListReactionExtensions(ctx context.Context, req *msg.GetMessageListReactionExtensionsReq) (resp *msg.GetMessageListReactionExtensionsResp, err error) {
|
func (m *msgServer) GetMessageListReactionExtensions(ctx context.Context, req *msg.GetMessageListReactionExtensionsReq) (resp *msg.GetMessageListReactionExtensionsResp, err error) {
|
||||||
log.Debug(req.OperationID, utils.GetSelfFuncName(), "rpc args is:", req.String())
|
log.Debug(req.OperationID, utils.GetSelfFuncName(), "m args is:", req.String())
|
||||||
var rResp msg.GetMessageListReactionExtensionsResp
|
var rResp msg.GetMessageListReactionExtensionsResp
|
||||||
for _, messageValue := range req.MessageReactionKeyList {
|
for _, messageValue := range req.MessageReactionKeyList {
|
||||||
var oneMessage msg.SingleMessageExtensionResult
|
var oneMessage msg.SingleMessageExtensionResult
|
||||||
@ -266,19 +267,19 @@ func (rpc *rpcChat) GetMessageListReactionExtensions(ctx context.Context, req *m
|
|||||||
}
|
}
|
||||||
rResp.SingleMessageResult = append(rResp.SingleMessageResult, &oneMessage)
|
rResp.SingleMessageResult = append(rResp.SingleMessageResult, &oneMessage)
|
||||||
}
|
}
|
||||||
log.Debug(req.OperationID, utils.GetSelfFuncName(), "rpc return is:", rResp.String())
|
log.Debug(req.OperationID, utils.GetSelfFuncName(), "m return is:", rResp.String())
|
||||||
return &rResp, nil
|
return &rResp, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rpc *rpcChat) AddMessageReactionExtensions(ctx context.Context, req *msg.ModifyMessageReactionExtensionsReq) (resp *msg.ModifyMessageReactionExtensionsResp, err error) {
|
func (m *msgServer) AddMessageReactionExtensions(ctx context.Context, req *msg.ModifyMessageReactionExtensionsReq) (resp *msg.ModifyMessageReactionExtensionsResp, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rpc *rpcChat) DeleteMessageReactionExtensions(ctx context.Context, req *msg.DeleteMessageListReactionExtensionsReq) (resp *msg.DeleteMessageListReactionExtensionsResp, err error) {
|
func (m *msgServer) DeleteMessageReactionExtensions(ctx context.Context, req *msg.DeleteMessageListReactionExtensionsReq) (resp *msg.DeleteMessageListReactionExtensionsResp, err error) {
|
||||||
log.Debug(req.OperationID, utils.GetSelfFuncName(), "rpc args is:", req.String())
|
log.Debug(req.OperationID, utils.GetSelfFuncName(), "m args is:", req.String())
|
||||||
var rResp msg.DeleteMessageListReactionExtensionsResp
|
var rResp msg.DeleteMessageListReactionExtensionsResp
|
||||||
callbackResp := callbackDeleteMessageReactionExtensions(req)
|
callbackResp := notification.callbackDeleteMessageReactionExtensions(req)
|
||||||
if callbackResp.ActionCode != constant.ActionAllow || callbackResp.ErrCode != 0 {
|
if callbackResp.ActionCode != constant.ActionAllow || callbackResp.ErrCode != 0 {
|
||||||
rResp.ErrCode = int32(callbackResp.ErrCode)
|
rResp.ErrCode = int32(callbackResp.ErrCode)
|
||||||
rResp.ErrMsg = callbackResp.ErrMsg
|
rResp.ErrMsg = callbackResp.ErrMsg
|
||||||
@ -294,7 +295,7 @@ func (rpc *rpcChat) DeleteMessageReactionExtensions(ctx context.Context, req *ms
|
|||||||
//if ExternalExtension
|
//if ExternalExtension
|
||||||
if req.IsExternalExtensions {
|
if req.IsExternalExtensions {
|
||||||
rResp.Result = callbackResp.ResultReactionExtensionList
|
rResp.Result = callbackResp.ResultReactionExtensionList
|
||||||
ExtendMessageDeleteNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, false, false)
|
notification.ExtendMessageDeleteNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, false, false)
|
||||||
return &rResp, nil
|
return &rResp, nil
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -327,7 +328,7 @@ func (rpc *rpcChat) DeleteMessageReactionExtensions(ctx context.Context, req *ms
|
|||||||
if isExists {
|
if isExists {
|
||||||
log.Debug(req.OperationID, "redis handle this delete", req.String())
|
log.Debug(req.OperationID, "redis handle this delete", req.String())
|
||||||
for _, v := range req.ReactionExtensionList {
|
for _, v := range req.ReactionExtensionList {
|
||||||
err := rpc.dMessageLocker.LockMessageTypeKey(req.ClientMsgID, v.TypeKey)
|
err := m.dMessageLocker.LockMessageTypeKey(req.ClientMsgID, v.TypeKey)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
setDeleteKeyResultInfo(&rResp, 100, err.Error(), req.ClientMsgID, v.TypeKey, v)
|
setDeleteKeyResultInfo(&rResp, 100, err.Error(), req.ClientMsgID, v.TypeKey, v)
|
||||||
continue
|
continue
|
||||||
@ -353,7 +354,7 @@ func (rpc *rpcChat) DeleteMessageReactionExtensions(ctx context.Context, req *ms
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
err := rpc.dMessageLocker.LockGlobalMessage(req.ClientMsgID)
|
err := m.dMessageLocker.LockGlobalMessage(req.ClientMsgID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
rResp.ErrCode = 100
|
rResp.ErrCode = 100
|
||||||
rResp.ErrMsg = err.Error()
|
rResp.ErrMsg = err.Error()
|
||||||
@ -412,13 +413,13 @@ func (rpc *rpcChat) DeleteMessageReactionExtensions(ctx context.Context, req *ms
|
|||||||
rResp.Result = append(rResp.Result, temp)
|
rResp.Result = append(rResp.Result, temp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lockErr := rpc.dMessageLocker.UnLockGlobalMessage(req.ClientMsgID)
|
lockErr := m.dMessageLocker.UnLockGlobalMessage(req.ClientMsgID)
|
||||||
if lockErr != nil {
|
if lockErr != nil {
|
||||||
log.Error(req.OperationID, "UnLockGlobalMessage err:", lockErr.Error())
|
log.Error(req.OperationID, "UnLockGlobalMessage err:", lockErr.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
ExtendMessageDeleteNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, false, isExists)
|
notification.ExtendMessageDeleteNotification(req.OperationID, req.OpUserID, req.SourceID, req.SessionType, req, &rResp, false, isExists)
|
||||||
log.Debug(req.OperationID, utils.GetSelfFuncName(), "rpc return is:", rResp.String())
|
log.Debug(req.OperationID, utils.GetSelfFuncName(), "m return is:", rResp.String())
|
||||||
return &rResp, nil
|
return &rResp, nil
|
||||||
}
|
}
|
||||||
|
@ -1,21 +1,23 @@
|
|||||||
package msg
|
package msg
|
||||||
|
|
||||||
import (
|
import (
|
||||||
cbApi "Open_IM/pkg/callback_struct"
|
cbapi "Open_IM/pkg/callbackstruct"
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/http"
|
"Open_IM/pkg/common/http"
|
||||||
"Open_IM/pkg/common/log"
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/tracelog"
|
||||||
"Open_IM/pkg/proto/msg"
|
"Open_IM/pkg/proto/msg"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
http2 "net/http"
|
"context"
|
||||||
)
|
)
|
||||||
|
|
||||||
func callbackSetMessageReactionExtensions(setReq *msg.SetMessageReactionExtensionsReq) *cbApi.CallbackBeforeSetMessageReactionExtResp {
|
func CallbackSetMessageReactionExtensions(ctx context.Context, setReq *msg.SetMessageReactionExtensionsReq) error {
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: setReq.OperationID}
|
if !config.Config.Callback.CallbackAfterSendGroupMsg.Enable {
|
||||||
log.NewDebug(setReq.OperationID, utils.GetSelfFuncName(), setReq.String())
|
return nil
|
||||||
req := cbApi.CallbackBeforeSetMessageReactionExtReq{
|
}
|
||||||
OperationID: setReq.OperationID,
|
req := &cbapi.CallbackBeforeSetMessageReactionExtReq{
|
||||||
|
OperationID: tracelog.GetOperationID(ctx),
|
||||||
CallbackCommand: constant.CallbackBeforeSetMessageReactionExtensionCommand,
|
CallbackCommand: constant.CallbackBeforeSetMessageReactionExtensionCommand,
|
||||||
SourceID: setReq.SourceID,
|
SourceID: setReq.SourceID,
|
||||||
OpUserID: setReq.OpUserID,
|
OpUserID: setReq.OpUserID,
|
||||||
@ -26,21 +28,15 @@ func callbackSetMessageReactionExtensions(setReq *msg.SetMessageReactionExtensio
|
|||||||
IsExternalExtensions: setReq.IsExternalExtensions,
|
IsExternalExtensions: setReq.IsExternalExtensions,
|
||||||
MsgFirstModifyTime: setReq.MsgFirstModifyTime,
|
MsgFirstModifyTime: setReq.MsgFirstModifyTime,
|
||||||
}
|
}
|
||||||
resp := &cbApi.CallbackBeforeSetMessageReactionExtResp{CommonCallbackResp: &callbackResp}
|
resp := &cbapi.CallbackBeforeSetMessageReactionExtResp{}
|
||||||
defer log.NewDebug(setReq.OperationID, utils.GetSelfFuncName(), req, *resp)
|
return http.CallBackPostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackAfterSendGroupMsg)
|
||||||
if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeSetMessageReactionExtensionCommand,
|
|
||||||
req, resp, config.Config.Callback.CallbackAfterSendGroupMsg.CallbackTimeOut, nil); err != nil {
|
|
||||||
callbackResp.ErrCode = http2.StatusInternalServerError
|
|
||||||
callbackResp.ErrMsg = err.Error()
|
|
||||||
}
|
|
||||||
return resp
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func callbackDeleteMessageReactionExtensions(setReq *msg.DeleteMessageListReactionExtensionsReq) *cbApi.CallbackDeleteMessageReactionExtResp {
|
func CallbackDeleteMessageReactionExtensions(setReq *msg.DeleteMessageListReactionExtensionsReq) error {
|
||||||
callbackResp := cbApi.CommonCallbackResp{OperationID: setReq.OperationID}
|
if !config.Config.Callback.CallbackAfterSendGroupMsg.Enable {
|
||||||
log.NewDebug(setReq.OperationID, utils.GetSelfFuncName(), setReq.String())
|
return nil
|
||||||
req := cbApi.CallbackDeleteMessageReactionExtReq{
|
}
|
||||||
|
req := &cbapi.CallbackDeleteMessageReactionExtReq{
|
||||||
OperationID: setReq.OperationID,
|
OperationID: setReq.OperationID,
|
||||||
CallbackCommand: constant.CallbackBeforeDeleteMessageReactionExtensionsCommand,
|
CallbackCommand: constant.CallbackBeforeDeleteMessageReactionExtensionsCommand,
|
||||||
SourceID: setReq.SourceID,
|
SourceID: setReq.SourceID,
|
||||||
@ -51,12 +47,53 @@ func callbackDeleteMessageReactionExtensions(setReq *msg.DeleteMessageListReacti
|
|||||||
IsExternalExtensions: setReq.IsExternalExtensions,
|
IsExternalExtensions: setReq.IsExternalExtensions,
|
||||||
MsgFirstModifyTime: setReq.MsgFirstModifyTime,
|
MsgFirstModifyTime: setReq.MsgFirstModifyTime,
|
||||||
}
|
}
|
||||||
resp := &cbApi.CallbackDeleteMessageReactionExtResp{CommonCallbackResp: &callbackResp}
|
resp := &cbapi.CallbackDeleteMessageReactionExtResp{}
|
||||||
defer log.NewDebug(setReq.OperationID, utils.GetSelfFuncName(), req, *resp)
|
defer log.NewDebug(setReq.OperationID, utils.GetSelfFuncName(), req, *resp)
|
||||||
if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackBeforeDeleteMessageReactionExtensionsCommand,
|
return http.CallBackPostReturn(config.Config.Callback.CallbackUrl, req, resp, config.Config.Callback.CallbackAfterSendGroupMsg)
|
||||||
req, resp, config.Config.Callback.CallbackAfterSendGroupMsg.CallbackTimeOut, nil); err != nil {
|
|
||||||
callbackResp.ErrCode = http2.StatusInternalServerError
|
|
||||||
callbackResp.ErrMsg = err.Error()
|
|
||||||
}
|
|
||||||
return resp
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//func CallbackGetMessageListReactionExtensions(getReq *msg.GetMessageListReactionExtensionsReq) error {
|
||||||
|
// if !config.Config.Callback.CallbackAfterSendGroupMsg.Enable {
|
||||||
|
// return nil
|
||||||
|
// }
|
||||||
|
// req := cbapi.CallbackGetMessageListReactionExtReq{
|
||||||
|
// OperationID: getReq.OperationID,
|
||||||
|
// CallbackCommand: constant.CallbackGetMessageListReactionExtensionsCommand,
|
||||||
|
// SourceID: getReq.SourceID,
|
||||||
|
// OpUserID: getReq.OpUserID,
|
||||||
|
// SessionType: getReq.SessionType,
|
||||||
|
// TypeKeyList: getReq.TypeKeyList,
|
||||||
|
// MessageKeyList: getReq.MessageReactionKeyList,
|
||||||
|
// }
|
||||||
|
// resp := &cbApi.CallbackGetMessageListReactionExtResp{CommonCallbackResp: &callbackResp}
|
||||||
|
// defer log.NewDebug(getReq.OperationID, utils.GetSelfFuncName(), req, *resp)
|
||||||
|
// if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackGetMessageListReactionExtensionsCommand, req, resp, config.Config.Callback.CallbackAfterSendGroupMsg.CallbackTimeOut); err != nil {
|
||||||
|
// callbackResp.ErrCode = http2.StatusInternalServerError
|
||||||
|
// callbackResp.ErrMsg = err.Error()
|
||||||
|
// }
|
||||||
|
// return resp
|
||||||
|
//}
|
||||||
|
//func callbackAddMessageReactionExtensions(setReq *msg.AddMessageReactionExtensionsReq) *cb.CallbackAddMessageReactionExtResp {
|
||||||
|
// callbackResp := cbapi.CommonCallbackResp{OperationID: setReq.OperationID}
|
||||||
|
// log.NewDebug(setReq.OperationID, utils.GetSelfFuncName(), setReq.String())
|
||||||
|
// req := cbapi.CallbackAddMessageReactionExtReq{
|
||||||
|
// OperationID: setReq.OperationID,
|
||||||
|
// CallbackCommand: constant.CallbackAddMessageListReactionExtensionsCommand,
|
||||||
|
// SourceID: setReq.SourceID,
|
||||||
|
// OpUserID: setReq.OpUserID,
|
||||||
|
// SessionType: setReq.SessionType,
|
||||||
|
// ReactionExtensionList: setReq.ReactionExtensionList,
|
||||||
|
// ClientMsgID: setReq.ClientMsgID,
|
||||||
|
// IsReact: setReq.IsReact,
|
||||||
|
// IsExternalExtensions: setReq.IsExternalExtensions,
|
||||||
|
// MsgFirstModifyTime: setReq.MsgFirstModifyTime,
|
||||||
|
// }
|
||||||
|
// resp := &cbapi.CallbackAddMessageReactionExtResp{CommonCallbackResp: &callbackResp}
|
||||||
|
// defer log.NewDebug(setReq.OperationID, utils.GetSelfFuncName(), req, *resp, *resp.CommonCallbackResp, resp.IsReact, resp.MsgFirstModifyTime)
|
||||||
|
// if err := http.CallBackPostReturn(config.Config.Callback.CallbackUrl, constant.CallbackAddMessageListReactionExtensionsCommand, req, resp, config.Config.Callback.CallbackAfterSendGroupMsg.CallbackTimeOut); err != nil {
|
||||||
|
// callbackResp.ErrCode = http2.StatusInternalServerError
|
||||||
|
// callbackResp.ErrMsg = err.Error()
|
||||||
|
// }
|
||||||
|
// return resp
|
||||||
|
//
|
||||||
|
//}
|
||||||
|
@ -1,621 +0,0 @@
|
|||||||
package msg
|
|
||||||
|
|
||||||
import (
|
|
||||||
"Open_IM/pkg/common/config"
|
|
||||||
"Open_IM/pkg/common/constant"
|
|
||||||
imdb "Open_IM/pkg/common/db/mysql_model/im_mysql_model"
|
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
"Open_IM/pkg/common/tokenverify"
|
|
||||||
utils2 "Open_IM/pkg/common/utils"
|
|
||||||
pbGroup "Open_IM/pkg/proto/group"
|
|
||||||
"Open_IM/pkg/proto/sdkws"
|
|
||||||
"Open_IM/pkg/utils"
|
|
||||||
"context"
|
|
||||||
"github.com/golang/protobuf/jsonpb"
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
"google.golang.org/protobuf/types/known/wrapperspb"
|
|
||||||
)
|
|
||||||
|
|
||||||
//message GroupCreatedTips{
|
|
||||||
// GroupInfo Group = 1;
|
|
||||||
// GroupMemberFullInfo Creator = 2;
|
|
||||||
// repeated GroupMemberFullInfo MemberList = 3;
|
|
||||||
// uint64 OperationTime = 4;
|
|
||||||
//} creator->group
|
|
||||||
|
|
||||||
func setOpUserInfo(opUserID, groupID string, groupMemberInfo *sdkws.GroupMemberFullInfo) error {
|
|
||||||
if tokenverify.IsManagerUserID(opUserID) {
|
|
||||||
u, err := imdb.GetUserByUserID(opUserID)
|
|
||||||
if err != nil {
|
|
||||||
return utils.Wrap(err, "GetUserByUserID failed")
|
|
||||||
}
|
|
||||||
utils.CopyStructFields(groupMemberInfo, u)
|
|
||||||
groupMemberInfo.GroupID = groupID
|
|
||||||
} else {
|
|
||||||
u, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(groupID, opUserID)
|
|
||||||
if err == nil {
|
|
||||||
if err = utils2.GroupMemberDBCopyOpenIM(groupMemberInfo, u); err != nil {
|
|
||||||
return utils.Wrap(err, "")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
user, err := imdb.GetUserByUserID(opUserID)
|
|
||||||
if err != nil {
|
|
||||||
return utils.Wrap(err, "")
|
|
||||||
}
|
|
||||||
groupMemberInfo.GroupID = groupID
|
|
||||||
groupMemberInfo.UserID = user.UserID
|
|
||||||
groupMemberInfo.Nickname = user.Nickname
|
|
||||||
groupMemberInfo.AppMangerLevel = user.AppMangerLevel
|
|
||||||
groupMemberInfo.FaceURL = user.FaceURL
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setGroupInfo(groupID string, groupInfo *sdkws.GroupInfo) error {
|
|
||||||
group, err := imdb.GetGroupInfoByGroupID(groupID)
|
|
||||||
if err != nil {
|
|
||||||
return utils.Wrap(err, "GetGroupInfoByGroupID failed")
|
|
||||||
}
|
|
||||||
err = utils2.GroupDBCopyOpenIM(groupInfo, group)
|
|
||||||
if err != nil {
|
|
||||||
log.NewWarn("", "GroupDBCopyOpenIM failed ", groupID, err.Error())
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setGroupMemberInfo(groupID, userID string, groupMemberInfo *sdkws.GroupMemberFullInfo) error {
|
|
||||||
groupMember, err := imdb.GetGroupMemberInfoByGroupIDAndUserID(groupID, userID)
|
|
||||||
if err == nil {
|
|
||||||
return utils.Wrap(utils2.GroupMemberDBCopyOpenIM(groupMemberInfo, groupMember), "")
|
|
||||||
}
|
|
||||||
|
|
||||||
user, err := imdb.GetUserByUserID(userID)
|
|
||||||
if err != nil {
|
|
||||||
return utils.Wrap(err, "")
|
|
||||||
}
|
|
||||||
groupMemberInfo.GroupID = groupID
|
|
||||||
groupMemberInfo.UserID = user.UserID
|
|
||||||
groupMemberInfo.Nickname = user.Nickname
|
|
||||||
groupMemberInfo.AppMangerLevel = user.AppMangerLevel
|
|
||||||
groupMemberInfo.FaceURL = user.FaceURL
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setGroupOwnerInfo(groupID string, groupMemberInfo *sdkws.GroupMemberFullInfo) error {
|
|
||||||
groupMember, err := imdb.GetGroupOwnerInfoByGroupID(groupID)
|
|
||||||
if err != nil {
|
|
||||||
return utils.Wrap(err, "")
|
|
||||||
}
|
|
||||||
if err = utils2.GroupMemberDBCopyOpenIM(groupMemberInfo, groupMember); err != nil {
|
|
||||||
return utils.Wrap(err, "")
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setPublicUserInfo(userID string, publicUserInfo *sdkws.PublicUserInfo) error {
|
|
||||||
user, err := imdb.GetUserByUserID(userID)
|
|
||||||
if err != nil {
|
|
||||||
return utils.Wrap(err, "")
|
|
||||||
}
|
|
||||||
utils2.UserDBCopyOpenIMPublicUser(publicUserInfo, user)
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func groupNotification(contentType int32, m proto.Message, sendID, groupID, recvUserID, operationID string) {
|
|
||||||
log.Info(operationID, utils.GetSelfFuncName(), "args: ", contentType, sendID, groupID, recvUserID)
|
|
||||||
|
|
||||||
var err error
|
|
||||||
var tips sdkws.TipsComm
|
|
||||||
tips.Detail, err = proto.Marshal(m)
|
|
||||||
if err != nil {
|
|
||||||
log.Error(operationID, "Marshal failed ", err.Error(), m.String())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
marshaler := jsonpb.Marshaler{
|
|
||||||
OrigName: true,
|
|
||||||
EnumsAsInts: false,
|
|
||||||
EmitDefaults: false,
|
|
||||||
}
|
|
||||||
|
|
||||||
tips.JsonDetail, _ = marshaler.MarshalToString(m)
|
|
||||||
var nickname string
|
|
||||||
|
|
||||||
from, err := imdb.GetUserByUserID(sendID)
|
|
||||||
if err != nil {
|
|
||||||
log.Error(operationID, "GetUserByUserID failed ", err.Error(), sendID)
|
|
||||||
}
|
|
||||||
if from != nil {
|
|
||||||
nickname = from.Nickname
|
|
||||||
}
|
|
||||||
|
|
||||||
to, err := imdb.GetUserByUserID(recvUserID)
|
|
||||||
if err != nil {
|
|
||||||
log.NewWarn(operationID, "GetUserByUserID failed ", err.Error(), recvUserID)
|
|
||||||
}
|
|
||||||
toNickname := ""
|
|
||||||
if to != nil {
|
|
||||||
toNickname = to.Nickname
|
|
||||||
}
|
|
||||||
|
|
||||||
cn := config.Config.Notification
|
|
||||||
switch contentType {
|
|
||||||
case constant.GroupCreatedNotification:
|
|
||||||
tips.DefaultTips = nickname + " " + cn.GroupCreated.DefaultTips.Tips
|
|
||||||
case constant.GroupInfoSetNotification:
|
|
||||||
tips.DefaultTips = nickname + " " + cn.GroupInfoSet.DefaultTips.Tips
|
|
||||||
case constant.JoinGroupApplicationNotification:
|
|
||||||
tips.DefaultTips = nickname + " " + cn.JoinGroupApplication.DefaultTips.Tips
|
|
||||||
case constant.MemberQuitNotification:
|
|
||||||
tips.DefaultTips = nickname + " " + cn.MemberQuit.DefaultTips.Tips
|
|
||||||
case constant.GroupApplicationAcceptedNotification: //
|
|
||||||
tips.DefaultTips = toNickname + " " + cn.GroupApplicationAccepted.DefaultTips.Tips
|
|
||||||
case constant.GroupApplicationRejectedNotification: //
|
|
||||||
tips.DefaultTips = toNickname + " " + cn.GroupApplicationRejected.DefaultTips.Tips
|
|
||||||
case constant.GroupOwnerTransferredNotification: //
|
|
||||||
tips.DefaultTips = toNickname + " " + cn.GroupOwnerTransferred.DefaultTips.Tips
|
|
||||||
case constant.MemberKickedNotification: //
|
|
||||||
tips.DefaultTips = toNickname + " " + cn.MemberKicked.DefaultTips.Tips
|
|
||||||
case constant.MemberInvitedNotification: //
|
|
||||||
tips.DefaultTips = toNickname + " " + cn.MemberInvited.DefaultTips.Tips
|
|
||||||
case constant.MemberEnterNotification:
|
|
||||||
tips.DefaultTips = toNickname + " " + cn.MemberEnter.DefaultTips.Tips
|
|
||||||
case constant.GroupDismissedNotification:
|
|
||||||
tips.DefaultTips = toNickname + "" + cn.GroupDismissed.DefaultTips.Tips
|
|
||||||
case constant.GroupMutedNotification:
|
|
||||||
tips.DefaultTips = toNickname + "" + cn.GroupMuted.DefaultTips.Tips
|
|
||||||
case constant.GroupCancelMutedNotification:
|
|
||||||
tips.DefaultTips = toNickname + "" + cn.GroupCancelMuted.DefaultTips.Tips
|
|
||||||
case constant.GroupMemberMutedNotification:
|
|
||||||
tips.DefaultTips = toNickname + "" + cn.GroupMemberMuted.DefaultTips.Tips
|
|
||||||
case constant.GroupMemberCancelMutedNotification:
|
|
||||||
tips.DefaultTips = toNickname + "" + cn.GroupMemberCancelMuted.DefaultTips.Tips
|
|
||||||
case constant.GroupMemberInfoSetNotification:
|
|
||||||
tips.DefaultTips = toNickname + "" + cn.GroupMemberInfoSet.DefaultTips.Tips
|
|
||||||
case constant.GroupMemberSetToAdminNotification:
|
|
||||||
tips.DefaultTips = toNickname + "" + cn.GroupMemberSetToAdmin.DefaultTips.Tips
|
|
||||||
case constant.GroupMemberSetToOrdinaryUserNotification:
|
|
||||||
tips.DefaultTips = toNickname + "" + cn.GroupMemberSetToOrdinary.DefaultTips.Tips
|
|
||||||
default:
|
|
||||||
log.Error(operationID, "contentType failed ", contentType)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
var n NotificationMsg
|
|
||||||
n.SendID = sendID
|
|
||||||
if groupID != "" {
|
|
||||||
n.RecvID = groupID
|
|
||||||
group, err := imdb.GetGroupInfoByGroupID(groupID)
|
|
||||||
if err != nil {
|
|
||||||
log.NewError(operationID, "GetGroupInfoByGroupID failed ", err.Error(), groupID)
|
|
||||||
}
|
|
||||||
switch group.GroupType {
|
|
||||||
case constant.NormalGroup:
|
|
||||||
n.SessionType = constant.GroupChatType
|
|
||||||
default:
|
|
||||||
n.SessionType = constant.SuperGroupChatType
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
n.RecvID = recvUserID
|
|
||||||
n.SessionType = constant.SingleChatType
|
|
||||||
}
|
|
||||||
n.ContentType = contentType
|
|
||||||
n.OperationID = operationID
|
|
||||||
n.Content, err = proto.Marshal(&tips)
|
|
||||||
if err != nil {
|
|
||||||
log.Error(operationID, "Marshal failed ", err.Error(), tips.String())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
Notification(&n)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建群后调用
|
|
||||||
func GroupCreatedNotification(operationID, opUserID, groupID string, initMemberList []string) {
|
|
||||||
GroupCreatedTips := sdkws.GroupCreatedTips{Group: &sdkws.GroupInfo{},
|
|
||||||
OpUser: &sdkws.GroupMemberFullInfo{}, GroupOwnerUser: &sdkws.GroupMemberFullInfo{}}
|
|
||||||
if err := setOpUserInfo(opUserID, groupID, GroupCreatedTips.OpUser); err != nil {
|
|
||||||
log.NewError(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID, GroupCreatedTips.OpUser)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
err := setGroupInfo(groupID, GroupCreatedTips.Group)
|
|
||||||
if err != nil {
|
|
||||||
log.Error(operationID, "setGroupInfo failed ", groupID, GroupCreatedTips.Group)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
imdb.GetGroupOwnerInfoByGroupID(groupID)
|
|
||||||
if err := setGroupOwnerInfo(groupID, GroupCreatedTips.GroupOwnerUser); err != nil {
|
|
||||||
log.Error(operationID, "setGroupOwnerInfo failed", err.Error(), groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, v := range initMemberList {
|
|
||||||
var groupMemberInfo sdkws.GroupMemberFullInfo
|
|
||||||
if err := setGroupMemberInfo(groupID, v, &groupMemberInfo); err != nil {
|
|
||||||
log.Error(operationID, "setGroupMemberInfo failed ", err.Error(), groupID, v)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
GroupCreatedTips.MemberList = append(GroupCreatedTips.MemberList, &groupMemberInfo)
|
|
||||||
if len(GroupCreatedTips.MemberList) == constant.MaxNotificationNum {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
groupNotification(constant.GroupCreatedNotification, &GroupCreatedTips, opUserID, groupID, "", operationID)
|
|
||||||
}
|
|
||||||
|
|
||||||
// 群信息改变后掉用
|
|
||||||
// groupName := ""
|
|
||||||
//
|
|
||||||
// notification := ""
|
|
||||||
// introduction := ""
|
|
||||||
// faceURL := ""
|
|
||||||
func GroupInfoSetNotification(operationID, opUserID, groupID string, groupName, notification, introduction, faceURL string, needVerification *wrapperspb.Int32Value) {
|
|
||||||
GroupInfoChangedTips := sdkws.GroupInfoSetTips{Group: &sdkws.GroupInfo{}, OpUser: &sdkws.GroupMemberFullInfo{}}
|
|
||||||
if err := setGroupInfo(groupID, GroupInfoChangedTips.Group); err != nil {
|
|
||||||
log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
GroupInfoChangedTips.Group.GroupName = groupName
|
|
||||||
GroupInfoChangedTips.Group.Notification = notification
|
|
||||||
GroupInfoChangedTips.Group.Introduction = introduction
|
|
||||||
GroupInfoChangedTips.Group.FaceURL = faceURL
|
|
||||||
if needVerification != nil {
|
|
||||||
GroupInfoChangedTips.Group.NeedVerification = needVerification.Value
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := setOpUserInfo(opUserID, groupID, GroupInfoChangedTips.OpUser); err != nil {
|
|
||||||
log.Error(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
groupNotification(constant.GroupInfoSetNotification, &GroupInfoChangedTips, opUserID, groupID, "", operationID)
|
|
||||||
}
|
|
||||||
|
|
||||||
func GroupMutedNotification(operationID, opUserID, groupID string) {
|
|
||||||
tips := sdkws.GroupMutedTips{Group: &sdkws.GroupInfo{},
|
|
||||||
OpUser: &sdkws.GroupMemberFullInfo{}}
|
|
||||||
if err := setGroupInfo(groupID, tips.Group); err != nil {
|
|
||||||
log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setOpUserInfo(opUserID, groupID, tips.OpUser); err != nil {
|
|
||||||
log.Error(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
groupNotification(constant.GroupMutedNotification, &tips, opUserID, groupID, "", operationID)
|
|
||||||
}
|
|
||||||
|
|
||||||
func GroupCancelMutedNotification(operationID, opUserID, groupID string) {
|
|
||||||
tips := sdkws.GroupCancelMutedTips{Group: &sdkws.GroupInfo{},
|
|
||||||
OpUser: &sdkws.GroupMemberFullInfo{}}
|
|
||||||
if err := setGroupInfo(groupID, tips.Group); err != nil {
|
|
||||||
log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setOpUserInfo(opUserID, groupID, tips.OpUser); err != nil {
|
|
||||||
log.Error(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
groupNotification(constant.GroupCancelMutedNotification, &tips, opUserID, groupID, "", operationID)
|
|
||||||
}
|
|
||||||
|
|
||||||
func GroupMemberMutedNotification(operationID, opUserID, groupID, groupMemberUserID string, mutedSeconds uint32) {
|
|
||||||
tips := sdkws.GroupMemberMutedTips{Group: &sdkws.GroupInfo{},
|
|
||||||
OpUser: &sdkws.GroupMemberFullInfo{}, MutedUser: &sdkws.GroupMemberFullInfo{}}
|
|
||||||
tips.MutedSeconds = mutedSeconds
|
|
||||||
if err := setGroupInfo(groupID, tips.Group); err != nil {
|
|
||||||
log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setOpUserInfo(opUserID, groupID, tips.OpUser); err != nil {
|
|
||||||
log.Error(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setGroupMemberInfo(groupID, groupMemberUserID, tips.MutedUser); err != nil {
|
|
||||||
log.Error(operationID, "setGroupMemberInfo failed ", err.Error(), groupID, groupMemberUserID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
groupNotification(constant.GroupMemberMutedNotification, &tips, opUserID, groupID, "", operationID)
|
|
||||||
}
|
|
||||||
|
|
||||||
func GroupMemberInfoSetNotification(operationID, opUserID, groupID, groupMemberUserID string) {
|
|
||||||
tips := sdkws.GroupMemberInfoSetTips{Group: &sdkws.GroupInfo{},
|
|
||||||
OpUser: &sdkws.GroupMemberFullInfo{}, ChangedUser: &sdkws.GroupMemberFullInfo{}}
|
|
||||||
if err := setGroupInfo(groupID, tips.Group); err != nil {
|
|
||||||
log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setOpUserInfo(opUserID, groupID, tips.OpUser); err != nil {
|
|
||||||
log.Error(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setGroupMemberInfo(groupID, groupMemberUserID, tips.ChangedUser); err != nil {
|
|
||||||
log.Error(operationID, "setGroupMemberInfo failed ", err.Error(), groupID, groupMemberUserID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
groupNotification(constant.GroupMemberInfoSetNotification, &tips, opUserID, groupID, "", operationID)
|
|
||||||
}
|
|
||||||
|
|
||||||
func GroupMemberRoleLevelChangeNotification(operationID, opUserID, groupID, groupMemberUserID string, notificationType int32) {
|
|
||||||
if notificationType != constant.GroupMemberSetToAdminNotification && notificationType != constant.GroupMemberSetToOrdinaryUserNotification {
|
|
||||||
log.NewError(operationID, utils.GetSelfFuncName(), "invalid notificationType: ", notificationType)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
tips := sdkws.GroupMemberInfoSetTips{Group: &sdkws.GroupInfo{},
|
|
||||||
OpUser: &sdkws.GroupMemberFullInfo{}, ChangedUser: &sdkws.GroupMemberFullInfo{}}
|
|
||||||
if err := setGroupInfo(groupID, tips.Group); err != nil {
|
|
||||||
log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setOpUserInfo(opUserID, groupID, tips.OpUser); err != nil {
|
|
||||||
log.Error(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setGroupMemberInfo(groupID, groupMemberUserID, tips.ChangedUser); err != nil {
|
|
||||||
log.Error(operationID, "setGroupMemberInfo failed ", err.Error(), groupID, groupMemberUserID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
groupNotification(notificationType, &tips, opUserID, groupID, "", operationID)
|
|
||||||
}
|
|
||||||
|
|
||||||
func GroupMemberCancelMutedNotification(operationID, opUserID, groupID, groupMemberUserID string) {
|
|
||||||
tips := sdkws.GroupMemberCancelMutedTips{Group: &sdkws.GroupInfo{},
|
|
||||||
OpUser: &sdkws.GroupMemberFullInfo{}, MutedUser: &sdkws.GroupMemberFullInfo{}}
|
|
||||||
if err := setGroupInfo(groupID, tips.Group); err != nil {
|
|
||||||
log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setOpUserInfo(opUserID, groupID, tips.OpUser); err != nil {
|
|
||||||
log.Error(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setGroupMemberInfo(groupID, groupMemberUserID, tips.MutedUser); err != nil {
|
|
||||||
log.Error(operationID, "setGroupMemberInfo failed ", err.Error(), groupID, groupMemberUserID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
groupNotification(constant.GroupMemberCancelMutedNotification, &tips, opUserID, groupID, "", operationID)
|
|
||||||
}
|
|
||||||
|
|
||||||
// message ReceiveJoinApplicationTips{
|
|
||||||
// GroupInfo Group = 1;
|
|
||||||
// PublicUserInfo Applicant = 2;
|
|
||||||
// string Reason = 3;
|
|
||||||
// } apply->all managers GroupID string `protobuf:"bytes,1,opt,name=GroupID" json:"GroupID,omitempty"`
|
|
||||||
//
|
|
||||||
// ReqMessage string `protobuf:"bytes,2,opt,name=ReqMessage" json:"ReqMessage,omitempty"`
|
|
||||||
// OpUserID string `protobuf:"bytes,3,opt,name=OpUserID" json:"OpUserID,omitempty"`
|
|
||||||
// OperationID string `protobuf:"bytes,4,opt,name=OperationID" json:"OperationID,omitempty"`
|
|
||||||
//
|
|
||||||
// 申请进群后调用
|
|
||||||
func JoinGroupApplicationNotification(ctx context.Context, req *pbGroup.JoinGroupReq) {
|
|
||||||
JoinGroupApplicationTips := sdkws.JoinGroupApplicationTips{Group: &sdkws.GroupInfo{}, Applicant: &sdkws.PublicUserInfo{}}
|
|
||||||
err := setGroupInfo(req.GroupID, JoinGroupApplicationTips.Group)
|
|
||||||
if err != nil {
|
|
||||||
log.Error(utils.OperationID(ctx), "setGroupInfo failed ", err.Error(), req.GroupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err = setPublicUserInfo(utils.OpUserID(ctx), JoinGroupApplicationTips.Applicant); err != nil {
|
|
||||||
log.Error(utils.OperationID(ctx), "setPublicUserInfo failed ", err.Error(), utils.OpUserID(ctx))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
JoinGroupApplicationTips.ReqMsg = req.ReqMessage
|
|
||||||
|
|
||||||
managerList, err := imdb.GetOwnerManagerByGroupID(req.GroupID)
|
|
||||||
if err != nil {
|
|
||||||
log.NewError(utils.OperationID(ctx), "GetOwnerManagerByGroupId failed ", err.Error(), req.GroupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, v := range managerList {
|
|
||||||
groupNotification(constant.JoinGroupApplicationNotification, &JoinGroupApplicationTips, utils.OpUserID(ctx), "", v.UserID, utils.OperationID(ctx))
|
|
||||||
log.NewInfo(utils.OperationID(ctx), "Notification ", v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func MemberQuitNotification(req *pbGroup.QuitGroupReq) {
|
|
||||||
MemberQuitTips := sdkws.MemberQuitTips{Group: &sdkws.GroupInfo{}, QuitUser: &sdkws.GroupMemberFullInfo{}}
|
|
||||||
if err := setGroupInfo(req.GroupID, MemberQuitTips.Group); err != nil {
|
|
||||||
log.Error(req.OperationID, "setGroupInfo failed ", err.Error(), req.GroupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setOpUserInfo(req.OpUserID, req.GroupID, MemberQuitTips.QuitUser); err != nil {
|
|
||||||
log.Error(req.OperationID, "setOpUserInfo failed ", err.Error(), req.OpUserID, req.GroupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
groupNotification(constant.MemberQuitNotification, &MemberQuitTips, req.OpUserID, req.GroupID, "", req.OperationID)
|
|
||||||
}
|
|
||||||
|
|
||||||
// message ApplicationProcessedTips{
|
|
||||||
// GroupInfo Group = 1;
|
|
||||||
// GroupMemberFullInfo OpUser = 2;
|
|
||||||
// int32 Result = 3;
|
|
||||||
// string Reason = 4;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// 处理进群请求后调用
|
|
||||||
func GroupApplicationAcceptedNotification(req *pbGroup.GroupApplicationResponseReq) {
|
|
||||||
GroupApplicationAcceptedTips := sdkws.GroupApplicationAcceptedTips{Group: &sdkws.GroupInfo{}, OpUser: &sdkws.GroupMemberFullInfo{}, HandleMsg: req.HandledMsg}
|
|
||||||
if err := setGroupInfo(req.GroupID, GroupApplicationAcceptedTips.Group); err != nil {
|
|
||||||
log.NewError(req.OperationID, "setGroupInfo failed ", err.Error(), req.GroupID, GroupApplicationAcceptedTips.Group)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setOpUserInfo(req.OpUserID, req.GroupID, GroupApplicationAcceptedTips.OpUser); err != nil {
|
|
||||||
log.Error(req.OperationID, "setOpUserInfo failed", req.OpUserID, req.GroupID, GroupApplicationAcceptedTips.OpUser)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
groupNotification(constant.GroupApplicationAcceptedNotification, &GroupApplicationAcceptedTips, req.OpUserID, "", req.FromUserID, req.OperationID)
|
|
||||||
adminList, err := imdb.GetOwnerManagerByGroupID(req.GroupID)
|
|
||||||
if err != nil {
|
|
||||||
log.Error(req.OperationID, "GetOwnerManagerByGroupID failed", req.GroupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, v := range adminList {
|
|
||||||
if v.UserID == req.OpUserID {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
GroupApplicationAcceptedTips.ReceiverAs = 1
|
|
||||||
groupNotification(constant.GroupApplicationAcceptedNotification, &GroupApplicationAcceptedTips, req.OpUserID, "", v.UserID, req.OperationID)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func GroupApplicationRejectedNotification(req *pbGroup.GroupApplicationResponseReq) {
|
|
||||||
GroupApplicationRejectedTips := sdkws.GroupApplicationRejectedTips{Group: &sdkws.GroupInfo{}, OpUser: &sdkws.GroupMemberFullInfo{}, HandleMsg: req.HandledMsg}
|
|
||||||
if err := setGroupInfo(req.GroupID, GroupApplicationRejectedTips.Group); err != nil {
|
|
||||||
log.NewError(req.OperationID, "setGroupInfo failed ", err.Error(), req.GroupID, GroupApplicationRejectedTips.Group)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setOpUserInfo(req.OpUserID, req.GroupID, GroupApplicationRejectedTips.OpUser); err != nil {
|
|
||||||
log.Error(req.OperationID, "setOpUserInfo failed", req.OpUserID, req.GroupID, GroupApplicationRejectedTips.OpUser)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
groupNotification(constant.GroupApplicationRejectedNotification, &GroupApplicationRejectedTips, req.OpUserID, "", req.FromUserID, req.OperationID)
|
|
||||||
adminList, err := imdb.GetOwnerManagerByGroupID(req.GroupID)
|
|
||||||
if err != nil {
|
|
||||||
log.Error(req.OperationID, "GetOwnerManagerByGroupID failed", req.GroupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, v := range adminList {
|
|
||||||
if v.UserID == req.OpUserID {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
GroupApplicationRejectedTips.ReceiverAs = 1
|
|
||||||
groupNotification(constant.GroupApplicationRejectedNotification, &GroupApplicationRejectedTips, req.OpUserID, "", v.UserID, req.OperationID)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func GroupOwnerTransferredNotification(req *pbGroup.TransferGroupOwnerReq) {
|
|
||||||
GroupOwnerTransferredTips := sdkws.GroupOwnerTransferredTips{Group: &sdkws.GroupInfo{}, OpUser: &sdkws.GroupMemberFullInfo{}, NewGroupOwner: &sdkws.GroupMemberFullInfo{}}
|
|
||||||
if err := setGroupInfo(req.GroupID, GroupOwnerTransferredTips.Group); err != nil {
|
|
||||||
log.NewError(req.OperationID, "setGroupInfo failed ", err.Error(), req.GroupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setOpUserInfo(req.OpUserID, req.GroupID, GroupOwnerTransferredTips.OpUser); err != nil {
|
|
||||||
log.Error(req.OperationID, "setOpUserInfo failed", req.OpUserID, req.GroupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setGroupMemberInfo(req.GroupID, req.NewOwnerUserID, GroupOwnerTransferredTips.NewGroupOwner); err != nil {
|
|
||||||
log.Error(req.OperationID, "setGroupMemberInfo failed", req.GroupID, req.NewOwnerUserID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
groupNotification(constant.GroupOwnerTransferredNotification, &GroupOwnerTransferredTips, req.OpUserID, req.GroupID, "", req.OperationID)
|
|
||||||
}
|
|
||||||
|
|
||||||
func GroupDismissedNotification(req *pbGroup.DismissGroupReq) {
|
|
||||||
tips := sdkws.GroupDismissedTips{Group: &sdkws.GroupInfo{}, OpUser: &sdkws.GroupMemberFullInfo{}}
|
|
||||||
if err := setGroupInfo(req.GroupID, tips.Group); err != nil {
|
|
||||||
log.NewError(req.OperationID, "setGroupInfo failed ", err.Error(), req.GroupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setOpUserInfo(req.OpUserID, req.GroupID, tips.OpUser); err != nil {
|
|
||||||
log.Error(req.OperationID, "setOpUserInfo failed", req.OpUserID, req.GroupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
groupNotification(constant.GroupDismissedNotification, &tips, req.OpUserID, req.GroupID, "", req.OperationID)
|
|
||||||
}
|
|
||||||
|
|
||||||
// message MemberKickedTips{
|
|
||||||
// GroupInfo Group = 1;
|
|
||||||
// GroupMemberFullInfo OpUser = 2;
|
|
||||||
// GroupMemberFullInfo KickedUser = 3;
|
|
||||||
// uint64 OperationTime = 4;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// 被踢后调用
|
|
||||||
func MemberKickedNotification(req *pbGroup.KickGroupMemberReq, kickedUserIDList []string) {
|
|
||||||
MemberKickedTips := sdkws.MemberKickedTips{Group: &sdkws.GroupInfo{}, OpUser: &sdkws.GroupMemberFullInfo{}}
|
|
||||||
if err := setGroupInfo(req.GroupID, MemberKickedTips.Group); err != nil {
|
|
||||||
log.Error(req.OperationID, "setGroupInfo failed ", err.Error(), req.GroupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setOpUserInfo(req.OpUserID, req.GroupID, MemberKickedTips.OpUser); err != nil {
|
|
||||||
log.Error(req.OperationID, "setOpUserInfo failed ", err.Error(), req.OpUserID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, v := range kickedUserIDList {
|
|
||||||
var groupMemberInfo sdkws.GroupMemberFullInfo
|
|
||||||
if err := setGroupMemberInfo(req.GroupID, v, &groupMemberInfo); err != nil {
|
|
||||||
log.Error(req.OperationID, "setGroupMemberInfo failed ", err.Error(), req.GroupID, v)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
MemberKickedTips.KickedUserList = append(MemberKickedTips.KickedUserList, &groupMemberInfo)
|
|
||||||
}
|
|
||||||
groupNotification(constant.MemberKickedNotification, &MemberKickedTips, req.OpUserID, req.GroupID, "", req.OperationID)
|
|
||||||
//
|
|
||||||
//for _, v := range kickedUserIDList {
|
|
||||||
// groupNotification(constant.MemberKickedNotification, &MemberKickedTips, req.OpUserID, "", v, req.OperationID)
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
// message MemberInvitedTips{
|
|
||||||
// GroupInfo Group = 1;
|
|
||||||
// GroupMemberFullInfo OpUser = 2;
|
|
||||||
// GroupMemberFullInfo InvitedUser = 3;
|
|
||||||
// uint64 OperationTime = 4;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// 被邀请进群后调用
|
|
||||||
func MemberInvitedNotification(operationID, groupID, opUserID, reason string, invitedUserIDList []string) {
|
|
||||||
MemberInvitedTips := sdkws.MemberInvitedTips{Group: &sdkws.GroupInfo{}, OpUser: &sdkws.GroupMemberFullInfo{}}
|
|
||||||
if err := setGroupInfo(groupID, MemberInvitedTips.Group); err != nil {
|
|
||||||
log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setOpUserInfo(opUserID, groupID, MemberInvitedTips.OpUser); err != nil {
|
|
||||||
log.Error(operationID, "setOpUserInfo failed ", err.Error(), opUserID, groupID)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
for _, v := range invitedUserIDList {
|
|
||||||
var groupMemberInfo sdkws.GroupMemberFullInfo
|
|
||||||
if err := setGroupMemberInfo(groupID, v, &groupMemberInfo); err != nil {
|
|
||||||
log.Error(operationID, "setGroupMemberInfo failed ", err.Error(), groupID)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
MemberInvitedTips.InvitedUserList = append(MemberInvitedTips.InvitedUserList, &groupMemberInfo)
|
|
||||||
}
|
|
||||||
groupNotification(constant.MemberInvitedNotification, &MemberInvitedTips, opUserID, groupID, "", operationID)
|
|
||||||
}
|
|
||||||
|
|
||||||
//message GroupInfoChangedTips{
|
|
||||||
// int32 ChangedType = 1; //bitwise operators: 1:groupName; 10:Notification 100:Introduction; 1000:FaceUrl
|
|
||||||
// GroupInfo Group = 2;
|
|
||||||
// GroupMemberFullInfo OpUser = 3;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//message MemberLeaveTips{
|
|
||||||
// GroupInfo Group = 1;
|
|
||||||
// GroupMemberFullInfo LeaverUser = 2;
|
|
||||||
// uint64 OperationTime = 3;
|
|
||||||
//}
|
|
||||||
|
|
||||||
//群成员退群后调用
|
|
||||||
|
|
||||||
// message MemberEnterTips{
|
|
||||||
// GroupInfo Group = 1;
|
|
||||||
// GroupMemberFullInfo EntrantUser = 2;
|
|
||||||
// uint64 OperationTime = 3;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// 群成员主动申请进群,管理员同意后调用,
|
|
||||||
func MemberEnterNotification(ctx context.Context, req *pbGroup.GroupApplicationResponseReq) {
|
|
||||||
MemberEnterTips := sdkws.MemberEnterTips{Group: &sdkws.GroupInfo{}, EntrantUser: &sdkws.GroupMemberFullInfo{}}
|
|
||||||
if err := setGroupInfo(req.GroupID, MemberEnterTips.Group); err != nil {
|
|
||||||
log.Error(req.OperationID, "setGroupInfo failed ", err.Error(), req.GroupID, MemberEnterTips.Group)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setGroupMemberInfo(req.GroupID, req.FromUserID, MemberEnterTips.EntrantUser); err != nil {
|
|
||||||
log.Error(req.OperationID, "setGroupMemberInfo failed ", err.Error(), req.OpUserID, req.GroupID, MemberEnterTips.EntrantUser)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
groupNotification(constant.MemberEnterNotification, &MemberEnterTips, req.OpUserID, req.GroupID, "", req.OperationID)
|
|
||||||
}
|
|
||||||
|
|
||||||
func MemberEnterDirectlyNotification(groupID string, entrantUserID string, operationID string) {
|
|
||||||
MemberEnterTips := sdkws.MemberEnterTips{Group: &sdkws.GroupInfo{}, EntrantUser: &sdkws.GroupMemberFullInfo{}}
|
|
||||||
if err := setGroupInfo(groupID, MemberEnterTips.Group); err != nil {
|
|
||||||
log.Error(operationID, "setGroupInfo failed ", err.Error(), groupID, MemberEnterTips.Group)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err := setGroupMemberInfo(groupID, entrantUserID, MemberEnterTips.EntrantUser); err != nil {
|
|
||||||
log.Error(operationID, "setGroupMemberInfo failed ", err.Error(), groupID, entrantUserID, MemberEnterTips.EntrantUser)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
groupNotification(constant.MemberEnterNotification, &MemberEnterTips, entrantUserID, groupID, "", operationID)
|
|
||||||
}
|
|
@ -1,47 +0,0 @@
|
|||||||
package msg
|
|
||||||
|
|
||||||
import (
|
|
||||||
"Open_IM/pkg/common/constant"
|
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
sdkws "Open_IM/pkg/proto/sdkws"
|
|
||||||
"Open_IM/pkg/utils"
|
|
||||||
"github.com/golang/protobuf/jsonpb"
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
)
|
|
||||||
|
|
||||||
func DeleteMessageNotification(opUserID, userID string, seqList []uint32, operationID string) {
|
|
||||||
DeleteMessageTips := sdkws.DeleteMessageTips{OpUserID: opUserID, UserID: userID, SeqList: seqList}
|
|
||||||
MessageNotification(operationID, userID, userID, constant.DeleteMessageNotification, &DeleteMessageTips)
|
|
||||||
}
|
|
||||||
|
|
||||||
func MessageNotification(operationID, sendID, recvID string, contentType int32, m proto.Message) {
|
|
||||||
log.Debug(operationID, utils.GetSelfFuncName(), "args: ", m.String(), contentType)
|
|
||||||
var err error
|
|
||||||
var tips sdkws.TipsComm
|
|
||||||
tips.Detail, err = proto.Marshal(m)
|
|
||||||
if err != nil {
|
|
||||||
log.Error(operationID, "Marshal failed ", err.Error(), m.String())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
marshaler := jsonpb.Marshaler{
|
|
||||||
OrigName: true,
|
|
||||||
EnumsAsInts: false,
|
|
||||||
EmitDefaults: false,
|
|
||||||
}
|
|
||||||
|
|
||||||
tips.JsonDetail, _ = marshaler.MarshalToString(m)
|
|
||||||
var n NotificationMsg
|
|
||||||
n.SendID = sendID
|
|
||||||
n.RecvID = recvID
|
|
||||||
n.ContentType = contentType
|
|
||||||
n.SessionType = constant.SingleChatType
|
|
||||||
n.MsgFrom = constant.SysMsgType
|
|
||||||
n.OperationID = operationID
|
|
||||||
n.Content, err = proto.Marshal(&tips)
|
|
||||||
if err != nil {
|
|
||||||
log.Error(operationID, "Marshal failed ", err.Error(), tips.String())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
Notification(&n)
|
|
||||||
}
|
|
@ -2,45 +2,28 @@ package msg
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/db"
|
"Open_IM/pkg/common/tracelog"
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
pbMsg "Open_IM/pkg/proto/msg"
|
pbMsg "Open_IM/pkg/proto/msg"
|
||||||
"Open_IM/pkg/utils"
|
|
||||||
"context"
|
"context"
|
||||||
|
|
||||||
goRedis "github.com/go-redis/redis/v8"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func (rpc *rpcChat) SetSendMsgStatus(_ context.Context, req *pbMsg.SetSendMsgStatusReq) (resp *pbMsg.SetSendMsgStatusResp, err error) {
|
func (m *msgServer) SetSendMsgStatus(ctx context.Context, req *pbMsg.SetSendMsgStatusReq) (*pbMsg.SetSendMsgStatusResp, error) {
|
||||||
resp = &pbMsg.SetSendMsgStatusResp{}
|
resp := &pbMsg.SetSendMsgStatusResp{}
|
||||||
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), req.String())
|
if err := m.MsgInterface.SetSendMsgStatus(ctx, tracelog.GetOperationID(ctx), req.Status); err != nil {
|
||||||
if err := db.DB.SetSendMsgStatus(req.Status, req.OperationID); err != nil {
|
return nil, err
|
||||||
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error())
|
|
||||||
resp.ErrCode = constant.ErrDatabase.ErrCode
|
|
||||||
resp.ErrMsg = err.Error()
|
|
||||||
return resp, nil
|
|
||||||
}
|
}
|
||||||
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), resp.String())
|
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (rpc *rpcChat) GetSendMsgStatus(_ context.Context, req *pbMsg.GetSendMsgStatusReq) (resp *pbMsg.GetSendMsgStatusResp, err error) {
|
func (m *msgServer) GetSendMsgStatus(ctx context.Context, req *pbMsg.GetSendMsgStatusReq) (*pbMsg.GetSendMsgStatusResp, error) {
|
||||||
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), req.String())
|
resp := &pbMsg.GetSendMsgStatusResp{}
|
||||||
resp = &pbMsg.GetSendMsgStatusResp{}
|
status, err := m.MsgInterface.GetSendMsgStatus(ctx, tracelog.GetOperationID(ctx))
|
||||||
status, err := db.DB.GetSendMsgStatus(req.OperationID)
|
if IsNotFound(err) {
|
||||||
if err != nil {
|
|
||||||
resp.Status = constant.MsgStatusNotExist
|
resp.Status = constant.MsgStatusNotExist
|
||||||
if err == goRedis.Nil {
|
|
||||||
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), req.OperationID, "not exist")
|
|
||||||
return resp, nil
|
|
||||||
} else {
|
|
||||||
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error())
|
|
||||||
resp.ErrMsg = err.Error()
|
|
||||||
resp.ErrCode = constant.ErrDB.ErrCode
|
|
||||||
return resp, nil
|
return resp, nil
|
||||||
|
} else if err != nil {
|
||||||
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
resp.Status = status
|
||||||
resp.Status = int32(status)
|
|
||||||
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), resp.String())
|
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
7
internal/rpc/msg/notification.go
Normal file
7
internal/rpc/msg/notification.go
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
package msg
|
||||||
|
|
||||||
|
import "context"
|
||||||
|
|
||||||
|
func DeleteMessageNotification(ctx context.Context, userID string, seqs []uint32) {
|
||||||
|
panic("todo")
|
||||||
|
}
|
@ -1,126 +0,0 @@
|
|||||||
package msg
|
|
||||||
|
|
||||||
import (
|
|
||||||
"Open_IM/pkg/utils"
|
|
||||||
"context"
|
|
||||||
go_redis "github.com/go-redis/redis/v8"
|
|
||||||
|
|
||||||
commonDB "Open_IM/pkg/common/db"
|
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
sdkws "Open_IM/pkg/proto/sdkws"
|
|
||||||
|
|
||||||
prome "Open_IM/pkg/common/prometheus"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *sdkws.GetMaxAndMinSeqReq) (*sdkws.GetMaxAndMinSeqResp, error) {
|
|
||||||
log.NewInfo(in.OperationID, "rpc getMaxAndMinSeq is arriving", in.String())
|
|
||||||
resp := new(sdkws.GetMaxAndMinSeqResp)
|
|
||||||
m := make(map[string]*sdkws.MaxAndMinSeq)
|
|
||||||
var maxSeq, minSeq uint64
|
|
||||||
var err1, err2 error
|
|
||||||
maxSeq, err1 = commonDB.DB.GetUserMaxSeq(in.UserID)
|
|
||||||
minSeq, err2 = commonDB.DB.GetUserMinSeq(in.UserID)
|
|
||||||
if (err1 != nil && err1 != go_redis.Nil) || (err2 != nil && err2 != go_redis.Nil) {
|
|
||||||
log.NewError(in.OperationID, "getMaxSeq from redis error", in.String())
|
|
||||||
if err1 != nil {
|
|
||||||
log.NewError(in.OperationID, utils.GetSelfFuncName(), err1.Error())
|
|
||||||
}
|
|
||||||
if err2 != nil {
|
|
||||||
log.NewError(in.OperationID, utils.GetSelfFuncName(), err2.Error())
|
|
||||||
}
|
|
||||||
resp.ErrCode = 200
|
|
||||||
resp.ErrMsg = "redis get err"
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
resp.MaxSeq = uint32(maxSeq)
|
|
||||||
resp.MinSeq = uint32(minSeq)
|
|
||||||
for _, groupID := range in.GroupIDList {
|
|
||||||
x := new(sdkws.MaxAndMinSeq)
|
|
||||||
maxSeq, _ := commonDB.DB.GetGroupMaxSeq(groupID)
|
|
||||||
minSeq, _ := commonDB.DB.GetGroupUserMinSeq(groupID, in.UserID)
|
|
||||||
x.MaxSeq = uint32(maxSeq)
|
|
||||||
x.MinSeq = uint32(minSeq)
|
|
||||||
m[groupID] = x
|
|
||||||
}
|
|
||||||
resp.GroupMaxAndMinSeq = m
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *sdkws.PullMessageBySeqListReq) (*sdkws.PullMessageBySeqListResp, error) {
|
|
||||||
log.NewInfo(in.OperationID, "rpc PullMessageBySeqList is arriving", in.String())
|
|
||||||
resp := new(sdkws.PullMessageBySeqListResp)
|
|
||||||
m := make(map[string]*sdkws.MsgDataList)
|
|
||||||
redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(in.UserID, in.SeqList, in.OperationID)
|
|
||||||
if err != nil {
|
|
||||||
if err != go_redis.Nil {
|
|
||||||
prome.PromeAdd(prome.MsgPullFromRedisFailedCounter, len(failedSeqList))
|
|
||||||
log.Error(in.OperationID, "get message from redis exception", err.Error(), failedSeqList)
|
|
||||||
} else {
|
|
||||||
log.Debug(in.OperationID, "get message from redis is nil", failedSeqList)
|
|
||||||
}
|
|
||||||
msgList, err1 := commonDB.DB.GetMsgBySeqs(in.UserID, failedSeqList, in.OperationID)
|
|
||||||
if err1 != nil {
|
|
||||||
prome.PromeAdd(prome.MsgPullFromMongoFailedCounter, len(failedSeqList))
|
|
||||||
log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err1.Error())
|
|
||||||
resp.ErrCode = 201
|
|
||||||
resp.ErrMsg = err1.Error()
|
|
||||||
return resp, nil
|
|
||||||
} else {
|
|
||||||
prome.PromeAdd(prome.MsgPullFromMongoSuccessCounter, len(msgList))
|
|
||||||
redisMsgList = append(redisMsgList, msgList...)
|
|
||||||
resp.List = redisMsgList
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
prome.PromeAdd(prome.MsgPullFromRedisSuccessCounter, len(redisMsgList))
|
|
||||||
resp.List = redisMsgList
|
|
||||||
}
|
|
||||||
|
|
||||||
for k, v := range in.GroupSeqList {
|
|
||||||
x := new(sdkws.MsgDataList)
|
|
||||||
redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(k, v.SeqList, in.OperationID)
|
|
||||||
if err != nil {
|
|
||||||
if err != go_redis.Nil {
|
|
||||||
prome.PromeAdd(prome.MsgPullFromRedisFailedCounter, len(failedSeqList))
|
|
||||||
log.Error(in.OperationID, "get message from redis exception", err.Error(), failedSeqList)
|
|
||||||
} else {
|
|
||||||
log.Debug(in.OperationID, "get message from redis is nil", failedSeqList)
|
|
||||||
}
|
|
||||||
msgList, err1 := commonDB.DB.GetSuperGroupMsgBySeqs(k, failedSeqList, in.OperationID)
|
|
||||||
if err1 != nil {
|
|
||||||
prome.PromeAdd(prome.MsgPullFromMongoFailedCounter, len(failedSeqList))
|
|
||||||
log.Error(in.OperationID, "PullMessageBySeqList data error", in.String(), err1.Error())
|
|
||||||
resp.ErrCode = 201
|
|
||||||
resp.ErrMsg = err1.Error()
|
|
||||||
return resp, nil
|
|
||||||
} else {
|
|
||||||
prome.PromeAdd(prome.MsgPullFromMongoSuccessCounter, len(msgList))
|
|
||||||
redisMsgList = append(redisMsgList, msgList...)
|
|
||||||
x.MsgDataList = redisMsgList
|
|
||||||
m[k] = x
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
prome.PromeAdd(prome.MsgPullFromRedisSuccessCounter, len(redisMsgList))
|
|
||||||
x.MsgDataList = redisMsgList
|
|
||||||
m[k] = x
|
|
||||||
}
|
|
||||||
}
|
|
||||||
resp.GroupMsgDataList = m
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
type MsgFormats []*sdkws.MsgData
|
|
||||||
|
|
||||||
// Implement the sort.Interface interface to get the number of elements method
|
|
||||||
func (s MsgFormats) Len() int {
|
|
||||||
return len(s)
|
|
||||||
}
|
|
||||||
|
|
||||||
//Implement the sort.Interface interface comparison element method
|
|
||||||
func (s MsgFormats) Less(i, j int) bool {
|
|
||||||
return s[i].SendTime < s[j].SendTime
|
|
||||||
}
|
|
||||||
|
|
||||||
//Implement the sort.Interface interface exchange element method
|
|
||||||
func (s MsgFormats) Swap(i, j int) {
|
|
||||||
s[i], s[j] = s[j], s[i]
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
package msg
|
|
||||||
|
|
||||||
import (
|
|
||||||
commonDB "Open_IM/pkg/common/db"
|
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
prome "Open_IM/pkg/common/prometheus"
|
|
||||||
"Open_IM/pkg/proto/msg"
|
|
||||||
"Open_IM/pkg/utils"
|
|
||||||
"context"
|
|
||||||
go_redis "github.com/go-redis/redis/v8"
|
|
||||||
)
|
|
||||||
|
|
||||||
func (rpc *rpcChat) GetSuperGroupMsg(context context.Context, req *msg.GetSuperGroupMsgReq) (*msg.GetSuperGroupMsgResp, error) {
|
|
||||||
log.Debug(req.OperationID, utils.GetSelfFuncName(), req.String())
|
|
||||||
resp := new(msg.GetSuperGroupMsgResp)
|
|
||||||
redisMsgList, failedSeqList, err := commonDB.DB.GetMessageListBySeq(req.GroupID, []uint32{req.Seq}, req.OperationID)
|
|
||||||
if err != nil {
|
|
||||||
if err != go_redis.Nil {
|
|
||||||
prome.PromeAdd(prome.MsgPullFromRedisFailedCounter, len(failedSeqList))
|
|
||||||
log.Error(req.OperationID, "get message from redis exception", err.Error(), failedSeqList)
|
|
||||||
} else {
|
|
||||||
log.Debug(req.OperationID, "get message from redis is nil", failedSeqList)
|
|
||||||
}
|
|
||||||
msgList, err1 := commonDB.DB.GetSuperGroupMsgBySeqs(req.GroupID, failedSeqList, req.OperationID)
|
|
||||||
if err1 != nil {
|
|
||||||
prome.PromeAdd(prome.MsgPullFromMongoFailedCounter, len(failedSeqList))
|
|
||||||
log.Error(req.OperationID, "GetSuperGroupMsg data error", req.String(), err.Error())
|
|
||||||
resp.ErrCode = 201
|
|
||||||
resp.ErrMsg = err.Error()
|
|
||||||
return resp, nil
|
|
||||||
} else {
|
|
||||||
prome.PromeAdd(prome.MsgPullFromMongoSuccessCounter, len(msgList))
|
|
||||||
redisMsgList = append(redisMsgList, msgList...)
|
|
||||||
for _, m := range msgList {
|
|
||||||
resp.MsgData = m
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
prome.PromeAdd(prome.MsgPullFromRedisSuccessCounter, len(redisMsgList))
|
|
||||||
for _, m := range redisMsgList {
|
|
||||||
resp.MsgData = m
|
|
||||||
}
|
|
||||||
}
|
|
||||||
log.Debug(req.OperationID, utils.GetSelfFuncName(), resp.String())
|
|
||||||
return resp, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rpc *rpcChat) GetWriteDiffMsg(context context.Context, req *msg.GetWriteDiffMsgReq) (*msg.GetWriteDiffMsgResp, error) {
|
|
||||||
panic("implement me")
|
|
||||||
}
|
|
@ -1,159 +0,0 @@
|
|||||||
package msg
|
|
||||||
|
|
||||||
import (
|
|
||||||
"Open_IM/pkg/common/config"
|
|
||||||
"Open_IM/pkg/common/constant"
|
|
||||||
"Open_IM/pkg/common/db"
|
|
||||||
"Open_IM/pkg/common/kafka"
|
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
prome "Open_IM/pkg/common/prometheus"
|
|
||||||
"Open_IM/pkg/proto/msg"
|
|
||||||
"Open_IM/pkg/utils"
|
|
||||||
"github.com/OpenIMSDK/getcdv3"
|
|
||||||
"net"
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/golang/protobuf/proto"
|
|
||||||
|
|
||||||
grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
|
|
||||||
|
|
||||||
"google.golang.org/grpc"
|
|
||||||
)
|
|
||||||
|
|
||||||
type MessageWriter interface {
|
|
||||||
SendMessage(m proto.Message, key string, operationID string) (int32, int64, error)
|
|
||||||
}
|
|
||||||
type rpcChat struct {
|
|
||||||
rpcPort int
|
|
||||||
rpcRegisterName string
|
|
||||||
etcdSchema string
|
|
||||||
etcdAddr []string
|
|
||||||
messageWriter MessageWriter
|
|
||||||
//offlineProducer *kafka.Producer
|
|
||||||
delMsgCh chan deleteMsg
|
|
||||||
dMessageLocker MessageLocker
|
|
||||||
}
|
|
||||||
|
|
||||||
type deleteMsg struct {
|
|
||||||
UserID string
|
|
||||||
OpUserID string
|
|
||||||
SeqList []uint32
|
|
||||||
OperationID string
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewRpcChatServer(port int) *rpcChat {
|
|
||||||
log.NewPrivateLog(constant.LogFileName)
|
|
||||||
rc := rpcChat{
|
|
||||||
rpcPort: port,
|
|
||||||
rpcRegisterName: config.Config.RpcRegisterName.OpenImMsgName,
|
|
||||||
etcdSchema: config.Config.Etcd.EtcdSchema,
|
|
||||||
etcdAddr: config.Config.Etcd.EtcdAddr,
|
|
||||||
dMessageLocker: NewLockerMessage(),
|
|
||||||
}
|
|
||||||
rc.messageWriter = kafka.NewKafkaProducer(config.Config.Kafka.Ws2mschat.Addr, config.Config.Kafka.Ws2mschat.Topic)
|
|
||||||
//rc.offlineProducer = kafka.NewKafkaProducer(config.Config.Kafka.Ws2mschatOffline.Addr, config.Config.Kafka.Ws2mschatOffline.Topic)
|
|
||||||
rc.delMsgCh = make(chan deleteMsg, 1000)
|
|
||||||
return &rc
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rpc *rpcChat) initPrometheus() {
|
|
||||||
//sendMsgSuccessCounter = promauto.NewCounter(prometheus.CounterOpts{
|
|
||||||
// Name: "send_msg_success",
|
|
||||||
// Help: "The number of send msg success",
|
|
||||||
//})
|
|
||||||
//sendMsgFailedCounter = promauto.NewCounter(prometheus.CounterOpts{
|
|
||||||
// Name: "send_msg_failed",
|
|
||||||
// Help: "The number of send msg failed",
|
|
||||||
//})
|
|
||||||
prome.NewMsgPullFromRedisSuccessCounter()
|
|
||||||
prome.NewMsgPullFromRedisFailedCounter()
|
|
||||||
prome.NewMsgPullFromMongoSuccessCounter()
|
|
||||||
prome.NewMsgPullFromMongoFailedCounter()
|
|
||||||
|
|
||||||
prome.NewSingleChatMsgRecvSuccessCounter()
|
|
||||||
prome.NewGroupChatMsgRecvSuccessCounter()
|
|
||||||
prome.NewWorkSuperGroupChatMsgRecvSuccessCounter()
|
|
||||||
|
|
||||||
prome.NewSingleChatMsgProcessSuccessCounter()
|
|
||||||
prome.NewSingleChatMsgProcessFailedCounter()
|
|
||||||
prome.NewGroupChatMsgProcessSuccessCounter()
|
|
||||||
prome.NewGroupChatMsgProcessFailedCounter()
|
|
||||||
prome.NewWorkSuperGroupChatMsgProcessSuccessCounter()
|
|
||||||
prome.NewWorkSuperGroupChatMsgProcessFailedCounter()
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rpc *rpcChat) Run() {
|
|
||||||
log.Info("", "rpcChat init...")
|
|
||||||
listenIP := ""
|
|
||||||
if config.Config.ListenIP == "" {
|
|
||||||
listenIP = "0.0.0.0"
|
|
||||||
} else {
|
|
||||||
listenIP = config.Config.ListenIP
|
|
||||||
}
|
|
||||||
address := listenIP + ":" + strconv.Itoa(rpc.rpcPort)
|
|
||||||
listener, err := net.Listen("tcp", address)
|
|
||||||
if err != nil {
|
|
||||||
panic("listening err:" + err.Error() + rpc.rpcRegisterName)
|
|
||||||
}
|
|
||||||
log.Info("", "listen network success, address ", address)
|
|
||||||
recvSize := 1024 * 1024 * 30
|
|
||||||
sendSize := 1024 * 1024 * 30
|
|
||||||
var grpcOpts = []grpc.ServerOption{
|
|
||||||
grpc.MaxRecvMsgSize(recvSize),
|
|
||||||
grpc.MaxSendMsgSize(sendSize),
|
|
||||||
}
|
|
||||||
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()
|
|
||||||
|
|
||||||
rpcRegisterIP := config.Config.RpcRegisterIP
|
|
||||||
msg.RegisterMsgServer(srv, rpc)
|
|
||||||
if config.Config.RpcRegisterIP == "" {
|
|
||||||
rpcRegisterIP, err = utils.GetLocalIP()
|
|
||||||
if err != nil {
|
|
||||||
log.Error("", "GetLocalIP failed ", err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
err = getcdv3.RegisterEtcd(rpc.etcdSchema, strings.Join(rpc.etcdAddr, ","), rpcRegisterIP, rpc.rpcPort, rpc.rpcRegisterName, 10, "")
|
|
||||||
if err != nil {
|
|
||||||
log.Error("", "register rpcChat to etcd failed ", err.Error())
|
|
||||||
panic(utils.Wrap(err, "register chat module rpc to etcd err"))
|
|
||||||
}
|
|
||||||
go rpc.runCh()
|
|
||||||
rpc.initPrometheus()
|
|
||||||
err = srv.Serve(listener)
|
|
||||||
if err != nil {
|
|
||||||
log.Error("", "rpc rpcChat failed ", err.Error())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
log.Info("", "rpc rpcChat init success")
|
|
||||||
}
|
|
||||||
|
|
||||||
func (rpc *rpcChat) runCh() {
|
|
||||||
log.NewInfo("", "start del msg chan ")
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case msg := <-rpc.delMsgCh:
|
|
||||||
log.NewInfo(msg.OperationID, utils.GetSelfFuncName(), "delmsgch recv new: ", msg)
|
|
||||||
db.DB.DelMsgFromCache(msg.UserID, msg.SeqList, msg.OperationID)
|
|
||||||
unexistSeqList, err := db.DB.DelMsgBySeqs(msg.UserID, msg.SeqList, msg.OperationID)
|
|
||||||
if err != nil {
|
|
||||||
log.NewError(msg.OperationID, utils.GetSelfFuncName(), "DelMsgBySeqs args: ", msg.UserID, msg.SeqList, msg.OperationID, err.Error())
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if len(unexistSeqList) > 0 {
|
|
||||||
DeleteMessageNotification(msg.OpUserID, msg.UserID, unexistSeqList, msg.OperationID)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
File diff suppressed because it is too large
Load Diff
304
internal/rpc/msg/send_pull.go
Normal file
304
internal/rpc/msg/send_pull.go
Normal file
@ -0,0 +1,304 @@
|
|||||||
|
package msg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
promePkg "Open_IM/pkg/common/prometheus"
|
||||||
|
pbConversation "Open_IM/pkg/proto/conversation"
|
||||||
|
"Open_IM/pkg/proto/msg"
|
||||||
|
"Open_IM/pkg/proto/sdkws"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"context"
|
||||||
|
"github.com/golang/protobuf/proto"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (m *msgServer) sendMsgSuperGroupChat(ctx context.Context, req *msg.SendMsgReq) (resp *msg.SendMsgResp, err error) {
|
||||||
|
promePkg.PromeInc(promePkg.WorkSuperGroupChatMsgRecvSuccessCounter)
|
||||||
|
// callback
|
||||||
|
if err = CallbackBeforeSendGroupMsg(ctx, req); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err = m.messageVerification(ctx, req); err != nil {
|
||||||
|
promePkg.PromeInc(promePkg.WorkSuperGroupChatMsgProcessFailedCounter)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
msgToMQSingle := msg.MsgDataToMQ{MsgData: req.MsgData}
|
||||||
|
err = m.MsgInterface.MsgToMQ(ctx, msgToMQSingle.MsgData.GroupID, &msgToMQSingle)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
// callback
|
||||||
|
if err = CallbackAfterSendGroupMsg(ctx, req); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
promePkg.PromeInc(promePkg.WorkSuperGroupChatMsgProcessSuccessCounter)
|
||||||
|
resp.SendTime = msgToMQSingle.MsgData.SendTime
|
||||||
|
resp.ServerMsgID = msgToMQSingle.MsgData.ServerMsgID
|
||||||
|
resp.ClientMsgID = msgToMQSingle.MsgData.ClientMsgID
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
func (m *msgServer) sendMsgNotification(ctx context.Context, req *msg.SendMsgReq) (resp *msg.SendMsgResp, err error) {
|
||||||
|
msgToMQSingle := msg.MsgDataToMQ{MsgData: req.MsgData}
|
||||||
|
err = m.MsgInterface.MsgToMQ(ctx, msgToMQSingle.MsgData.RecvID, &msgToMQSingle)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if msgToMQSingle.MsgData.SendID != msgToMQSingle.MsgData.RecvID { //Filter messages sent to yourself
|
||||||
|
err = m.MsgInterface.MsgToMQ(ctx, msgToMQSingle.MsgData.SendID, &msgToMQSingle)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.SendTime = msgToMQSingle.MsgData.SendTime
|
||||||
|
resp.ServerMsgID = msgToMQSingle.MsgData.ServerMsgID
|
||||||
|
resp.ClientMsgID = msgToMQSingle.MsgData.ClientMsgID
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *msgServer) sendMsgSingleChat(ctx context.Context, req *msg.SendMsgReq) (resp *msg.SendMsgResp, err error) {
|
||||||
|
promePkg.PromeInc(promePkg.SingleChatMsgRecvSuccessCounter)
|
||||||
|
if err = CallbackBeforeSendSingleMsg(ctx, req); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
_, err = m.messageVerification(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
isSend, err := modifyMessageByUserMessageReceiveOpt(req.MsgData.RecvID, req.MsgData.SendID, constant.SingleChatType, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
msgToMQSingle := msg.MsgDataToMQ{MsgData: req.MsgData}
|
||||||
|
if isSend {
|
||||||
|
err = m.MsgInterface.MsgToMQ(ctx, req.MsgData.RecvID, &msgToMQSingle)
|
||||||
|
if err != nil {
|
||||||
|
return nil, constant.ErrInternalServer.Wrap("insert to mq")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if msgToMQSingle.MsgData.SendID != msgToMQSingle.MsgData.RecvID { //Filter messages sent to yourself
|
||||||
|
err = m.MsgInterface.MsgToMQ(ctx, req.MsgData.SendID, &msgToMQSingle)
|
||||||
|
if err != nil {
|
||||||
|
return nil, constant.ErrInternalServer.Wrap("insert to mq")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = CallbackAfterSendSingleMsg(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
promePkg.PromeInc(promePkg.SingleChatMsgProcessSuccessCounter)
|
||||||
|
resp.SendTime = msgToMQSingle.MsgData.SendTime
|
||||||
|
resp.ServerMsgID = msgToMQSingle.MsgData.ServerMsgID
|
||||||
|
resp.ClientMsgID = msgToMQSingle.MsgData.ClientMsgID
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *msgServer) sendMsgGroupChat(ctx context.Context, req *msg.SendMsgReq) (resp *msg.SendMsgResp, err error) {
|
||||||
|
// callback
|
||||||
|
promePkg.PromeInc(promePkg.GroupChatMsgRecvSuccessCounter)
|
||||||
|
err = CallbackBeforeSendGroupMsg(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var memberUserIDList []string
|
||||||
|
if memberUserIDList, err = m.messageVerification(ctx, req); err != nil {
|
||||||
|
promePkg.PromeInc(promePkg.GroupChatMsgProcessFailedCounter)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var addUidList []string
|
||||||
|
switch req.MsgData.ContentType {
|
||||||
|
case constant.MemberKickedNotification:
|
||||||
|
var tips sdkws.TipsComm
|
||||||
|
var memberKickedTips sdkws.MemberKickedTips
|
||||||
|
err := proto.Unmarshal(req.MsgData.Content, &tips)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
err = proto.Unmarshal(tips.Detail, &memberKickedTips)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
for _, v := range memberKickedTips.KickedUserList {
|
||||||
|
addUidList = append(addUidList, v.UserID)
|
||||||
|
}
|
||||||
|
case constant.MemberQuitNotification:
|
||||||
|
addUidList = append(addUidList, req.MsgData.SendID)
|
||||||
|
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
if len(addUidList) > 0 {
|
||||||
|
memberUserIDList = append(memberUserIDList, addUidList...)
|
||||||
|
}
|
||||||
|
|
||||||
|
//split parallel send
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
var split = 20
|
||||||
|
msgToMQSingle := msg.MsgDataToMQ{MsgData: req.MsgData}
|
||||||
|
mErr := make([]error, 0)
|
||||||
|
var mutex sync.RWMutex
|
||||||
|
remain := len(memberUserIDList) % split
|
||||||
|
for i := 0; i < len(memberUserIDList)/split; i++ {
|
||||||
|
wg.Add(1)
|
||||||
|
tmp := valueCopy(req)
|
||||||
|
go func() {
|
||||||
|
err := m.sendMsgToGroupOptimization(ctx, memberUserIDList[i*split:(i+1)*split], tmp, &wg)
|
||||||
|
if err != nil {
|
||||||
|
mutex.Lock()
|
||||||
|
mErr = append(mErr, err)
|
||||||
|
mutex.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
if remain > 0 {
|
||||||
|
wg.Add(1)
|
||||||
|
tmp := valueCopy(req)
|
||||||
|
go m.sendMsgToGroupOptimization(ctx, memberUserIDList[split*(len(memberUserIDList)/split):], tmp, &wg)
|
||||||
|
}
|
||||||
|
|
||||||
|
wg.Wait()
|
||||||
|
|
||||||
|
// callback
|
||||||
|
err = CallbackAfterSendGroupMsg(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range mErr {
|
||||||
|
if v != nil {
|
||||||
|
return nil, v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if req.MsgData.ContentType == constant.AtText {
|
||||||
|
go func() {
|
||||||
|
var conversationReq pbConversation.ModifyConversationFieldReq
|
||||||
|
var tag bool
|
||||||
|
var atUserID []string
|
||||||
|
conversation := pbConversation.Conversation{
|
||||||
|
OwnerUserID: req.MsgData.SendID,
|
||||||
|
ConversationID: utils.GetConversationIDBySessionType(req.MsgData.GroupID, constant.GroupChatType),
|
||||||
|
ConversationType: constant.GroupChatType,
|
||||||
|
GroupID: req.MsgData.GroupID,
|
||||||
|
}
|
||||||
|
conversationReq.Conversation = &conversation
|
||||||
|
conversationReq.FieldType = constant.FieldGroupAtType
|
||||||
|
tagAll := utils.IsContain(constant.AtAllString, req.MsgData.AtUserIDList)
|
||||||
|
if tagAll {
|
||||||
|
atUserID = utils.DifferenceString([]string{constant.AtAllString}, req.MsgData.AtUserIDList)
|
||||||
|
if len(atUserID) == 0 { //just @everyone
|
||||||
|
conversationReq.UserIDList = memberUserIDList
|
||||||
|
conversation.GroupAtType = constant.AtAll
|
||||||
|
} else { //@Everyone and @other people
|
||||||
|
conversationReq.UserIDList = atUserID
|
||||||
|
conversation.GroupAtType = constant.AtAllAtMe
|
||||||
|
tag = true
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
conversationReq.UserIDList = req.MsgData.AtUserIDList
|
||||||
|
conversation.GroupAtType = constant.AtMe
|
||||||
|
}
|
||||||
|
|
||||||
|
err := m.Conversation.ModifyConversationField(ctx, &conversationReq)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if tag {
|
||||||
|
conversationReq.UserIDList = utils.DifferenceString(atUserID, memberUserIDList)
|
||||||
|
conversation.GroupAtType = constant.AtAll
|
||||||
|
err := m.Conversation.ModifyConversationField(ctx, &conversationReq)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
//
|
||||||
|
|
||||||
|
promePkg.PromeInc(promePkg.GroupChatMsgProcessSuccessCounter)
|
||||||
|
resp.SendTime = msgToMQSingle.MsgData.SendTime
|
||||||
|
resp.ServerMsgID = msgToMQSingle.MsgData.ServerMsgID
|
||||||
|
resp.ClientMsgID = msgToMQSingle.MsgData.ClientMsgID
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *msgServer) SendMsg(ctx context.Context, req *msg.SendMsgReq) (resp *msg.SendMsgResp, error error) {
|
||||||
|
resp = &msg.SendMsgResp{}
|
||||||
|
flag := isMessageHasReadEnabled(req.MsgData)
|
||||||
|
if !flag {
|
||||||
|
return nil, constant.ErrMessageHasReadDisable.Wrap()
|
||||||
|
}
|
||||||
|
m.encapsulateMsgData(req.MsgData)
|
||||||
|
if err := CallbackMsgModify(ctx, req); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
switch req.MsgData.SessionType {
|
||||||
|
case constant.SingleChatType:
|
||||||
|
return m.sendMsgSingleChat(ctx, req)
|
||||||
|
case constant.GroupChatType:
|
||||||
|
return m.sendMsgGroupChat(ctx, req)
|
||||||
|
case constant.NotificationChatType:
|
||||||
|
return m.sendMsgNotification(ctx, req)
|
||||||
|
case constant.SuperGroupChatType:
|
||||||
|
return m.sendMsgSuperGroupChat(ctx, req)
|
||||||
|
default:
|
||||||
|
return nil, constant.ErrArgs.Wrap("unknown sessionType")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *msgServer) GetMaxAndMinSeq(ctx context.Context, req *sdkws.GetMaxAndMinSeqReq) (*sdkws.GetMaxAndMinSeqResp, error) {
|
||||||
|
resp := new(sdkws.GetMaxAndMinSeqResp)
|
||||||
|
m2 := make(map[string]*sdkws.MaxAndMinSeq)
|
||||||
|
maxSeq, err := m.MsgInterface.GetUserMaxSeq(ctx, req.UserID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
minSeq, err := m.MsgInterface.GetUserMinSeq(ctx, req.UserID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
resp.MaxSeq = maxSeq
|
||||||
|
resp.MinSeq = minSeq
|
||||||
|
if len(req.GroupIDList) > 0 {
|
||||||
|
resp.GroupMaxAndMinSeq = make(map[string]*sdkws.MaxAndMinSeq)
|
||||||
|
for _, groupID := range req.GroupIDList {
|
||||||
|
maxSeq, err := m.MsgInterface.GetGroupMaxSeq(ctx, groupID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
minSeq, err := m.MsgInterface.GetGroupMinSeq(ctx, groupID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
m2[groupID] = &sdkws.MaxAndMinSeq{
|
||||||
|
MaxSeq: maxSeq,
|
||||||
|
MinSeq: minSeq,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *msgServer) PullMessageBySeqList(ctx context.Context, req *sdkws.PullMessageBySeqListReq) (*sdkws.PullMessageBySeqListResp, error) {
|
||||||
|
resp := &sdkws.PullMessageBySeqListResp{GroupMsgDataList: make(map[string]*sdkws.MsgDataList)}
|
||||||
|
msgs, err := m.MsgInterface.GetMessageListBySeq(ctx, req.UserID, req.SeqList)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
resp.List = msgs
|
||||||
|
for userID, list := range req.GroupSeqList {
|
||||||
|
msgs, err := m.MsgInterface.GetMessageListBySeq(ctx, userID, list.SeqList)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
resp.GroupMsgDataList[userID] = &sdkws.MsgDataList{
|
||||||
|
MsgDataList: msgs,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return resp, nil
|
||||||
|
}
|
72
internal/rpc/msg/server.go
Normal file
72
internal/rpc/msg/server.go
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
package msg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/internal/common/check"
|
||||||
|
"Open_IM/pkg/common/db/controller"
|
||||||
|
"Open_IM/pkg/common/db/localcache"
|
||||||
|
"Open_IM/pkg/common/db/relation"
|
||||||
|
tablerelation "Open_IM/pkg/common/db/table/relation"
|
||||||
|
discoveryRegistry "Open_IM/pkg/discoveryregistry"
|
||||||
|
"github.com/OpenIMSDK/openKeeper"
|
||||||
|
|
||||||
|
promePkg "Open_IM/pkg/common/prometheus"
|
||||||
|
"Open_IM/pkg/proto/msg"
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
)
|
||||||
|
|
||||||
|
type msgServer struct {
|
||||||
|
RegisterCenter discoveryRegistry.SvcDiscoveryRegistry
|
||||||
|
MsgInterface controller.MsgInterface
|
||||||
|
Group *check.GroupChecker
|
||||||
|
User *check.UserCheck
|
||||||
|
Conversation *check.ConversationChecker
|
||||||
|
friend *check.FriendChecker
|
||||||
|
*localcache.GroupLocalCache
|
||||||
|
black *check.BlackChecker
|
||||||
|
}
|
||||||
|
|
||||||
|
type deleteMsg struct {
|
||||||
|
UserID string
|
||||||
|
OpUserID string
|
||||||
|
SeqList []uint32
|
||||||
|
OperationID string
|
||||||
|
}
|
||||||
|
|
||||||
|
func Start(client *openKeeper.ZkClient, server *grpc.Server) error {
|
||||||
|
mysql, err := relation.NewGormDB()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := mysql.AutoMigrate(&tablerelation.UserModel{}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
s := &msgServer{
|
||||||
|
Conversation: check.NewConversationChecker(client),
|
||||||
|
User: check.NewUserCheck(client),
|
||||||
|
Group: check.NewGroupChecker(client),
|
||||||
|
//MsgInterface: controller.MsgInterface(),
|
||||||
|
RegisterCenter: client,
|
||||||
|
GroupLocalCache: localcache.NewGroupMemberIDsLocalCache(client),
|
||||||
|
black: check.NewBlackChecker(client),
|
||||||
|
friend: check.NewFriendChecker(client),
|
||||||
|
}
|
||||||
|
s.initPrometheus()
|
||||||
|
msg.RegisterMsgServer(server, s)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *msgServer) initPrometheus() {
|
||||||
|
promePkg.NewMsgPullFromRedisSuccessCounter()
|
||||||
|
promePkg.NewMsgPullFromRedisFailedCounter()
|
||||||
|
promePkg.NewMsgPullFromMongoSuccessCounter()
|
||||||
|
promePkg.NewMsgPullFromMongoFailedCounter()
|
||||||
|
promePkg.NewSingleChatMsgRecvSuccessCounter()
|
||||||
|
promePkg.NewGroupChatMsgRecvSuccessCounter()
|
||||||
|
promePkg.NewWorkSuperGroupChatMsgRecvSuccessCounter()
|
||||||
|
promePkg.NewSingleChatMsgProcessSuccessCounter()
|
||||||
|
promePkg.NewSingleChatMsgProcessFailedCounter()
|
||||||
|
promePkg.NewGroupChatMsgProcessSuccessCounter()
|
||||||
|
promePkg.NewGroupChatMsgProcessFailedCounter()
|
||||||
|
promePkg.NewWorkSuperGroupChatMsgProcessSuccessCounter()
|
||||||
|
promePkg.NewWorkSuperGroupChatMsgProcessFailedCounter()
|
||||||
|
}
|
37
internal/rpc/msg/utils.go
Normal file
37
internal/rpc/msg/utils.go
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
package msg
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/proto/sdkws"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
|
"github.com/go-redis/redis/v8"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
func isMessageHasReadEnabled(msgData *sdkws.MsgData) bool {
|
||||||
|
switch msgData.ContentType {
|
||||||
|
case constant.HasReadReceipt:
|
||||||
|
if config.Config.SingleMessageHasReadReceiptEnable {
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
case constant.GroupHasReadReceipt:
|
||||||
|
if config.Config.GroupMessageHasReadReceiptEnable {
|
||||||
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsNotFound(err error) bool {
|
||||||
|
switch utils.Unwrap(err) {
|
||||||
|
case redis.Nil, gorm.ErrRecordNotFound:
|
||||||
|
return true
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
@ -1,187 +1,49 @@
|
|||||||
package user
|
package user
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"Open_IM/internal/common/check"
|
||||||
"Open_IM/internal/common/convert"
|
"Open_IM/internal/common/convert"
|
||||||
"Open_IM/internal/common/rpc_server"
|
"Open_IM/internal/common/notification"
|
||||||
"Open_IM/internal/common/rpcserver"
|
|
||||||
chat "Open_IM/internal/rpc/msg"
|
|
||||||
"Open_IM/pkg/common/config"
|
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/db/controller"
|
"Open_IM/pkg/common/db/controller"
|
||||||
"Open_IM/pkg/common/db/relation"
|
"Open_IM/pkg/common/db/relation"
|
||||||
tablerelation "Open_IM/pkg/common/db/table/relation"
|
tablerelation "Open_IM/pkg/common/db/table/relation"
|
||||||
"Open_IM/pkg/common/log"
|
|
||||||
prome "Open_IM/pkg/common/prometheus"
|
|
||||||
"Open_IM/pkg/common/tokenverify"
|
"Open_IM/pkg/common/tokenverify"
|
||||||
"Open_IM/pkg/common/tracelog"
|
"Open_IM/pkg/common/tracelog"
|
||||||
|
discoveryRegistry "Open_IM/pkg/discoveryregistry"
|
||||||
"Open_IM/pkg/proto/sdkws"
|
"Open_IM/pkg/proto/sdkws"
|
||||||
pbuser "Open_IM/pkg/proto/user"
|
pbuser "Open_IM/pkg/proto/user"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
"context"
|
"context"
|
||||||
grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
|
"github.com/OpenIMSDK/openKeeper"
|
||||||
|
|
||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
type userServer struct {
|
type userServer struct {
|
||||||
rpcPort int
|
|
||||||
rpcRegisterName string
|
|
||||||
*rpcserver.RpcServer
|
|
||||||
controller.UserInterface
|
controller.UserInterface
|
||||||
|
notification *notification.Check
|
||||||
|
userCheck *check.UserCheck
|
||||||
|
ConversationChecker *check.ConversationChecker
|
||||||
|
RegisterCenter discoveryRegistry.SvcDiscoveryRegistry
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewUserServer(port int) *userServer {
|
func Start(client *openKeeper.ZkClient, server *grpc.Server) error {
|
||||||
r, err := rpcserver.NewRpcServer(config.Config.RpcRegisterIP, port, config.Config.RpcRegisterName.OpenImUserName, config.Config.Zookeeper.ZkAddr, config.Config.Zookeeper.Schema)
|
mysql, err := relation.NewGormDB()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
return err
|
||||||
}
|
}
|
||||||
//mysql init
|
if err := mysql.AutoMigrate(&tablerelation.UserModel{}); err != nil {
|
||||||
var mysql relation.Mysql
|
return err
|
||||||
var model relation.UserGorm
|
|
||||||
err = mysql.InitConn().AutoMigrateModel(&model)
|
|
||||||
if err != nil {
|
|
||||||
panic("db init err:" + err.Error())
|
|
||||||
}
|
}
|
||||||
if mysql.GormConn() != nil {
|
pbuser.RegisterUserServer(server, &userServer{
|
||||||
model.DB = mysql.GormConn()
|
UserInterface: controller.NewUserController(mysql),
|
||||||
} else {
|
notification: notification.NewCheck(client),
|
||||||
panic("db init err:" + "conn is nil")
|
userCheck: check.NewUserCheck(client),
|
||||||
}
|
RegisterCenter: client,
|
||||||
return &userServer{RpcServer: r, UserInterface: controller.NewUserController(model.DB)}
|
})
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *userServer) Run() {
|
|
||||||
operationID := utils.OperationIDGenerator()
|
|
||||||
log.NewInfo(operationID, "rpc user start...")
|
|
||||||
listener, address, err := rpcserver.GetTcpListen(config.Config.ListenIP, s.Port)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
log.NewInfo(operationID, "listen ok ", address)
|
|
||||||
defer listener.Close()
|
|
||||||
//grpc server
|
|
||||||
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()
|
|
||||||
//Service registers with etcd
|
|
||||||
pbuser.RegisterUserServer(srv, s)
|
|
||||||
|
|
||||||
err = srv.Serve(listener)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
log.NewInfo(operationID, "rpc user success")
|
|
||||||
}
|
|
||||||
|
|
||||||
// ok
|
|
||||||
//func (s *userServer) SyncJoinedGroupMemberFaceURL(ctx context.Context, userID string, faceURL string, operationID string, opUserID string) {
|
|
||||||
// members, err := s.GetJoinedGroupMembers(ctx, userID)
|
|
||||||
// if err != nil {
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// groupIDs := make([]string, 0)
|
|
||||||
// for _, v := range members {
|
|
||||||
// groupIDs = append(groupIDs, v.GroupID)
|
|
||||||
// }
|
|
||||||
// if s.SetGroupMemberInfo(ctx, "", faceURL, "", 0, groupIDs, userID) != nil {
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// for _, v := range groupIDs {
|
|
||||||
// chat.GroupMemberInfoSetNotification(operationID, opUserID, v, userID)
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
// ok
|
|
||||||
//func (s *userServer) SyncJoinedGroupMemberNickname(ctx context.Context, userID string, newNickname, oldNickname string, operationID string, opUserID string) {
|
|
||||||
// members, err := s.GetJoinedGroupMembers(ctx, userID)
|
|
||||||
// if err != nil {
|
|
||||||
// return
|
|
||||||
// }
|
|
||||||
// groupIDs := make([]string, 0)
|
|
||||||
// for _, v := range members {
|
|
||||||
// if v.Nickname == oldNickname {
|
|
||||||
// groupIDs = append(groupIDs, v.GroupID)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// s.SetGroupMemberInfo(ctx, newNickname, "", "", 0, groupIDs, userID)
|
|
||||||
// for _, v := range groupIDs {
|
|
||||||
// chat.GroupMemberInfoSetNotification(operationID, opUserID, v, userID)
|
|
||||||
// }
|
|
||||||
//}
|
|
||||||
|
|
||||||
// 设置群头像
|
|
||||||
//func (s *userServer) SetGroupMemberInfo(ctx context.Context, nickname, faceURL, ex string, roleLevel int32, groupIDs []string, userID string) (err error) {
|
|
||||||
//
|
|
||||||
// req := pbgroup.SetGroupMemberInfo{UserID: userID}
|
|
||||||
// if nickname != "" {
|
|
||||||
// req.Nickname = &wrappers.StringValue{Value: nickname}
|
|
||||||
// }
|
|
||||||
// if faceURL != "" {
|
|
||||||
// req.FaceURL = &wrappers.StringValue{Value: faceURL}
|
|
||||||
// }
|
|
||||||
// if ex != "" {
|
|
||||||
// req.Ex = &wrappers.StringValue{Value: ex}
|
|
||||||
// }
|
|
||||||
// if roleLevel != 0 {
|
|
||||||
// req.RoleLevel = &wrappers.Int32Value{Value: roleLevel}
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// setGroupMemberInfoReq := &pbgroup.SetGroupMemberInfoReq{}
|
|
||||||
// for _, v := range groupIDs {
|
|
||||||
// req.GroupID = v
|
|
||||||
// setGroupMemberInfoReq.Members = append(setGroupMemberInfoReq.Members, &req)
|
|
||||||
// }
|
|
||||||
// conn, err := s.RegisterCenter.GetConn(config.Config.RpcRegisterName.OpenImGroupName)
|
|
||||||
// if err != nil {
|
|
||||||
// return err
|
|
||||||
// }
|
|
||||||
// client := group.NewGroupClient(conn)
|
|
||||||
// _, err = client.SetGroupMemberInfo(ctx, setGroupMemberInfoReq)
|
|
||||||
// return
|
|
||||||
//}
|
|
||||||
|
|
||||||
// 获取加入的群成员信息
|
|
||||||
//func (s *userServer) GetJoinedGroupMembers(ctx context.Context, userID string) (members []*sdkws.GroupMemberFullInfo, err error) {
|
|
||||||
// conn, err := s.RegisterCenter.GetConn(config.Config.RpcRegisterName.OpenImGroupName)
|
|
||||||
// if err != nil {
|
|
||||||
// return nil, err
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// client := group.NewGroupClient(conn)
|
|
||||||
// for {
|
|
||||||
// idx := int32(0)
|
|
||||||
// req := pbgroup.GetJoinedGroupListReq{FromUserID: userID, Pagination: &sdkws.RequestPagination{PageNumber: idx, ShowNumber: constant.ShowNumber}}
|
|
||||||
// resp, err := client.GetJoinedGroupList(ctx, &req)
|
|
||||||
// if err != nil {
|
|
||||||
// return nil, err
|
|
||||||
// }
|
|
||||||
// groupIDs := make([]string, 0)
|
|
||||||
//
|
|
||||||
// for _, v := range resp.Groups {
|
|
||||||
// groupIDs = append(groupIDs, v.GroupID)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// client.GetGroupMembersInfo()
|
|
||||||
//
|
|
||||||
// if len(resp.Groups) < constant.ShowNumber {
|
|
||||||
// break
|
|
||||||
// }
|
|
||||||
// idx++
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// return
|
|
||||||
//}
|
|
||||||
|
|
||||||
// ok
|
// ok
|
||||||
func (s *userServer) GetDesignateUsers(ctx context.Context, req *pbuser.GetDesignateUsersReq) (resp *pbuser.GetDesignateUsersResp, err error) {
|
func (s *userServer) GetDesignateUsers(ctx context.Context, req *pbuser.GetDesignateUsersReq) (resp *pbuser.GetDesignateUsersResp, err error) {
|
||||||
resp = &pbuser.GetDesignateUsersResp{}
|
resp = &pbuser.GetDesignateUsersResp{}
|
||||||
@ -229,11 +91,11 @@ func (s *userServer) UpdateUserInfo(ctx context.Context, req *pbuser.UpdateUserI
|
|||||||
}
|
}
|
||||||
go func() {
|
go func() {
|
||||||
for _, v := range friends {
|
for _, v := range friends {
|
||||||
chat.FriendInfoUpdatedNotification(ctx, req.UserInfo.UserID, v.FriendUser.UserID, tracelog.GetOpUserID(ctx))
|
s.notification.FriendInfoUpdatedNotification(ctx, req.UserInfo.UserID, v.FriendUser.UserID, tracelog.GetOpUserID(ctx))
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
chat.UserInfoUpdatedNotification(ctx, tracelog.GetOpUserID(ctx), req.UserInfo.UserID)
|
s.notification.UserInfoUpdatedNotification(ctx, tracelog.GetOpUserID(ctx), req.UserInfo.UserID)
|
||||||
|
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
@ -249,7 +111,7 @@ func (s *userServer) SetGlobalRecvMessageOpt(ctx context.Context, req *pbuser.Se
|
|||||||
if err := s.UpdateByMap(ctx, req.UserID, m); err != nil {
|
if err := s.UpdateByMap(ctx, req.UserID, m); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
chat.UserInfoUpdatedNotification(ctx, req.UserID, req.UserID)
|
s.notification.UserInfoUpdatedNotification(ctx, req.UserID, req.UserID)
|
||||||
return resp, nil
|
return resp, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
67
internal/startrpc/start.go
Normal file
67
internal/startrpc/start.go
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
package startrpc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/internal/common/network"
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
|
"Open_IM/pkg/common/log"
|
||||||
|
"Open_IM/pkg/common/middleware"
|
||||||
|
promePkg "Open_IM/pkg/common/prometheus"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"github.com/OpenIMSDK/openKeeper"
|
||||||
|
grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
|
||||||
|
"google.golang.org/grpc"
|
||||||
|
"net"
|
||||||
|
)
|
||||||
|
|
||||||
|
func start(rpcPorts []int, rpcRegisterName string, prometheusPorts []int, rpcFn func(client *openKeeper.ZkClient, server *grpc.Server) error, options []grpc.ServerOption) error {
|
||||||
|
flagRpcPort := flag.Int("port", rpcPorts[0], "get RpcGroupPort from cmd,default 16000 as port")
|
||||||
|
flagPrometheusPort := flag.Int("prometheus_port", prometheusPorts[0], "groupPrometheusPort default listen port")
|
||||||
|
flag.Parse()
|
||||||
|
fmt.Println("start group rpc server, port: ", *flagRpcPort, ", OpenIM version: ", constant.CurrentVersion)
|
||||||
|
log.NewPrivateLog(constant.LogFileName)
|
||||||
|
listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", config.Config.ListenIP, *flagRpcPort))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer listener.Close()
|
||||||
|
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
|
||||||
|
}
|
||||||
|
options = append(options, grpc.UnaryInterceptor(middleware.RpcServerInterceptor)) // ctx 中间件
|
||||||
|
if config.Config.Prometheus.Enable {
|
||||||
|
promePkg.NewGrpcRequestCounter()
|
||||||
|
promePkg.NewGrpcRequestFailedCounter()
|
||||||
|
promePkg.NewGrpcRequestSuccessCounter()
|
||||||
|
options = append(options, []grpc.ServerOption{
|
||||||
|
// grpc.UnaryInterceptor(promePkg.UnaryServerInterceptorProme),
|
||||||
|
grpc.StreamInterceptor(grpcPrometheus.StreamServerInterceptor),
|
||||||
|
grpc.UnaryInterceptor(grpcPrometheus.UnaryServerInterceptor),
|
||||||
|
}...)
|
||||||
|
}
|
||||||
|
srv := grpc.NewServer(options...)
|
||||||
|
defer srv.GracefulStop()
|
||||||
|
err = zkClient.Register(rpcRegisterName, registerIP, *flagRpcPort)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if config.Config.Prometheus.Enable {
|
||||||
|
err := promePkg.StartPromeSrv(*flagPrometheusPort)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return rpcFn(zkClient, srv)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Start(rpcPorts []int, rpcRegisterName string, prometheusPorts []int, rpcFn func(client *openKeeper.ZkClient, server *grpc.Server) error, options ...grpc.ServerOption) {
|
||||||
|
err := start(rpcPorts, rpcRegisterName, prometheusPorts, rpcFn, options)
|
||||||
|
fmt.Println("end", err)
|
||||||
|
}
|
@ -25,6 +25,14 @@ type CommonCallbackReq struct {
|
|||||||
Ex string `json:"ex"`
|
Ex string `json:"ex"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *CommonCallbackReq) GetCallbackCommand() string {
|
||||||
|
return c.CallbackCommand
|
||||||
|
}
|
||||||
|
|
||||||
|
type CallbackReq interface {
|
||||||
|
GetCallbackCommand() string
|
||||||
|
}
|
||||||
|
|
||||||
type CallbackResp interface {
|
type CallbackResp interface {
|
||||||
Parse() (err error)
|
Parse() (err error)
|
||||||
}
|
}
|
||||||
@ -33,27 +41,29 @@ type CommonCallbackResp struct {
|
|||||||
ActionCode int `json:"actionCode"`
|
ActionCode int `json:"actionCode"`
|
||||||
ErrCode int32 `json:"errCode"`
|
ErrCode int32 `json:"errCode"`
|
||||||
ErrMsg string `json:"errMsg"`
|
ErrMsg string `json:"errMsg"`
|
||||||
OperationID string `json:"operationID"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *CommonCallbackResp) Parse() (err error) {
|
func (c CommonCallbackResp) Parse() error {
|
||||||
if c.ActionCode != constant.NoError || c.ErrCode != constant.NoError {
|
if c.ActionCode != constant.NoError || c.ErrCode != constant.NoError {
|
||||||
newErr := constant.ErrCallback
|
newErr := constant.ErrCallback
|
||||||
newErr.ErrCode = c.ErrCode
|
newErr.ErrCode = c.ErrCode
|
||||||
newErr.DetailErrMsg = fmt.Sprintf("callback response error actionCode is %d, errCode is %d, errMsg is %s", c.ActionCode, c.ErrCode, c.ErrMsg)
|
newErr.DetailErrMsg = fmt.Sprintf("callback response error actionCode is %d, errCode is %d, errMsg is %s", c.ActionCode, c.ErrCode, c.ErrMsg)
|
||||||
err = newErr
|
return newErr.Wrap()
|
||||||
return
|
|
||||||
}
|
}
|
||||||
return
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserStatusBaseCallback struct {
|
type UserStatusBaseCallback struct {
|
||||||
CallbackCommand string `json:"callbackCommand"`
|
CallbackCommand string `json:"callbackCommand"`
|
||||||
OperationID string `json:"operationID"`
|
OperationID string `json:"operationID"`
|
||||||
PlatformID int32 `json:"platformID"`
|
PlatformID int `json:"platformID"`
|
||||||
Platform string `json:"platform"`
|
Platform string `json:"platform"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c UserStatusBaseCallback) GetCallbackCommand() string {
|
||||||
|
return c.CallbackCommand
|
||||||
|
}
|
||||||
|
|
||||||
type UserStatusCallbackReq struct {
|
type UserStatusCallbackReq struct {
|
||||||
UserStatusBaseCallback
|
UserStatusBaseCallback
|
||||||
UserID string `json:"userID"`
|
UserID string `json:"userID"`
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package callbackstruct
|
package callbackstruct
|
||||||
|
|
||||||
type CallbackBeforeAddFriendReq struct {
|
type CallbackBeforeAddFriendReq struct {
|
||||||
CallbackCommand string `json:"callbackCommand"`
|
CallbackCommand `json:"callbackCommand"`
|
||||||
FromUserID string `json:"fromUserID" `
|
FromUserID string `json:"fromUserID" `
|
||||||
ToUserID string `json:"toUserID"`
|
ToUserID string `json:"toUserID"`
|
||||||
ReqMsg string `json:"reqMsg"`
|
ReqMsg string `json:"reqMsg"`
|
||||||
@ -9,5 +9,5 @@ type CallbackBeforeAddFriendReq struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type CallbackBeforeAddFriendResp struct {
|
type CallbackBeforeAddFriendResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
}
|
}
|
||||||
|
@ -1,19 +1,25 @@
|
|||||||
package callbackstruct
|
package callbackstruct
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/pkg/proto/group"
|
"Open_IM/pkg/apistruct"
|
||||||
common "Open_IM/pkg/proto/sdkws"
|
common "Open_IM/pkg/proto/sdkws"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type CallbackCommand string
|
||||||
|
|
||||||
|
func (c CallbackCommand) GetCallbackCommand() string {
|
||||||
|
return string(c)
|
||||||
|
}
|
||||||
|
|
||||||
type CallbackBeforeCreateGroupReq struct {
|
type CallbackBeforeCreateGroupReq struct {
|
||||||
CallbackCommand string `json:"callbackCommand"`
|
|
||||||
OperationID string `json:"operationID"`
|
OperationID string `json:"operationID"`
|
||||||
|
CallbackCommand `json:"callbackCommand"`
|
||||||
common.GroupInfo
|
common.GroupInfo
|
||||||
InitMemberList []*group.GroupAddMemberInfo `json:"initMemberList"`
|
InitMemberList []*apistruct.GroupAddMemberInfo `json:"initMemberList"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type CallbackBeforeCreateGroupResp struct {
|
type CallbackBeforeCreateGroupResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
GroupID *string `json:"groupID"`
|
GroupID *string `json:"groupID"`
|
||||||
GroupName *string `json:"groupName"`
|
GroupName *string `json:"groupName"`
|
||||||
Notification *string `json:"notification"`
|
Notification *string `json:"notification"`
|
||||||
@ -30,7 +36,7 @@ type CallbackBeforeCreateGroupResp struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type CallbackBeforeMemberJoinGroupReq struct {
|
type CallbackBeforeMemberJoinGroupReq struct {
|
||||||
CallbackCommand string `json:"callbackCommand"`
|
CallbackCommand `json:"callbackCommand"`
|
||||||
OperationID string `json:"operationID"`
|
OperationID string `json:"operationID"`
|
||||||
GroupID string `json:"groupID"`
|
GroupID string `json:"groupID"`
|
||||||
UserID string `json:"userID"`
|
UserID string `json:"userID"`
|
||||||
@ -39,8 +45,8 @@ type CallbackBeforeMemberJoinGroupReq struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type CallbackBeforeMemberJoinGroupResp struct {
|
type CallbackBeforeMemberJoinGroupResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
NickName *string `json:"nickName"`
|
Nickname *string `json:"nickname"`
|
||||||
FaceURL *string `json:"faceURL"`
|
FaceURL *string `json:"faceURL"`
|
||||||
RoleLevel *int32 `json:"roleLevel"`
|
RoleLevel *int32 `json:"roleLevel"`
|
||||||
MuteEndTime *int64 `json:"muteEndTime"`
|
MuteEndTime *int64 `json:"muteEndTime"`
|
||||||
@ -48,18 +54,18 @@ type CallbackBeforeMemberJoinGroupResp struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type CallbackBeforeSetGroupMemberInfoReq struct {
|
type CallbackBeforeSetGroupMemberInfoReq struct {
|
||||||
CallbackCommand string `json:"callbackCommand"`
|
CallbackCommand `json:"callbackCommand"`
|
||||||
OperationID string `json:"operationID"`
|
OperationID string `json:"operationID"`
|
||||||
GroupID string `json:"groupID"`
|
GroupID string `json:"groupID"`
|
||||||
UserID string `json:"userID"`
|
UserID string `json:"userID"`
|
||||||
Nickname string `json:"nickName"`
|
Nickname *string `json:"nickName"`
|
||||||
FaceURL string `json:"faceURL"`
|
FaceURL *string `json:"faceURL"`
|
||||||
RoleLevel int32 `json:"roleLevel"`
|
RoleLevel *int32 `json:"roleLevel"`
|
||||||
Ex string `json:"ex"`
|
Ex *string `json:"ex"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type CallbackBeforeSetGroupMemberInfoResp struct {
|
type CallbackBeforeSetGroupMemberInfoResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
Ex *string `json:"ex"`
|
Ex *string `json:"ex"`
|
||||||
Nickname *string `json:"nickName"`
|
Nickname *string `json:"nickName"`
|
||||||
FaceURL *string `json:"faceURL"`
|
FaceURL *string `json:"faceURL"`
|
||||||
|
@ -11,7 +11,7 @@ type CallbackBeforeSendSingleMsgReq struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type CallbackBeforeSendSingleMsgResp struct {
|
type CallbackBeforeSendSingleMsgResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
}
|
}
|
||||||
|
|
||||||
type CallbackAfterSendSingleMsgReq struct {
|
type CallbackAfterSendSingleMsgReq struct {
|
||||||
@ -20,7 +20,7 @@ type CallbackAfterSendSingleMsgReq struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type CallbackAfterSendSingleMsgResp struct {
|
type CallbackAfterSendSingleMsgResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
}
|
}
|
||||||
|
|
||||||
type CallbackBeforeSendGroupMsgReq struct {
|
type CallbackBeforeSendGroupMsgReq struct {
|
||||||
@ -29,7 +29,7 @@ type CallbackBeforeSendGroupMsgReq struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type CallbackBeforeSendGroupMsgResp struct {
|
type CallbackBeforeSendGroupMsgResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
}
|
}
|
||||||
|
|
||||||
type CallbackAfterSendGroupMsgReq struct {
|
type CallbackAfterSendGroupMsgReq struct {
|
||||||
@ -38,7 +38,7 @@ type CallbackAfterSendGroupMsgReq struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type CallbackAfterSendGroupMsgResp struct {
|
type CallbackAfterSendGroupMsgResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
}
|
}
|
||||||
|
|
||||||
type CallbackMsgModifyCommandReq struct {
|
type CallbackMsgModifyCommandReq struct {
|
||||||
@ -46,7 +46,7 @@ type CallbackMsgModifyCommandReq struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type CallbackMsgModifyCommandResp struct {
|
type CallbackMsgModifyCommandResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
Content *string `json:"content"`
|
Content *string `json:"content"`
|
||||||
RecvID *string `json:"recvID"`
|
RecvID *string `json:"recvID"`
|
||||||
GroupID *string `json:"groupID"`
|
GroupID *string `json:"groupID"`
|
||||||
@ -68,7 +68,7 @@ type CallbackMsgModifyCommandResp struct {
|
|||||||
}
|
}
|
||||||
type CallbackBeforeSetMessageReactionExtReq struct {
|
type CallbackBeforeSetMessageReactionExtReq struct {
|
||||||
OperationID string `json:"operationID"`
|
OperationID string `json:"operationID"`
|
||||||
CallbackCommand string `json:"callbackCommand"`
|
CallbackCommand `json:"callbackCommand"`
|
||||||
SourceID string `json:"sourceID"`
|
SourceID string `json:"sourceID"`
|
||||||
OpUserID string `json:"opUserID"`
|
OpUserID string `json:"opUserID"`
|
||||||
SessionType int32 `json:"sessionType"`
|
SessionType int32 `json:"sessionType"`
|
||||||
@ -79,13 +79,13 @@ type CallbackBeforeSetMessageReactionExtReq struct {
|
|||||||
MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
|
MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
|
||||||
}
|
}
|
||||||
type CallbackBeforeSetMessageReactionExtResp struct {
|
type CallbackBeforeSetMessageReactionExtResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
ResultReactionExtensionList []*msg.KeyValueResp `json:"resultReactionExtensionList"`
|
ResultReactionExtensionList []*msg.KeyValueResp `json:"resultReactionExtensionList"`
|
||||||
MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
|
MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
|
||||||
}
|
}
|
||||||
type CallbackDeleteMessageReactionExtReq struct {
|
type CallbackDeleteMessageReactionExtReq struct {
|
||||||
|
CallbackCommand `json:"callbackCommand"`
|
||||||
OperationID string `json:"operationID"`
|
OperationID string `json:"operationID"`
|
||||||
CallbackCommand string `json:"callbackCommand"`
|
|
||||||
SourceID string `json:"sourceID"`
|
SourceID string `json:"sourceID"`
|
||||||
OpUserID string `json:"opUserID"`
|
OpUserID string `json:"opUserID"`
|
||||||
SessionType int32 `json:"sessionType"`
|
SessionType int32 `json:"sessionType"`
|
||||||
@ -95,7 +95,7 @@ type CallbackDeleteMessageReactionExtReq struct {
|
|||||||
MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
|
MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
|
||||||
}
|
}
|
||||||
type CallbackDeleteMessageReactionExtResp struct {
|
type CallbackDeleteMessageReactionExtResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
ResultReactionExtensionList []*msg.KeyValueResp `json:"resultReactionExtensionList"`
|
ResultReactionExtensionList []*msg.KeyValueResp `json:"resultReactionExtensionList"`
|
||||||
MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
|
MsgFirstModifyTime int64 `json:"msgFirstModifyTime"`
|
||||||
}
|
}
|
||||||
|
@ -2,31 +2,31 @@ package callbackstruct
|
|||||||
|
|
||||||
type CallbackUserOnlineReq struct {
|
type CallbackUserOnlineReq struct {
|
||||||
UserStatusCallbackReq
|
UserStatusCallbackReq
|
||||||
Token string `json:"token"`
|
//Token string `json:"token"`
|
||||||
Seq int `json:"seq"`
|
Seq int64 `json:"seq"`
|
||||||
IsAppBackground bool `json:"isAppBackground"`
|
IsAppBackground bool `json:"isAppBackground"`
|
||||||
ConnID string `json:"connID"`
|
ConnID string `json:"connID"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type CallbackUserOnlineResp struct {
|
type CallbackUserOnlineResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
}
|
}
|
||||||
|
|
||||||
type CallbackUserOfflineReq struct {
|
type CallbackUserOfflineReq struct {
|
||||||
UserStatusCallbackReq
|
UserStatusCallbackReq
|
||||||
Seq int `json:"seq"`
|
Seq int64 `json:"seq"`
|
||||||
ConnID string `json:"connID"`
|
ConnID string `json:"connID"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type CallbackUserOfflineResp struct {
|
type CallbackUserOfflineResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
}
|
}
|
||||||
|
|
||||||
type CallbackUserKickOffReq struct {
|
type CallbackUserKickOffReq struct {
|
||||||
UserStatusCallbackReq
|
UserStatusCallbackReq
|
||||||
Seq int `json:"seq"`
|
Seq int64 `json:"seq"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type CallbackUserKickOffResp struct {
|
type CallbackUserKickOffResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ type CallbackBeforePushReq struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type CallbackBeforePushResp struct {
|
type CallbackBeforePushResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
UserIDList []string `json:"userIDList"`
|
UserIDList []string `json:"userIDList"`
|
||||||
OfflinePushInfo *common.OfflinePushInfo `json:"offlinePushInfo"`
|
OfflinePushInfo *common.OfflinePushInfo `json:"offlinePushInfo"`
|
||||||
}
|
}
|
||||||
@ -34,7 +34,7 @@ type CallbackBeforeSuperGroupOnlinePushReq struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type CallbackBeforeSuperGroupOnlinePushResp struct {
|
type CallbackBeforeSuperGroupOnlinePushResp struct {
|
||||||
*CommonCallbackResp
|
CommonCallbackResp
|
||||||
UserIDList []string `json:"userIDList"`
|
UserIDList []string `json:"userIDList"`
|
||||||
OfflinePushInfo *common.OfflinePushInfo `json:"offlinePushInfo"`
|
OfflinePushInfo *common.OfflinePushInfo `json:"offlinePushInfo"`
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,8 @@ var (
|
|||||||
|
|
||||||
ErrUserIDNotFound = &ErrInfo{UserIDNotFoundError, "UserIDNotFoundError", ""}
|
ErrUserIDNotFound = &ErrInfo{UserIDNotFoundError, "UserIDNotFoundError", ""}
|
||||||
ErrGroupIDNotFound = &ErrInfo{GroupIDNotFoundError, "GroupIDNotFoundError", ""}
|
ErrGroupIDNotFound = &ErrInfo{GroupIDNotFoundError, "GroupIDNotFoundError", ""}
|
||||||
|
ErrGroupIDExisted = &ErrInfo{GroupIDNotFoundError, "GroupIDExisted", ""} // todo group id 已存在
|
||||||
|
ErrGroupIDExisted = &ErrInfo{GroupIDNotFoundError, "GroupIDExisted", ""} // todo group id 已存在
|
||||||
|
|
||||||
ErrRecordNotFound = &ErrInfo{RecordNotFoundError, "RecordNotFoundError", ""}
|
ErrRecordNotFound = &ErrInfo{RecordNotFoundError, "RecordNotFoundError", ""}
|
||||||
|
|
||||||
@ -45,6 +47,13 @@ var (
|
|||||||
|
|
||||||
ErrDB = ErrDatabase
|
ErrDB = ErrDatabase
|
||||||
ErrSendLimit = ErrInternalServer
|
ErrSendLimit = ErrInternalServer
|
||||||
|
|
||||||
|
ErrBlockedByPeer = &ErrInfo{BlockedByPeer, "BlockedByPeer", ""}
|
||||||
|
//不是对方的好友
|
||||||
|
ErrNotPeersFriend = &ErrInfo{NotPeersFriend, "NotPeersFriend", ""}
|
||||||
|
//
|
||||||
|
ErrMutedInGroup = &ErrInfo{MutedInGroup, "MutedInGroup", ""}
|
||||||
|
ErrMutedGroup = &ErrInfo{MutedGroup, "MutedGroup", ""}
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -92,6 +101,8 @@ const (
|
|||||||
RelationshipAlreadyError = 92001 //已经是好友关系(或者黑名单)
|
RelationshipAlreadyError = 92001 //已经是好友关系(或者黑名单)
|
||||||
NotRelationshipYetError = 92002 //不是好友关系(或者黑名单)
|
NotRelationshipYetError = 92002 //不是好友关系(或者黑名单)
|
||||||
CanNotAddYourselfError = 92003 //不能添加自己为好友
|
CanNotAddYourselfError = 92003 //不能添加自己为好友
|
||||||
|
BlockedByPeer = 92004 //被对方拉黑
|
||||||
|
NotPeersFriend = 92005 //不是对方的好友
|
||||||
)
|
)
|
||||||
|
|
||||||
// 群组错误码
|
// 群组错误码
|
||||||
@ -103,6 +114,9 @@ const (
|
|||||||
OwnerNotAllowedQuitError = 93004 //群主不能退群
|
OwnerNotAllowedQuitError = 93004 //群主不能退群
|
||||||
GroupTypeNotSupport = 93005
|
GroupTypeNotSupport = 93005
|
||||||
GroupNoOwner = 93006
|
GroupNoOwner = 93006
|
||||||
|
|
||||||
|
MutedInGroup = 93007 //群成员被禁言
|
||||||
|
MutedGroup = 93008 //群被禁言
|
||||||
)
|
)
|
||||||
|
|
||||||
// 用户错误码
|
// 用户错误码
|
||||||
|
44
pkg/common/db/cache/conversation.go
vendored
44
pkg/common/db/cache/conversation.go
vendored
@ -20,21 +20,25 @@ const (
|
|||||||
superGroupRecvMsgNotNotifyUserIDsKey = "SUPER_GROUP_RECV_MSG_NOT_NOTIFY_USER_IDS:"
|
superGroupRecvMsgNotNotifyUserIDsKey = "SUPER_GROUP_RECV_MSG_NOT_NOTIFY_USER_IDS:"
|
||||||
conversationExpireTime = time.Second * 60 * 60 * 12
|
conversationExpireTime = time.Second * 60 * 60 * 12
|
||||||
)
|
)
|
||||||
|
type FuncDB func() (string, error)
|
||||||
|
|
||||||
// arg fn will exec when no data in cache
|
// arg fn will exec when no data in cache
|
||||||
type ConversationCache interface {
|
type ConversationCache interface {
|
||||||
// get user's conversationIDs from cache
|
// get user's conversationIDs from cache
|
||||||
GetUserConversationIDs(ctx context.Context, userID string, fn func(ctx context.Context, userID string) ([]string, error)) ([]string, error)
|
GetUserConversationIDs(ctx context.Context, userID string, fn FuncDB) ([]string, error)
|
||||||
// del user's conversationIDs from cache, call when a user add or reduce a conversation
|
// del user's conversationIDs from cache, call when a user add or reduce a conversation
|
||||||
DelUserConversationIDs(ctx context.Context, userID string) error
|
DelUserConversationIDs(ctx context.Context, userID string) error
|
||||||
|
DelUsersConversationIDs(ctx context.Context,userIDList []string)error
|
||||||
// get one conversation from cache
|
// get one conversation from cache
|
||||||
GetConversation(ctx context.Context, ownerUserID, conversationID string, fn func(ctx context.Context, ownerUserID, conversationID string) (*relationTb.ConversationModel, error)) (*relationTb.ConversationModel, error)
|
GetConversation(ctx context.Context, ownerUserID, conversationID string, fn FuncDB) (*relationTb.ConversationModel, error)
|
||||||
// get one conversation from cache
|
// get one conversation from cache
|
||||||
GetConversations(ctx context.Context, ownerUserID string, conversationIDs []string, fn func(ctx context.Context, ownerUserID, conversationIDs []string) ([]*relationTb.ConversationModel, error)) ([]*relationTb.ConversationModel, error)
|
GetConversations(ctx context.Context, ownerUserID string, conversationIDs []string, fn FuncDB)([]*relationTb.ConversationModel, error)
|
||||||
// get one user's all conversations from cache
|
// get one user's all conversations from cache
|
||||||
GetUserAllConversations(ctx context.Context, ownerUserID string, fn func(ctx context.Context, ownerUserIDs string) ([]*relationTb.ConversationModel, error)) ([]*relationTb.ConversationModel, error)
|
GetUserAllConversations(ctx context.Context, ownerUserID string, fn FuncDB ) ([]*relationTb.ConversationModel, error)
|
||||||
// del one conversation from cache, call when one user's conversation Info changed
|
// del one conversation from cache, call when one user's conversation Info changed
|
||||||
DelConversation(ctx context.Context, ownerUserID, conversationID string) error
|
DelConversation(ctx context.Context, ownerUserID, conversationID string) error
|
||||||
|
DelUserConversations(ctx context.Context, ownerUserID string, conversationIDList []string) error
|
||||||
|
DelUsersConversation(ctx context.Context, ownerUserIDList []string, conversationID string) error
|
||||||
// get user conversation recv msg from cache
|
// get user conversation recv msg from cache
|
||||||
GetUserRecvMsgOpt(ctx context.Context, ownerUserID, conversationID string, fn func(ctx context.Context, ownerUserID, conversationID string) (opt int, err error)) (opt int, err error)
|
GetUserRecvMsgOpt(ctx context.Context, ownerUserID, conversationID string, fn func(ctx context.Context, ownerUserID, conversationID string) (opt int, err error)) (opt int, err error)
|
||||||
// del user recv msg opt from cache, call when user's conversation recv msg opt changed
|
// del user recv msg opt from cache, call when user's conversation recv msg opt changed
|
||||||
@ -51,6 +55,38 @@ type ConversationRedis struct {
|
|||||||
rcClient *rockscache.Client
|
rcClient *rockscache.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ConversationRedis) GetUserConversationIDs(ctx context.Context, userID string, fn func(ctx context.Context, userID string) ([]string, error)) ([]string, error) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ConversationRedis) DelUsersConversationIDs(ctx context.Context, userIDList []string) error {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ConversationRedis) GetConversation(ctx context.Context, ownerUserID, conversationID string, fn func(ctx context.Context, ownerUserID string, conversationID string) (*relationTb.ConversationModel, error)) (*relationTb.ConversationModel, error) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ConversationRedis) GetConversations(ctx context.Context, ownerUserID string, conversationIDs []string, fn FuncDB) ([]*relationTb.ConversationModel, error) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ConversationRedis) GetUserAllConversations(ctx context.Context, ownerUserID string, fn FuncDB) ([]*relationTb.ConversationModel, error) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ConversationRedis) DelUsersConversation(ctx context.Context, ownerUserIDList []string, conversationID string) error {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ConversationRedis) GetUserRecvMsgOpt(ctx context.Context, ownerUserID, conversationID string, fn func(ctx context.Context, ownerUserID string, conversationID string) (opt int, err error)) (opt int, err error) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *ConversationRedis) GetSuperGroupRecvMsgNotNotifyUserIDs(ctx context.Context, groupID string, fn func(ctx context.Context, groupID string) (userIDs []string, err error)) (userIDs []string, err error) {
|
||||||
|
panic("implement me")
|
||||||
|
}
|
||||||
|
|
||||||
func NewConversationRedis(rcClient *rockscache.Client) *ConversationRedis {
|
func NewConversationRedis(rcClient *rockscache.Client) *ConversationRedis {
|
||||||
return &ConversationRedis{rcClient: rcClient}
|
return &ConversationRedis{rcClient: rcClient}
|
||||||
}
|
}
|
||||||
|
241
pkg/common/db/cache/group.go
vendored
241
pkg/common/db/cache/group.go
vendored
@ -1,17 +1,14 @@
|
|||||||
package cache
|
package cache
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/pkg/common/db/relation"
|
|
||||||
relationTb "Open_IM/pkg/common/db/table/relation"
|
relationTb "Open_IM/pkg/common/db/table/relation"
|
||||||
"Open_IM/pkg/common/db/unrelation"
|
"Open_IM/pkg/common/db/unrelation"
|
||||||
"Open_IM/pkg/common/tracelog"
|
"Open_IM/pkg/common/tracelog"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
|
||||||
"github.com/dtm-labs/rockscache"
|
"github.com/dtm-labs/rockscache"
|
||||||
"github.com/go-redis/redis/v8"
|
"github.com/go-redis/redis/v8"
|
||||||
"math/big"
|
"math/big"
|
||||||
"strconv"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@ -157,6 +154,27 @@ func (g *GroupCacheRedis) GetGroupMembersHash(ctx context.Context, groupID strin
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *GroupCacheRedis) GetGroupMemberHash1(ctx context.Context, groupIDs []string) (map[string]*relationTb.GroupSimpleUserID, error) {
|
||||||
|
// todo
|
||||||
|
mapGroupUserIDs, err := g.groupMember.FindJoinUserID(ctx, groupIDs)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
res := make(map[string]*relationTb.GroupSimpleUserID)
|
||||||
|
for _, groupID := range groupIDs {
|
||||||
|
userIDs := mapGroupUserIDs[groupID]
|
||||||
|
users := &relationTb.GroupSimpleUserID{}
|
||||||
|
if len(userIDs) > 0 {
|
||||||
|
utils.Sort(userIDs, true)
|
||||||
|
bi := big.NewInt(0)
|
||||||
|
bi.SetString(utils.Md5(strings.Join(userIDs, ";"))[0:8], 16)
|
||||||
|
users.Hash = bi.Uint64()
|
||||||
|
}
|
||||||
|
res[groupID] = users
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
|
||||||
func (g *GroupCacheRedis) DelGroupMembersHash(ctx context.Context, groupID string) (err error) {
|
func (g *GroupCacheRedis) DelGroupMembersHash(ctx context.Context, groupID string) (err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID)
|
||||||
@ -178,111 +196,104 @@ func (g *GroupCacheRedis) DelGroupMemberIDs(ctx context.Context, groupID string)
|
|||||||
return g.rcClient.TagAsDeleted(g.getGroupMemberIDsKey(groupID))
|
return g.rcClient.TagAsDeleted(g.getGroupMemberIDsKey(groupID))
|
||||||
}
|
}
|
||||||
|
|
||||||
// JoinedGroups
|
//// JoinedGroups
|
||||||
func (g *GroupCacheRedis) GetJoinedGroupIDs(ctx context.Context, userID string) (joinedGroupIDs []string, err error) {
|
//func (g *GroupCacheRedis) GetJoinedGroupIDs(ctx context.Context, userID string) (joinedGroupIDs []string, err error) {
|
||||||
getJoinedGroupIDList := func() (string, error) {
|
// getJoinedGroupIDList := func() (string, error) {
|
||||||
joinedGroupList, err := relation.GetJoinedGroupIDListByUserID(userID)
|
// joinedGroupList, err := relation.GetJoinedGroupIDListByUserID(userID)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return "", err
|
// return "", err
|
||||||
}
|
// }
|
||||||
bytes, err := json.Marshal(joinedGroupList)
|
// bytes, err := json.Marshal(joinedGroupList)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return "", utils.Wrap(err, "")
|
// return "", utils.Wrap(err, "")
|
||||||
}
|
// }
|
||||||
return string(bytes), nil
|
// return string(bytes), nil
|
||||||
}
|
// }
|
||||||
defer func() {
|
// defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userID, "joinedGroupIDs", joinedGroupIDs)
|
// tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userID, "joinedGroupIDs", joinedGroupIDs)
|
||||||
}()
|
// }()
|
||||||
joinedGroupIDListStr, err := g.rcClient.Fetch(g.getJoinedGroupsKey(userID), time.Second*30*60, getJoinedGroupIDList)
|
// joinedGroupIDListStr, err := g.rcClient.Fetch(g.getJoinedGroupsKey(userID), time.Second*30*60, getJoinedGroupIDList)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return nil, err
|
// return nil, err
|
||||||
}
|
// }
|
||||||
err = json.Unmarshal([]byte(joinedGroupIDListStr), &joinedGroupIDs)
|
// err = json.Unmarshal([]byte(joinedGroupIDListStr), &joinedGroupIDs)
|
||||||
return joinedGroupIDs, utils.Wrap(err, "")
|
// return joinedGroupIDs, utils.Wrap(err, "")
|
||||||
}
|
//}
|
||||||
|
|
||||||
func (g *GroupCacheRedis) DelJoinedGroupIDs(ctx context.Context, userID string) (err error) {
|
func (g *GroupCacheRedis) DelJoinedGroupID(ctx context.Context, userID string) (err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userID)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userID)
|
||||||
}()
|
}()
|
||||||
return g.rcClient.TagAsDeleted(g.getJoinedGroupsKey(userID))
|
return g.rcClient.TagAsDeleted(g.getJoinedGroupsKey(userID))
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetGroupMemberInfo
|
//func (g *GroupCacheRedis) DelJoinedGroupIDs(ctx context.Context, userIDs []string) (err error) {
|
||||||
func (g *GroupCacheRedis) GetGroupMemberInfo(ctx context.Context, groupID, userID string) (groupMember *relation.GroupMember, err error) {
|
// defer func() {
|
||||||
getGroupMemberInfo := func() (string, error) {
|
// tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userID)
|
||||||
groupMemberInfo, err := relation.GetGroupMemberInfoByGroupIDAndUserID(groupID, userID)
|
// }()
|
||||||
if err != nil {
|
// for _, userID := range userIDs {
|
||||||
return "", err
|
// if err := g.DelJoinedGroupID(ctx, userID); err != nil {
|
||||||
}
|
// return err
|
||||||
bytes, err := json.Marshal(groupMemberInfo)
|
// }
|
||||||
if err != nil {
|
// }
|
||||||
return "", utils.Wrap(err, "")
|
// return nil
|
||||||
}
|
//}
|
||||||
return string(bytes), nil
|
|
||||||
}
|
func (g *GroupCacheRedis) GetGroupMemberInfo(ctx context.Context, groupID, userID string) (groupMember *relationTb.GroupMemberModel, err error) {
|
||||||
defer func() {
|
return GetCache(ctx, g.rcClient, g.getGroupMemberInfoKey(groupID, userID), g.expireTime, func(ctx context.Context) (*relationTb.GroupMemberModel, error) {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "userID", userID, "groupMember", *groupMember)
|
return g.groupMember.Take(ctx, groupID, userID)
|
||||||
}()
|
})
|
||||||
groupMemberInfoStr, err := g.rcClient.Fetch(g.getGroupMemberInfoKey(groupID, userID), time.Second*30*60, getGroupMemberInfo)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
groupMember = &relation.GroupMember{}
|
|
||||||
err = json.Unmarshal([]byte(groupMemberInfoStr), groupMember)
|
|
||||||
return groupMember, utils.Wrap(err, "")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupCacheRedis) GetGroupMembersInfo(ctx context.Context, groupID, userIDs []string) (groupMember *relationTb.GroupMemberModel, err error) {
|
//func (g *GroupCacheRedis) GetGroupMembersInfo(ctx context.Context, groupID, userIDs []string) (groupMember *relationTb.GroupMemberModel, err error) {
|
||||||
|
//
|
||||||
|
// return nil, err
|
||||||
|
//}
|
||||||
|
|
||||||
return nil, err
|
//func (g *GroupCacheRedis) GetGroupMembersInfo(ctx context.Context, count, offset int32, groupID string) (groupMembers []*relation.GroupMember, err error) {
|
||||||
}
|
// defer func() {
|
||||||
|
// tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "count", count, "offset", offset, "groupID", groupID, "groupMember", groupMembers)
|
||||||
func (g *GroupCacheRedis) GetGroupMembersInfo(ctx context.Context, count, offset int32, groupID string) (groupMembers []*relation.GroupMember, err error) {
|
// }()
|
||||||
defer func() {
|
// groupMemberIDList, err := g.GetGroupMemberIDs(ctx, groupID)
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "count", count, "offset", offset, "groupID", groupID, "groupMember", groupMembers)
|
// if err != nil {
|
||||||
}()
|
// return nil, err
|
||||||
groupMemberIDList, err := g.GetGroupMemberIDs(ctx, groupID)
|
// }
|
||||||
if err != nil {
|
// if count < 0 || offset < 0 {
|
||||||
return nil, err
|
// return nil, nil
|
||||||
}
|
// }
|
||||||
if count < 0 || offset < 0 {
|
// var groupMemberList []*relation.GroupMember
|
||||||
return nil, nil
|
// var start, stop int32
|
||||||
}
|
// start = offset
|
||||||
var groupMemberList []*relation.GroupMember
|
// stop = offset + count
|
||||||
var start, stop int32
|
// l := int32(len(groupMemberIDList))
|
||||||
start = offset
|
// if start > stop {
|
||||||
stop = offset + count
|
// return nil, nil
|
||||||
l := int32(len(groupMemberIDList))
|
// }
|
||||||
if start > stop {
|
// if start >= l {
|
||||||
return nil, nil
|
// return nil, nil
|
||||||
}
|
// }
|
||||||
if start >= l {
|
// if count != 0 {
|
||||||
return nil, nil
|
// if stop >= l {
|
||||||
}
|
// stop = l
|
||||||
if count != 0 {
|
// }
|
||||||
if stop >= l {
|
// groupMemberIDList = groupMemberIDList[start:stop]
|
||||||
stop = l
|
// } else {
|
||||||
}
|
// if l < 1000 {
|
||||||
groupMemberIDList = groupMemberIDList[start:stop]
|
// stop = l
|
||||||
} else {
|
// } else {
|
||||||
if l < 1000 {
|
// stop = 1000
|
||||||
stop = l
|
// }
|
||||||
} else {
|
// groupMemberIDList = groupMemberIDList[start:stop]
|
||||||
stop = 1000
|
// }
|
||||||
}
|
// for _, userID := range groupMemberIDList {
|
||||||
groupMemberIDList = groupMemberIDList[start:stop]
|
// groupMember, err := g.GetGroupMemberInfo(ctx, groupID, userID)
|
||||||
}
|
// if err != nil {
|
||||||
for _, userID := range groupMemberIDList {
|
// return
|
||||||
groupMember, err := g.GetGroupMemberInfo(ctx, groupID, userID)
|
// }
|
||||||
if err != nil {
|
// groupMembers = append(groupMembers, groupMember)
|
||||||
return
|
// }
|
||||||
}
|
// return groupMemberList, nil
|
||||||
groupMembers = append(groupMembers, groupMember)
|
//}
|
||||||
}
|
|
||||||
return groupMemberList, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (g *GroupCacheRedis) DelGroupMemberInfo(ctx context.Context, groupID, userID string) (err error) {
|
func (g *GroupCacheRedis) DelGroupMemberInfo(ctx context.Context, groupID, userID string) (err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
@ -292,23 +303,23 @@ func (g *GroupCacheRedis) DelGroupMemberInfo(ctx context.Context, groupID, userI
|
|||||||
}
|
}
|
||||||
|
|
||||||
// groupMemberNum
|
// groupMemberNum
|
||||||
func (g *GroupCacheRedis) GetGroupMemberNum(ctx context.Context, groupID string) (num int, err error) {
|
//func (g *GroupCacheRedis) GetGroupMemberNum(ctx context.Context, groupID string) (num int, err error) {
|
||||||
getGroupMemberNum := func() (string, error) {
|
// getGroupMemberNum := func() (string, error) {
|
||||||
num, err := relation.GetGroupMemberNumByGroupID(groupID)
|
// num, err := relation.GetGroupMemberNumByGroupID(groupID)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return "", err
|
// return "", err
|
||||||
}
|
// }
|
||||||
return strconv.Itoa(int(num)), nil
|
// return strconv.Itoa(int(num)), nil
|
||||||
}
|
// }
|
||||||
defer func() {
|
// defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "num", num)
|
// tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "num", num)
|
||||||
}()
|
// }()
|
||||||
groupMember, err := g.rcClient.Fetch(g.getGroupMemberNumKey(groupID), time.Second*30*60, getGroupMemberNum)
|
// groupMember, err := g.rcClient.Fetch(g.getGroupMemberNumKey(groupID), time.Second*30*60, getGroupMemberNum)
|
||||||
if err != nil {
|
// if err != nil {
|
||||||
return 0, err
|
// return 0, err
|
||||||
}
|
// }
|
||||||
return strconv.Atoi(groupMember)
|
// return strconv.Atoi(groupMember)
|
||||||
}
|
//}
|
||||||
|
|
||||||
func (g *GroupCacheRedis) DelGroupMemberNum(ctx context.Context, groupID string) (err error) {
|
func (g *GroupCacheRedis) DelGroupMemberNum(ctx context.Context, groupID string) (err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
|
41
pkg/common/db/cache/redis.go
vendored
41
pkg/common/db/cache/redis.go
vendored
@ -88,14 +88,14 @@ type Cache interface {
|
|||||||
|
|
||||||
// native redis operate
|
// native redis operate
|
||||||
|
|
||||||
type RedisClient struct {
|
//func NewRedis() *RedisClient {
|
||||||
rdb redis.UniversalClient
|
// o := &RedisClient{}
|
||||||
}
|
// o.InitRedis()
|
||||||
|
// return o
|
||||||
|
//}
|
||||||
|
|
||||||
func (r *RedisClient) InitRedis() error {
|
func NewRedis() (*RedisClient, error) {
|
||||||
var rdb redis.UniversalClient
|
var rdb redis.UniversalClient
|
||||||
var err error
|
|
||||||
ctx := context.Background()
|
|
||||||
if config.Config.Redis.EnableCluster {
|
if config.Config.Redis.EnableCluster {
|
||||||
rdb = redis.NewClusterClient(&redis.ClusterOptions{
|
rdb = redis.NewClusterClient(&redis.ClusterOptions{
|
||||||
Addrs: config.Config.Redis.DBAddress,
|
Addrs: config.Config.Redis.DBAddress,
|
||||||
@ -103,11 +103,10 @@ func (r *RedisClient) InitRedis() error {
|
|||||||
Password: config.Config.Redis.DBPassWord, // no password set
|
Password: config.Config.Redis.DBPassWord, // no password set
|
||||||
PoolSize: 50,
|
PoolSize: 50,
|
||||||
})
|
})
|
||||||
_, err = rdb.Ping(ctx).Result()
|
//if err := rdb.Ping(ctx).Err();err != nil {
|
||||||
if err != nil {
|
// return nil, fmt.Errorf("redis ping %w", err)
|
||||||
fmt.Println("redis cluster failed address ", config.Config.Redis.DBAddress, config.Config.Redis.DBUserName, config.Config.Redis.DBPassWord)
|
//}
|
||||||
return err
|
//return &RedisClient{rdb: rdb}, nil
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
rdb = redis.NewClient(&redis.Options{
|
rdb = redis.NewClient(&redis.Options{
|
||||||
Addr: config.Config.Redis.DBAddress[0],
|
Addr: config.Config.Redis.DBAddress[0],
|
||||||
@ -116,18 +115,22 @@ func (r *RedisClient) InitRedis() error {
|
|||||||
DB: 0, // use default DB
|
DB: 0, // use default DB
|
||||||
PoolSize: 100, // 连接池大小
|
PoolSize: 100, // 连接池大小
|
||||||
})
|
})
|
||||||
_, err = rdb.Ping(ctx).Result()
|
//err := rdb.Ping(ctx).Err()
|
||||||
|
//if err != nil {
|
||||||
|
// panic(err.Error() + " redis " + config.Config.Redis.DBAddress[0] + config.Config.Redis.DBUserName + config.Config.Redis.DBPassWord)
|
||||||
|
//}
|
||||||
|
}
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
|
||||||
|
defer cancel()
|
||||||
|
err := rdb.Ping(ctx).Err()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Println(" redis " + config.Config.Redis.DBAddress[0] + config.Config.Redis.DBUserName + config.Config.Redis.DBPassWord)
|
return nil, fmt.Errorf("redis ping %w", err)
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
}
|
return &RedisClient{rdb: rdb}, nil
|
||||||
r.rdb = rdb
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *RedisClient) GetClient() redis.UniversalClient {
|
type RedisClient struct {
|
||||||
return r.rdb
|
rdb redis.UniversalClient
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRedisClient(rdb redis.UniversalClient) *RedisClient {
|
func NewRedisClient(rdb redis.UniversalClient) *RedisClient {
|
||||||
|
@ -19,7 +19,6 @@ type AuthController struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewAuthController(rdb redis.UniversalClient, accessSecret string, accessExpire int64) *AuthController {
|
func NewAuthController(rdb redis.UniversalClient, accessSecret string, accessExpire int64) *AuthController {
|
||||||
cache.NewRedisClient(rdb)
|
|
||||||
return &AuthController{database: cache.NewTokenRedis(cache.NewRedisClient(rdb), accessSecret, accessExpire)}
|
return &AuthController{database: cache.NewTokenRedis(cache.NewRedisClient(rdb), accessSecret, accessExpire)}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,32 +1,42 @@
|
|||||||
package controller
|
package controller
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"Open_IM/pkg/common/constant"
|
||||||
"Open_IM/pkg/common/db/cache"
|
"Open_IM/pkg/common/db/cache"
|
||||||
"Open_IM/pkg/common/db/relation"
|
"Open_IM/pkg/common/db/relation"
|
||||||
relationTb "Open_IM/pkg/common/db/table/relation"
|
relationTb "Open_IM/pkg/common/db/table/relation"
|
||||||
|
"Open_IM/pkg/utils"
|
||||||
"context"
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ConversationInterface interface {
|
type ConversationInterface interface {
|
||||||
//GetUserIDExistConversation 获取拥有该会话的的用户ID列表
|
//GetUserIDExistConversation 获取拥有该会话的的用户ID列表
|
||||||
GetUserIDExistConversation(ctx context.Context, userIDList []string, conversationID string) ([]string, error)
|
GetUserIDExistConversation(ctx context.Context, userIDList []string, conversationID string) ([]string, error)
|
||||||
//UpdateUserConversationFiled 更新用户该会话的属性信息
|
//UpdateUserConversationFiled 更新用户该会话的属性信息
|
||||||
UpdateUsersConversationFiled(ctx context.Context, UserIDList []string, conversationID string, args map[string]interface{}) error
|
UpdateUsersConversationFiled(ctx context.Context, userIDList []string, conversationID string, args map[string]interface{}) error
|
||||||
//CreateConversation 创建一批新的会话
|
//CreateConversation 创建一批新的会话
|
||||||
CreateConversation(ctx context.Context, conversations []*relationTb.ConversationModel) error
|
CreateConversation(ctx context.Context, conversations []*relationTb.ConversationModel) error
|
||||||
//SyncPeerUserPrivateConversation 同步对端私聊会话内部保证事务操作
|
//SyncPeerUserPrivateConversation 同步对端私聊会话内部保证事务操作
|
||||||
SyncPeerUserPrivateConversationTx(ctx context.Context, conversation *relationTb.ConversationModel) error
|
SyncPeerUserPrivateConversationTx(ctx context.Context, conversation *relationTb.ConversationModel) error
|
||||||
//FindConversations 根据会话ID获取某个用户的多个会话
|
//FindConversations 根据会话ID获取某个用户的多个会话
|
||||||
FindConversations(ctx context.Context, ownerUserID string, conversationID []string) ([]*relationTb.ConversationModel, error)
|
FindConversations(ctx context.Context, ownerUserID string, conversationIDs []string) ([]*relationTb.ConversationModel, error)
|
||||||
//GetUserAllConversation 获取一个用户在服务器上所有的会话
|
//GetUserAllConversation 获取一个用户在服务器上所有的会话
|
||||||
GetUserAllConversation(ctx context.Context, ownerUserID string) ([]*relationTb.ConversationModel, error)
|
GetUserAllConversation(ctx context.Context, ownerUserID string) ([]*relationTb.ConversationModel, error)
|
||||||
//SetUserConversations 设置用户多个会话属性,如果会话不存在则创建,否则更新,内部保证原子性
|
//SetUserConversations 设置用户多个会话属性,如果会话不存在则创建,否则更新,内部保证原子性
|
||||||
SetUserConversations(ctx context.Context, ownerUserID string, conversations []*relationTb.ConversationModel) error
|
SetUserConversations(ctx context.Context, ownerUserID string, conversations []*relationTb.ConversationModel) error
|
||||||
|
//SetUsersConversationFiledTx 设置多个用户会话关于某个字段的更新操作,如果会话不存在则创建,否则更新,内部保证事务操作
|
||||||
|
SetUsersConversationFiledTx(ctx context.Context, userIDList []string, conversation *relationTb.ConversationModel, filedMap map[string]interface{}) error
|
||||||
}
|
}
|
||||||
type ConversationController struct {
|
type ConversationController struct {
|
||||||
database ConversationDataBaseInterface
|
database ConversationDataBaseInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *ConversationController) SetUsersConversationFiledTx(ctx context.Context, userIDList []string, conversation *relationTb.ConversationModel, filedMap map[string]interface{}) error {
|
||||||
|
return c.database.SetUsersConversationFiledTx(ctx, userIDList, conversation, filedMap)
|
||||||
|
}
|
||||||
|
|
||||||
func NewConversationController(database ConversationDataBaseInterface) *ConversationController {
|
func NewConversationController(database ConversationDataBaseInterface) *ConversationController {
|
||||||
return &ConversationController{database: database}
|
return &ConversationController{database: database}
|
||||||
}
|
}
|
||||||
@ -36,26 +46,26 @@ func (c *ConversationController) GetUserIDExistConversation(ctx context.Context,
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c ConversationController) UpdateUsersConversationFiled(ctx context.Context, UserIDList []string, conversationID string, args map[string]interface{}) error {
|
func (c ConversationController) UpdateUsersConversationFiled(ctx context.Context, UserIDList []string, conversationID string, args map[string]interface{}) error {
|
||||||
panic("implement me")
|
return c.database.UpdateUsersConversationFiled(ctx, UserIDList, conversationID, args)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c ConversationController) CreateConversation(ctx context.Context, conversations []*relationTb.ConversationModel) error {
|
func (c ConversationController) CreateConversation(ctx context.Context, conversations []*relationTb.ConversationModel) error {
|
||||||
panic("implement me")
|
return c.database.CreateConversation(ctx, conversations)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c ConversationController) SyncPeerUserPrivateConversationTx(ctx context.Context, conversation *relationTb.ConversationModel) error {
|
func (c ConversationController) SyncPeerUserPrivateConversationTx(ctx context.Context, conversation *relationTb.ConversationModel) error {
|
||||||
panic("implement me")
|
return c.database.SyncPeerUserPrivateConversationTx(ctx, conversation)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c ConversationController) FindConversations(ctx context.Context, ownerUserID string, conversationID []string) ([]*relationTb.ConversationModel, error) {
|
func (c ConversationController) FindConversations(ctx context.Context, ownerUserID string, conversationIDs []string) ([]*relationTb.ConversationModel, error) {
|
||||||
panic("implement me")
|
return c.database.FindConversations(ctx, ownerUserID, conversationIDs)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c ConversationController) GetUserAllConversation(ctx context.Context, ownerUserID string) ([]*relationTb.ConversationModel, error) {
|
func (c ConversationController) GetUserAllConversation(ctx context.Context, ownerUserID string) ([]*relationTb.ConversationModel, error) {
|
||||||
panic("implement me")
|
return c.database.GetUserAllConversation(ctx, ownerUserID)
|
||||||
}
|
}
|
||||||
func (c ConversationController) SetUserConversations(ctx context.Context, ownerUserID string, conversations []*relationTb.ConversationModel) error {
|
func (c ConversationController) SetUserConversations(ctx context.Context, ownerUserID string, conversations []*relationTb.ConversationModel) error {
|
||||||
panic("implement me")
|
return c.database.SetUserConversations(ctx, ownerUserID, conversations)
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ ConversationInterface = (*ConversationController)(nil)
|
var _ ConversationInterface = (*ConversationController)(nil)
|
||||||
@ -70,15 +80,65 @@ type ConversationDataBaseInterface interface {
|
|||||||
//SyncPeerUserPrivateConversation 同步对端私聊会话内部保证事务操作
|
//SyncPeerUserPrivateConversation 同步对端私聊会话内部保证事务操作
|
||||||
SyncPeerUserPrivateConversationTx(ctx context.Context, conversation *relationTb.ConversationModel) error
|
SyncPeerUserPrivateConversationTx(ctx context.Context, conversation *relationTb.ConversationModel) error
|
||||||
//FindConversations 根据会话ID获取某个用户的多个会话
|
//FindConversations 根据会话ID获取某个用户的多个会话
|
||||||
FindConversations(ctx context.Context, ownerUserID string, conversationID []string) ([]*relationTb.ConversationModel, error)
|
FindConversations(ctx context.Context, ownerUserID string, conversationIDs []string) ([]*relationTb.ConversationModel, error)
|
||||||
//GetUserAllConversation 获取一个用户在服务器上所有的会话
|
//GetUserAllConversation 获取一个用户在服务器上所有的会话
|
||||||
GetUserAllConversation(ctx context.Context, ownerUserID string) ([]*relationTb.ConversationModel, error)
|
GetUserAllConversation(ctx context.Context, ownerUserID string) ([]*relationTb.ConversationModel, error)
|
||||||
//SetUserConversations 设置用户多个会话属性,如果会话不存在则创建,否则更新,内部保证原子性
|
//SetUserConversations 设置用户多个会话属性,如果会话不存在则创建,否则更新,内部保证原子性
|
||||||
SetUserConversations(ctx context.Context, ownerUserID string, conversations []*relationTb.ConversationModel) error
|
SetUserConversations(ctx context.Context, ownerUserID string, conversations []*relationTb.ConversationModel) error
|
||||||
|
//SetUsersConversationFiledTx 设置多个用户会话关于某个字段的更新操作,如果会话不存在则创建,否则更新,内部保证事务操作
|
||||||
|
SetUsersConversationFiledTx(ctx context.Context, userIDList []string, conversation *relationTb.ConversationModel, filedMap map[string]interface{}) error
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var _ ConversationDataBaseInterface = (*ConversationDataBase)(nil)
|
||||||
|
|
||||||
type ConversationDataBase struct {
|
type ConversationDataBase struct {
|
||||||
db relation.Conversation
|
conversationDB relation.Conversation
|
||||||
cache cache.ConversationCache
|
cache cache.ConversationCache
|
||||||
|
db *gorm.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c ConversationDataBase) SetUsersConversationFiledTx(ctx context.Context, userIDList []string, conversation *relationTb.ConversationModel, filedMap map[string]interface{}) error {
|
||||||
|
return c.db.Transaction(func(tx *gorm.DB) error {
|
||||||
|
haveUserID, err := c.conversationDB.FindUserID(ctx, userIDList, conversation.ConversationID, tx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if len(haveUserID) > 0 {
|
||||||
|
err = c.conversationDB.UpdateByMap(ctx, haveUserID, conversation.ConversationID, filedMap, tx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
NotUserID := utils.DifferenceString(haveUserID, userIDList)
|
||||||
|
var cList []*relationTb.ConversationModel
|
||||||
|
for _, v := range NotUserID {
|
||||||
|
temp := new(relationTb.ConversationModel)
|
||||||
|
if err := utils.CopyStructFields(temp, conversation); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
temp.OwnerUserID = v
|
||||||
|
cList = append(cList, temp)
|
||||||
|
}
|
||||||
|
err = c.conversationDB.Create(ctx, cList)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if len(NotUserID) > 0 {
|
||||||
|
err = c.cache.DelUsersConversationIDs(ctx, NotUserID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = c.cache.DelUsersConversation(ctx, haveUserID, conversation.ConversationID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewConversationDataBase(db relation.Conversation, cache cache.ConversationCache) *ConversationDataBase {
|
||||||
|
return &ConversationDataBase{conversationDB: db, cache: cache}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c ConversationDataBase) GetUserIDExistConversation(ctx context.Context, userIDList []string, conversationID string) ([]string, error) {
|
func (c ConversationDataBase) GetUserIDExistConversation(ctx context.Context, userIDList []string, conversationID string) ([]string, error) {
|
||||||
@ -94,26 +154,155 @@ func (c ConversationDataBase) CreateConversation(ctx context.Context, conversati
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (c ConversationDataBase) SyncPeerUserPrivateConversationTx(ctx context.Context, conversation *relationTb.ConversationModel) error {
|
func (c ConversationDataBase) SyncPeerUserPrivateConversationTx(ctx context.Context, conversation *relationTb.ConversationModel) error {
|
||||||
panic("implement me")
|
return c.db.Transaction(func(tx *gorm.DB) error {
|
||||||
|
userIDList := []string{conversation.OwnerUserID, conversation.UserID}
|
||||||
|
haveUserID, err := c.conversationDB.FindUserID(ctx, userIDList, conversation.ConversationID, tx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
filedMap := map[string]interface{}{"is_private_chat": conversation.IsPrivateChat}
|
||||||
|
if len(haveUserID) > 0 {
|
||||||
|
err = c.conversationDB.UpdateByMap(ctx, haveUserID, conversation.ConversationID, filedMap, tx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
NotUserID := utils.DifferenceString(haveUserID, userIDList)
|
||||||
|
var cList []*relationTb.ConversationModel
|
||||||
|
for _, v := range NotUserID {
|
||||||
|
temp := new(relationTb.ConversationModel)
|
||||||
|
if v == conversation.UserID {
|
||||||
|
temp.OwnerUserID = conversation.UserID
|
||||||
|
temp.ConversationID = utils.GetConversationIDBySessionType(conversation.OwnerUserID, constant.SingleChatType)
|
||||||
|
temp.ConversationType = constant.SingleChatType
|
||||||
|
temp.UserID = conversation.OwnerUserID
|
||||||
|
temp.IsPrivateChat = conversation.IsPrivateChat
|
||||||
|
} else {
|
||||||
|
if err := utils.CopyStructFields(temp, conversation); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
temp.OwnerUserID = v
|
||||||
|
}
|
||||||
|
cList = append(cList, temp)
|
||||||
|
}
|
||||||
|
if len(NotUserID) > 0 {
|
||||||
|
err = c.conversationDB.Create(ctx, cList)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = c.cache.DelUsersConversationIDs(ctx, NotUserID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = c.cache.DelUsersConversation(ctx, haveUserID, conversation.ConversationID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c ConversationDataBase) FindConversations(ctx context.Context, ownerUserID string, conversationID []string) ([]*relationTb.ConversationModel, error) {
|
func (c ConversationDataBase) FindConversations(ctx context.Context, ownerUserID string, conversationIDs []string) ([]*relationTb.ConversationModel, error) {
|
||||||
panic("implement me")
|
getConversation := func() (string, error) {
|
||||||
|
conversationList, err := c.conversationDB.Find(ctx, ownerUserID, conversationIDs)
|
||||||
|
if err != nil {
|
||||||
|
return "", utils.Wrap(err, "get failed")
|
||||||
|
}
|
||||||
|
bytes, err := json.Marshal(conversationList)
|
||||||
|
if err != nil {
|
||||||
|
return "", utils.Wrap(err, "Marshal failed")
|
||||||
|
}
|
||||||
|
return string(bytes), nil
|
||||||
|
}
|
||||||
|
return c.cache.GetConversations(ctx, ownerUserID, conversationIDs, getConversation)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c ConversationDataBase) GetConversation(ctx context.Context, ownerUserID string, conversationID string) (*relationTb.ConversationModel, error) {
|
||||||
|
getConversation := func() (string, error) {
|
||||||
|
conversationList, err := c.conversationDB.Take(ctx, ownerUserID, conversationID)
|
||||||
|
if err != nil {
|
||||||
|
return "", utils.Wrap(err, "get failed")
|
||||||
|
}
|
||||||
|
bytes, err := json.Marshal(conversationList)
|
||||||
|
if err != nil {
|
||||||
|
return "", utils.Wrap(err, "Marshal failed")
|
||||||
|
}
|
||||||
|
return string(bytes), nil
|
||||||
|
}
|
||||||
|
return c.cache.GetConversation(ctx, ownerUserID, conversationID, getConversation)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c ConversationDataBase) GetUserAllConversation(ctx context.Context, ownerUserID string) ([]*relationTb.ConversationModel, error) {
|
func (c ConversationDataBase) GetUserAllConversation(ctx context.Context, ownerUserID string) ([]*relationTb.ConversationModel, error) {
|
||||||
panic("implement me")
|
getConversationIDList := func() (string, error) {
|
||||||
|
conversationIDList, err := c.conversationDB.FindUserIDAllConversationID(ctx, ownerUserID)
|
||||||
|
if err != nil {
|
||||||
|
return "", utils.Wrap(err, "getConversationIDList failed")
|
||||||
|
}
|
||||||
|
bytes, err := json.Marshal(conversationIDList)
|
||||||
|
if err != nil {
|
||||||
|
return "", utils.Wrap(err, "")
|
||||||
|
}
|
||||||
|
return string(bytes), nil
|
||||||
|
}
|
||||||
|
conversationIDList, err := c.cache.GetUserConversationIDs(ctx, ownerUserID, getConversationIDList)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
var conversations []*relationTb.ConversationModel
|
||||||
|
for _, conversationID := range conversationIDList {
|
||||||
|
conversation, tErr := c.GetConversation(ctx, ownerUserID, conversationID)
|
||||||
|
if tErr != nil {
|
||||||
|
return nil, utils.Wrap(tErr, "GetConversation failed")
|
||||||
|
}
|
||||||
|
conversations = append(conversations, conversation)
|
||||||
|
}
|
||||||
|
return conversations, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c ConversationDataBase) SetUserConversations(ctx context.Context, ownerUserID string, conversations []*relationTb.ConversationModel) error {
|
func (c ConversationDataBase) SetUserConversations(ctx context.Context, ownerUserID string, conversations []*relationTb.ConversationModel) error {
|
||||||
panic("implement me")
|
return c.db.Transaction(func(tx *gorm.DB) error {
|
||||||
}
|
var conversationIDList []string
|
||||||
|
for _, conversation := range conversations {
|
||||||
|
conversationIDList = append(conversationIDList, conversation.ConversationID)
|
||||||
|
}
|
||||||
|
haveConversations, err := c.conversationDB.Find(ctx, ownerUserID, conversationIDList, tx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if len(haveConversations) > 0 {
|
||||||
|
err = c.conversationDB.Update(ctx, conversations, tx)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var haveConversationID []string
|
||||||
|
for _, conversation := range haveConversations {
|
||||||
|
haveConversationID = append(haveConversationID, conversation.ConversationID)
|
||||||
|
}
|
||||||
|
|
||||||
func NewConversationDataBase(db relation.Conversation, cache cache.ConversationCache) *ConversationDataBase {
|
NotConversationID := utils.DifferenceString(haveConversationID, conversationIDList)
|
||||||
return &ConversationDataBase{db: db, cache: cache}
|
var NotConversations []*relationTb.ConversationModel
|
||||||
|
for _, conversation := range conversations {
|
||||||
|
if !utils.IsContain(conversation.ConversationID, haveConversationID) {
|
||||||
|
NotConversations = append(NotConversations, conversation)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(NotConversations) > 0 {
|
||||||
|
err = c.conversationDB.Create(ctx, NotConversations)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
err = c.cache.DelUsersConversationIDs(ctx, NotConversationID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = c.cache.DelUserConversations(ctx, ownerUserID, haveConversationID)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
//func NewConversationController(db *gorm.DB, rdb redis.UniversalClient) ConversationInterface {
|
|
||||||
// groupController := &ConversationController{database: newGroupDatabase(db, rdb, mgoClient)}
|
|
||||||
// return groupController
|
|
||||||
//}
|
|
||||||
|
@ -15,8 +15,6 @@ import (
|
|||||||
"github.com/go-redis/redis/v8"
|
"github.com/go-redis/redis/v8"
|
||||||
"go.mongodb.org/mongo-driver/mongo"
|
"go.mongodb.org/mongo-driver/mongo"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
"math/big"
|
|
||||||
"strings"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
//type GroupInterface GroupDataBaseInterface
|
//type GroupInterface GroupDataBaseInterface
|
||||||
@ -57,8 +55,8 @@ type GroupInterface interface {
|
|||||||
|
|
||||||
var _ GroupInterface = (*GroupController)(nil)
|
var _ GroupInterface = (*GroupController)(nil)
|
||||||
|
|
||||||
func NewGroupInterface(db *gorm.DB, rdb redis.UniversalClient, mgoClient *mongo.Client) GroupInterface {
|
func NewGroupInterface(database GroupDataBaseInterface) GroupInterface {
|
||||||
return &GroupController{database: NewGroupDatabase(db, rdb, mgoClient)}
|
return &GroupController{database: database}
|
||||||
}
|
}
|
||||||
|
|
||||||
type GroupController struct {
|
type GroupController struct {
|
||||||
@ -74,7 +72,7 @@ func (g *GroupController) CreateGroup(ctx context.Context, groups []*relationTb.
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupController) TakeGroup(ctx context.Context, groupID string) (group *relationTb.GroupModel, err error) {
|
func (g *GroupController) TakeGroup(ctx context.Context, groupID string) (group *relationTb.GroupModel, err error) {
|
||||||
return g.TakeGroup(ctx, groupID)
|
return g.database.TakeGroup(ctx, groupID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupController) FindGroup(ctx context.Context, groupIDs []string) (groups []*relationTb.GroupModel, err error) {
|
func (g *GroupController) FindGroup(ctx context.Context, groupIDs []string) (groups []*relationTb.GroupModel, err error) {
|
||||||
@ -177,6 +175,53 @@ func (g *GroupController) CreateSuperGroupMember(ctx context.Context, groupID st
|
|||||||
return g.database.CreateSuperGroupMember(ctx, groupID, userIDs)
|
return g.database.CreateSuperGroupMember(ctx, groupID, userIDs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Group interface {
|
||||||
|
CreateGroup(ctx context.Context, groups []*relationTb.GroupModel, groupMembers []*relationTb.GroupMemberModel) error
|
||||||
|
TakeGroup(ctx context.Context, groupID string) (group *relationTb.GroupModel, err error)
|
||||||
|
FindGroup(ctx context.Context, groupIDs []string) (groups []*relationTb.GroupModel, err error)
|
||||||
|
SearchGroup(ctx context.Context, keyword string, pageNumber, showNumber int32) (uint32, []*relationTb.GroupModel, error)
|
||||||
|
UpdateGroup(ctx context.Context, groupID string, data map[string]any) error
|
||||||
|
DismissGroup(ctx context.Context, groupID string) error // 解散群,并删除群成员
|
||||||
|
}
|
||||||
|
|
||||||
|
type GroupMember interface {
|
||||||
|
TakeGroupMember(ctx context.Context, groupID string, userID string) (groupMember *relationTb.GroupMemberModel, err error)
|
||||||
|
TakeGroupOwner(ctx context.Context, groupID string) (*relationTb.GroupMemberModel, error)
|
||||||
|
FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) ([]*relationTb.GroupMemberModel, error)
|
||||||
|
FindGroupMemberUserID(ctx context.Context, groupID string) ([]string, error)
|
||||||
|
PageGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (uint32, []*relationTb.GroupMemberModel, error)
|
||||||
|
SearchGroupMember(ctx context.Context, keyword string, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (uint32, []*relationTb.GroupMemberModel, error)
|
||||||
|
HandlerGroupRequest(ctx context.Context, groupID string, userID string, handledMsg string, handleResult int32, member *relationTb.GroupMemberModel) error
|
||||||
|
DeleteGroupMember(ctx context.Context, groupID string, userIDs []string) error
|
||||||
|
MapGroupMemberUserID(ctx context.Context, groupIDs []string) (map[string]*relationTb.GroupSimpleUserID, error)
|
||||||
|
MapGroupMemberNum(ctx context.Context, groupIDs []string) (map[string]uint32, error)
|
||||||
|
TransferGroupOwner(ctx context.Context, groupID string, oldOwnerUserID, newOwnerUserID string, roleLevel int32) error // 转让群
|
||||||
|
UpdateGroupMember(ctx context.Context, groupID string, userID string, data map[string]any) error
|
||||||
|
UpdateGroupMembers(ctx context.Context, data []*relationTb.BatchUpdateGroupMember) error
|
||||||
|
}
|
||||||
|
|
||||||
|
type GroupRequest interface {
|
||||||
|
CreateGroupRequest(ctx context.Context, requests []*relationTb.GroupRequestModel) error
|
||||||
|
TakeGroupRequest(ctx context.Context, groupID string, userID string) (*relationTb.GroupRequestModel, error)
|
||||||
|
PageGroupRequestUser(ctx context.Context, userID string, pageNumber, showNumber int32) (uint32, []*relationTb.GroupRequestModel, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
type SuperGroup interface {
|
||||||
|
FindSuperGroup(ctx context.Context, groupIDs []string) ([]*unrelationTb.SuperGroupModel, error)
|
||||||
|
FindJoinSuperGroup(ctx context.Context, userID string) (*unrelationTb.UserToSuperGroupModel, error)
|
||||||
|
CreateSuperGroup(ctx context.Context, groupID string, initMemberIDList []string) error
|
||||||
|
DeleteSuperGroup(ctx context.Context, groupID string) error
|
||||||
|
DeleteSuperGroupMember(ctx context.Context, groupID string, userIDs []string) error
|
||||||
|
CreateSuperGroupMember(ctx context.Context, groupID string, userIDs []string) error
|
||||||
|
}
|
||||||
|
|
||||||
|
type GroupDataBase1 interface {
|
||||||
|
Group
|
||||||
|
GroupMember
|
||||||
|
GroupRequest
|
||||||
|
SuperGroup
|
||||||
|
}
|
||||||
|
|
||||||
type GroupDataBaseInterface interface {
|
type GroupDataBaseInterface interface {
|
||||||
CreateGroup(ctx context.Context, groups []*relationTb.GroupModel, groupMembers []*relationTb.GroupMemberModel) error
|
CreateGroup(ctx context.Context, groups []*relationTb.GroupModel, groupMembers []*relationTb.GroupMemberModel) error
|
||||||
TakeGroup(ctx context.Context, groupID string) (group *relationTb.GroupModel, err error)
|
TakeGroup(ctx context.Context, groupID string) (group *relationTb.GroupModel, err error)
|
||||||
@ -248,7 +293,7 @@ type GroupDataBase struct {
|
|||||||
|
|
||||||
func (g *GroupDataBase) delGroupMemberCache(ctx context.Context, groupID string, userIDs []string) error {
|
func (g *GroupDataBase) delGroupMemberCache(ctx context.Context, groupID string, userIDs []string) error {
|
||||||
for _, userID := range userIDs {
|
for _, userID := range userIDs {
|
||||||
if err := g.cache.DelJoinedGroupIDs(ctx, userID); err != nil {
|
if err := g.cache.DelJoinedGroupID(ctx, userID); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if err := g.cache.DelJoinedSuperGroupIDs(ctx, userID); err != nil {
|
if err := g.cache.DelJoinedSuperGroupIDs(ctx, userID); err != nil {
|
||||||
@ -272,25 +317,31 @@ func (g *GroupDataBase) FindGroupMemberUserID(ctx context.Context, groupID strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) CreateGroup(ctx context.Context, groups []*relationTb.GroupModel, groupMembers []*relationTb.GroupMemberModel) error {
|
func (g *GroupDataBase) CreateGroup(ctx context.Context, groups []*relationTb.GroupModel, groupMembers []*relationTb.GroupMemberModel) error {
|
||||||
if len(groups) > 0 && len(groupMembers) > 0 {
|
|
||||||
return g.db.Transaction(func(tx *gorm.DB) error {
|
return g.db.Transaction(func(tx *gorm.DB) error {
|
||||||
|
if len(groups) > 0 {
|
||||||
if err := g.groupDB.Create(ctx, groups, tx); err != nil {
|
if err := g.groupDB.Create(ctx, groups, tx); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return g.groupMemberDB.Create(ctx, groupMembers, tx)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
if len(groups) > 0 {
|
|
||||||
return g.groupDB.Create(ctx, groups)
|
|
||||||
}
|
}
|
||||||
if len(groupMembers) > 0 {
|
if len(groupMembers) > 0 {
|
||||||
return g.groupMemberDB.Create(ctx, groupMembers)
|
if err := g.groupMemberDB.Create(ctx, groupMembers, tx); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
//if err := g.cache.DelJoinedGroupIDs(ctx, utils.Slice(groupMembers, func(e *relationTb.GroupMemberModel) string {
|
||||||
|
// return e.UserID
|
||||||
|
//})); err != nil {
|
||||||
|
// return err
|
||||||
|
//}
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) TakeGroup(ctx context.Context, groupID string) (group *relationTb.GroupModel, err error) {
|
func (g *GroupDataBase) TakeGroup(ctx context.Context, groupID string) (group *relationTb.GroupModel, err error) {
|
||||||
return g.cache.GetGroupInfo(ctx, groupID)
|
//return g.cache.GetGroupInfo(ctx, groupID)
|
||||||
|
return cache.GetCache(ctx, g.rcClient, g.getGroupInfoKey(groupID), g.expireTime, func(ctx context.Context) (*relationTb.GroupModel, error) {
|
||||||
|
return g.group.Take(ctx, groupID)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) FindGroup(ctx context.Context, groupIDs []string) (groups []*relationTb.GroupModel, err error) {
|
func (g *GroupDataBase) FindGroup(ctx context.Context, groupIDs []string) (groups []*relationTb.GroupModel, err error) {
|
||||||
@ -337,12 +388,11 @@ func (g *GroupDataBase) TakeGroupMember(ctx context.Context, groupID string, use
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) TakeGroupOwner(ctx context.Context, groupID string) (*relationTb.GroupMemberModel, error) {
|
func (g *GroupDataBase) TakeGroupOwner(ctx context.Context, groupID string) (*relationTb.GroupMemberModel, error) {
|
||||||
return g.groupMemberDB.TakeOwner(ctx, groupID)
|
return g.groupMemberDB.TakeOwner(ctx, groupID) // todo cache group owner
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) ([]*relationTb.GroupMemberModel, error) {
|
func (g *GroupDataBase) FindGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32) ([]*relationTb.GroupMemberModel, error) {
|
||||||
//g.cache.GetGroupMembersInfo()
|
return g.groupMemberDB.Find(ctx, groupIDs, userIDs, roleLevels) // todo cache group find
|
||||||
return g.groupMemberDB.Find(ctx, groupIDs, userIDs, roleLevels)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) PageGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (uint32, []*relationTb.GroupMemberModel, error) {
|
func (g *GroupDataBase) PageGroupMember(ctx context.Context, groupIDs []string, userIDs []string, roleLevels []int32, pageNumber, showNumber int32) (uint32, []*relationTb.GroupMemberModel, error) {
|
||||||
@ -383,23 +433,7 @@ func (g *GroupDataBase) DeleteGroupMember(ctx context.Context, groupID string, u
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) MapGroupMemberUserID(ctx context.Context, groupIDs []string) (map[string]*relationTb.GroupSimpleUserID, error) {
|
func (g *GroupDataBase) MapGroupMemberUserID(ctx context.Context, groupIDs []string) (map[string]*relationTb.GroupSimpleUserID, error) {
|
||||||
mapGroupUserIDs, err := g.groupMemberDB.FindJoinUserID(ctx, groupIDs)
|
return g.cache.GetGroupMemberHash1(ctx, groupIDs)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
res := make(map[string]*relationTb.GroupSimpleUserID)
|
|
||||||
for _, groupID := range groupIDs {
|
|
||||||
userIDs := mapGroupUserIDs[groupID]
|
|
||||||
users := &relationTb.GroupSimpleUserID{}
|
|
||||||
if len(userIDs) > 0 {
|
|
||||||
utils.Sort(userIDs, true)
|
|
||||||
bi := big.NewInt(0)
|
|
||||||
bi.SetString(utils.Md5(strings.Join(userIDs, ";"))[0:8], 16)
|
|
||||||
users.Hash = bi.Uint64()
|
|
||||||
}
|
|
||||||
res[groupID] = users
|
|
||||||
}
|
|
||||||
return res, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (g *GroupDataBase) MapGroupMemberNum(ctx context.Context, groupIDs []string) (map[string]uint32, error) {
|
func (g *GroupDataBase) MapGroupMemberNum(ctx context.Context, groupIDs []string) (map[string]uint32, error) {
|
||||||
|
@ -24,8 +24,8 @@ type GroupMemberIDsHash struct {
|
|||||||
userIDs []string
|
userIDs []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewGroupMemberIDsLocalCache(client discoveryRegistry.SvcDiscoveryRegistry) GroupLocalCache {
|
func NewGroupMemberIDsLocalCache(client discoveryRegistry.SvcDiscoveryRegistry) *GroupLocalCache {
|
||||||
return GroupLocalCache{
|
return &GroupLocalCache{
|
||||||
cache: make(map[string]GroupMemberIDsHash, 0),
|
cache: make(map[string]GroupMemberIDsHash, 0),
|
||||||
client: client,
|
client: client,
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package relation
|
package relation
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"Open_IM/pkg/common/db/table"
|
"Open_IM/pkg/common/db/table/relation"
|
||||||
"Open_IM/pkg/common/tracelog"
|
"Open_IM/pkg/common/tracelog"
|
||||||
"Open_IM/pkg/utils"
|
"Open_IM/pkg/utils"
|
||||||
"context"
|
"context"
|
||||||
@ -10,12 +10,15 @@ import (
|
|||||||
|
|
||||||
type Conversation interface {
|
type Conversation interface {
|
||||||
TableName() string
|
TableName() string
|
||||||
Create(ctx context.Context, conversations []*table.ConversationModel) (err error)
|
Create(ctx context.Context, conversations []*relation.ConversationModel, tx ...any) (err error)
|
||||||
Delete(ctx context.Context, groupIDs []string) (err error)
|
Delete(ctx context.Context, groupIDs []string) (err error)
|
||||||
UpdateByMap(ctx context.Context, groupID string, args map[string]interface{}) (err error)
|
UpdateByMap(ctx context.Context, userIDList []string, conversationID string, args map[string]interface{}, tx ...any) (err error)
|
||||||
Update(ctx context.Context, groups []*table.ConversationModel) (err error)
|
Update(ctx context.Context, conversations []*relation.ConversationModel, tx ...any) (err error)
|
||||||
Find(ctx context.Context, groupIDs []string) (groups []*table.ConversationModel, err error)
|
Find(ctx context.Context, ownerUserID string, conversationIDs []string, tx ...any) (conversations []*relation.ConversationModel, err error)
|
||||||
Take(ctx context.Context, groupID string) (group *table.ConversationModel, err error)
|
FindUserID(ctx context.Context, userIDList []string, conversationID string, tx ...any) ([]string, error)
|
||||||
|
FindUserIDAllConversationID(ctx context.Context, userID string, tx ...any) ([]string, error)
|
||||||
|
Take(ctx context.Context, userID, conversationID string, tx ...any) (conversation *relation.ConversationModel, err error)
|
||||||
|
FindConversationID(ctx context.Context, userID string, conversationIDList []string, tx ...any) (existConversationID []string, err error)
|
||||||
}
|
}
|
||||||
type ConversationGorm struct {
|
type ConversationGorm struct {
|
||||||
DB *gorm.DB
|
DB *gorm.DB
|
||||||
@ -29,45 +32,69 @@ func NewConversationGorm(DB *gorm.DB) Conversation {
|
|||||||
return &ConversationGorm{DB: DB}
|
return &ConversationGorm{DB: DB}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConversationGorm) Create(ctx context.Context, conversations []*table.ConversationModel) (err error) {
|
func (c *ConversationGorm) Create(ctx context.Context, conversations []*relation.ConversationModel, tx ...any) (err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "conversations", conversations)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "conversations", conversations)
|
||||||
}()
|
}()
|
||||||
return utils.Wrap(getDBConn(g.DB, tx).Create(&conversations).Error, "")
|
return utils.Wrap(getDBConn(c.DB, tx).Create(&conversations).Error, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConversationGorm) Delete(ctx context.Context, groupIDs []string) (err error) {
|
func (c *ConversationGorm) Delete(ctx context.Context, groupIDs []string) (err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupIDs", groupIDs)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupIDs", groupIDs)
|
||||||
}()
|
}()
|
||||||
return utils.Wrap(getDBConn(g.DB, tx).Where("group_id in (?)", groupIDs).Delete(&table.ConversationModel{}).Error, "")
|
return utils.Wrap(getDBConn(g.DB, tx).Where("group_id in (?)", groupIDs).Delete(&relation.ConversationModel{}).Error, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConversationGorm) UpdateByMap(ctx context.Context, groupID string, args map[string]interface{}) (err error) {
|
func (c *ConversationGorm) UpdateByMap(ctx context.Context, userIDList []string, conversationID string, args map[string]interface{}, tx ...any) (err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "args", args)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userIDList", userIDList, "conversationID", conversationID)
|
||||||
}()
|
}()
|
||||||
return utils.Wrap(getDBConn(g.DB, tx).Where("group_id = ?", groupID).Model(g).Updates(args).Error, "")
|
return utils.Wrap(getDBConn(c.DB, tx).Model(&relation.ConversationModel{}).Where("owner_user_id IN (?) and conversation_id=?", userIDList, conversationID).Updates(args).Error, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConversationGorm) Update(ctx context.Context, groups []*table.ConversationModel) (err error) {
|
func (c *ConversationGorm) Update(ctx context.Context, conversations []*relation.ConversationModel, tx ...any) (err error) {
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groups", groups)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "conversations", conversations)
|
||||||
}()
|
}()
|
||||||
return utils.Wrap(getDBConn(g.DB, tx).Updates(&groups).Error, "")
|
return utils.Wrap(getDBConn(c.DB, tx).Updates(&conversations).Error, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConversationGorm) Find(ctx context.Context, groupIDs []string) (groups []*table.ConversationModel, err error) {
|
func (c *ConversationGorm) Find(ctx context.Context, ownerUserID string, conversationIDs []string, tx ...any) (conversations []*relation.ConversationModel, err error) {
|
||||||
|
var newConversations []relation.ConversationModel
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupIDs", groupIDs, "groups", groups)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "ownerUserID", ownerUserID, "groups", conversations)
|
||||||
}()
|
}()
|
||||||
return groups, utils.Wrap(getDBConn(g.DB, tx).Where("group_id in (?)", groupIDs).Find(&groups).Error, "")
|
err = utils.Wrap(getDBConn(c.DB, tx).Where("owner_user_id=? and conversation_id IN (?)", ownerUserID, conversationIDs).Find(&newConversations).Error, "")
|
||||||
|
for _, v := range newConversations {
|
||||||
|
v1 := v
|
||||||
|
conversations = append(conversations, &v1)
|
||||||
|
}
|
||||||
|
return conversations, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *ConversationGorm) Take(ctx context.Context, groupID string) (group *table.ConversationModel, err error) {
|
func (c *ConversationGorm) Take(ctx context.Context, userID, conversationID string, tx ...any) (conversation *relation.ConversationModel, err error) {
|
||||||
group = &Group{}
|
cc := &relation.ConversationModel{}
|
||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "group", *group)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userID, "conversation", *conversation)
|
||||||
}()
|
}()
|
||||||
return group, utils.Wrap(getDBConn(g.DB, tx).Where("group_id = ?", groupID).Take(group).Error, "")
|
return cc, utils.Wrap(getDBConn(c.DB, tx).Where("conversation_id = ? And owner_user_id = ?", conversationID, userID).Take(cc).Error, "")
|
||||||
|
}
|
||||||
|
func (c *ConversationGorm) FindUserID(ctx context.Context, userIDList []string, conversationID string, tx ...any) (existUserID []string, err error) {
|
||||||
|
defer func() {
|
||||||
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userIDList, "existUserID", existUserID)
|
||||||
|
}()
|
||||||
|
return existUserID, utils.Wrap(getDBConn(c.DB, tx).Where(" owner_user_id IN (?) and conversation_id=?", userIDList, conversationID).Pluck("owner_user_id", &existUserID).Error, "")
|
||||||
|
}
|
||||||
|
func (c *ConversationGorm) FindConversationID(ctx context.Context, userID string, conversationIDList []string, tx ...any) (existConversationID []string, err error) {
|
||||||
|
defer func() {
|
||||||
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userID, "existConversationIDList", existConversationID)
|
||||||
|
}()
|
||||||
|
return existConversationID, utils.Wrap(getDBConn(c.DB, tx).Where(" conversation_id IN (?) and owner_user_id=?", conversationIDList, userID).Pluck("conversation_id", &existConversationID).Error, "")
|
||||||
|
}
|
||||||
|
func (c *ConversationGorm) FindUserIDAllConversationID(ctx context.Context, userID string, tx ...any) (conversationIDList []string, err error) {
|
||||||
|
defer func() {
|
||||||
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "userID", userID, "conversationIDList", conversationIDList)
|
||||||
|
}()
|
||||||
|
return conversationIDList, utils.Wrap(getDBConn(c.DB, tx).Model(&relation.ConversationModel{}).Where("owner_user_id=?", userID).Pluck("conversation_id", &conversationIDList).Error, "")
|
||||||
}
|
}
|
||||||
|
@ -130,5 +130,5 @@ func (g *GroupMemberGorm) FindMemberUserID(ctx context.Context, groupID string,
|
|||||||
defer func() {
|
defer func() {
|
||||||
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "userIDs", userIDs)
|
tracelog.SetCtxDebug(ctx, utils.GetFuncName(1), err, "groupID", groupID, "userIDs", userIDs)
|
||||||
}()
|
}()
|
||||||
return userIDs, utils.Wrap(getDBConn(g.DB, tx).Model(&relation.GroupMemberModel{}).Where("group_id = ?", groupID).Pluck("user_id", &userIDs), "")
|
return userIDs, utils.Wrap(getDBConn(g.DB, tx).Model(&relation.GroupMemberModel{}).Where("group_id = ?", groupID).Pluck("user_id", &userIDs).Error, "")
|
||||||
}
|
}
|
||||||
|
148
pkg/common/db/relation/mysql_init.go
Normal file
148
pkg/common/db/relation/mysql_init.go
Normal file
@ -0,0 +1,148 @@
|
|||||||
|
package relation
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Open_IM/pkg/common/config"
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"gorm.io/driver/mysql"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
"gorm.io/gorm/logger"
|
||||||
|
)
|
||||||
|
|
||||||
|
func NewGormDB() (*gorm.DB, error) {
|
||||||
|
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=true&loc=Local",
|
||||||
|
config.Config.Mysql.DBUserName, config.Config.Mysql.DBPassword, config.Config.Mysql.DBAddress[0], "mysql")
|
||||||
|
db, err := gorm.Open(mysql.Open(dsn), nil)
|
||||||
|
if err != nil {
|
||||||
|
time.Sleep(time.Duration(30) * time.Second)
|
||||||
|
db, err = gorm.Open(mysql.Open(dsn), nil)
|
||||||
|
if err != nil {
|
||||||
|
panic(err.Error() + " open failed " + dsn)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sqlDB, err := db.DB()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer sqlDB.Close()
|
||||||
|
sql := fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s default charset utf8 COLLATE utf8_general_ci;", config.Config.Mysql.DBDatabaseName)
|
||||||
|
err = db.Exec(sql).Error
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("init db %w", err)
|
||||||
|
}
|
||||||
|
dsn = fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=true&loc=Local",
|
||||||
|
config.Config.Mysql.DBUserName, config.Config.Mysql.DBPassword, config.Config.Mysql.DBAddress[0], config.Config.Mysql.DBDatabaseName)
|
||||||
|
newLogger := logger.New(
|
||||||
|
Writer{},
|
||||||
|
logger.Config{
|
||||||
|
SlowThreshold: time.Duration(config.Config.Mysql.SlowThreshold) * time.Millisecond, // Slow SQL threshold
|
||||||
|
LogLevel: logger.LogLevel(config.Config.Mysql.LogLevel), // Log level
|
||||||
|
IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger
|
||||||
|
Colorful: true, // Disable color
|
||||||
|
},
|
||||||
|
)
|
||||||
|
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
|
||||||
|
Logger: newLogger,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
sqlDB, err = db.DB()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
sqlDB.SetConnMaxLifetime(time.Second * time.Duration(config.Config.Mysql.DBMaxLifeTime))
|
||||||
|
sqlDB.SetMaxOpenConns(config.Config.Mysql.DBMaxOpenConns)
|
||||||
|
sqlDB.SetMaxIdleConns(config.Config.Mysql.DBMaxIdleConns)
|
||||||
|
return db, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type Mysql struct {
|
||||||
|
gormConn *gorm.DB
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Mysql) GormConn() *gorm.DB {
|
||||||
|
return m.gormConn
|
||||||
|
}
|
||||||
|
|
||||||
|
//func (m *Mysql) SetGormConn(gormConn *gorm.DB) {
|
||||||
|
// m.gormConn = gormConn
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//func (m *Mysql) InitConn() *Mysql {
|
||||||
|
// dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=true&loc=Local",
|
||||||
|
// config.Config.Mysql.DBUserName, config.Config.Mysql.DBPassword, config.Config.Mysql.DBAddress[0], "mysql")
|
||||||
|
// var db *gorm.DB
|
||||||
|
// db, err := gorm.Open(mysql.Open(dsn), nil)
|
||||||
|
// if err != nil {
|
||||||
|
// time.Sleep(time.Duration(30) * time.Second)
|
||||||
|
// db, err = gorm.Open(mysql.Open(dsn), nil)
|
||||||
|
// if err != nil {
|
||||||
|
// panic(err.Error() + " open failed " + dsn)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// sql := fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s default charset utf8 COLLATE utf8_general_ci;", config.Config.Mysql.DBDatabaseName)
|
||||||
|
// err = db.Exec(sql).Error
|
||||||
|
// if err != nil {
|
||||||
|
// panic(err.Error() + " Exec failed:" + sql)
|
||||||
|
// }
|
||||||
|
// dsn = fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=true&loc=Local",
|
||||||
|
// config.Config.Mysql.DBUserName, config.Config.Mysql.DBPassword, config.Config.Mysql.DBAddress[0], config.Config.Mysql.DBDatabaseName)
|
||||||
|
// newLogger := logger.New(
|
||||||
|
// Writer{},
|
||||||
|
// logger.Config{
|
||||||
|
// SlowThreshold: time.Duration(config.Config.Mysql.SlowThreshold) * time.Millisecond, // Slow SQL threshold
|
||||||
|
// LogLevel: logger.LogLevel(config.Config.Mysql.LogLevel), // Log level
|
||||||
|
// IgnoreRecordNotFoundError: true, // Ignore ErrRecordNotFound error for logger
|
||||||
|
// Colorful: true, // Disable color
|
||||||
|
// },
|
||||||
|
// )
|
||||||
|
// db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
|
||||||
|
// Logger: newLogger,
|
||||||
|
// })
|
||||||
|
// if err != nil {
|
||||||
|
// panic(err.Error() + " Open failed " + dsn)
|
||||||
|
// }
|
||||||
|
// sqlDB, err := db.DB()
|
||||||
|
// if err != nil {
|
||||||
|
// panic(err.Error() + " DB.DB() failed ")
|
||||||
|
// }
|
||||||
|
// sqlDB.SetConnMaxLifetime(time.Second * time.Duration(config.Config.Mysql.DBMaxLifeTime))
|
||||||
|
// sqlDB.SetMaxOpenConns(config.Config.Mysql.DBMaxOpenConns)
|
||||||
|
// sqlDB.SetMaxIdleConns(config.Config.Mysql.DBMaxIdleConns)
|
||||||
|
// if db == nil {
|
||||||
|
// panic("db is nil")
|
||||||
|
// }
|
||||||
|
// m.SetGormConn(db)
|
||||||
|
// return m
|
||||||
|
//}
|
||||||
|
|
||||||
|
//models := []interface{}{&Friend{}, &FriendRequest{}, &Group{}, &GroupMember{}, &GroupRequest{},
|
||||||
|
// &User{}, &Black{}, &ChatLog{}, &Conversation{}, &AppVersion{}}
|
||||||
|
|
||||||
|
//func (m *Mysql) AutoMigrateModel(model interface{}) error {
|
||||||
|
// err := m.gormConn.AutoMigrate(model)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// m.gormConn.Set("gorm:table_options", "CHARSET=utf8")
|
||||||
|
// m.gormConn.Set("gorm:table_options", "collation=utf8_unicode_ci")
|
||||||
|
// _ = m.gormConn.Migrator().CreateTable(model)
|
||||||
|
// return nil
|
||||||
|
//}
|
||||||
|
|
||||||
|
type Writer struct{}
|
||||||
|
|
||||||
|
func (w Writer) Printf(format string, args ...interface{}) {
|
||||||
|
fmt.Printf(format, args...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getDBConn(db *gorm.DB, tx []any) *gorm.DB {
|
||||||
|
if len(tx) > 0 {
|
||||||
|
if txDB, ok := tx[0].(*gorm.DB); ok {
|
||||||
|
return txDB
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return db
|
||||||
|
}
|
@ -13,6 +13,47 @@ import (
|
|||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
//func NewMongo() *Mongo {
|
||||||
|
// mgo := &Mongo{}
|
||||||
|
// mgo.InitMongo()
|
||||||
|
// return mgo
|
||||||
|
//}
|
||||||
|
|
||||||
|
func NewMongo() (*Mongo, error) {
|
||||||
|
uri := "mongodb://sample.host:27017/?maxPoolSize=20&w=majority"
|
||||||
|
if config.Config.Mongo.DBUri != "" {
|
||||||
|
// example: mongodb://$user:$password@mongo1.mongo:27017,mongo2.mongo:27017,mongo3.mongo:27017/$DBDatabase/?replicaSet=rs0&readPreference=secondary&authSource=admin&maxPoolSize=$DBMaxPoolSize
|
||||||
|
uri = config.Config.Mongo.DBUri
|
||||||
|
} else {
|
||||||
|
//mongodb://mongodb1.example.com:27317,mongodb2.example.com:27017/?replicaSet=mySet&authSource=authDB
|
||||||
|
mongodbHosts := ""
|
||||||
|
for i, v := range config.Config.Mongo.DBAddress {
|
||||||
|
if i == len(config.Config.Mongo.DBAddress)-1 {
|
||||||
|
mongodbHosts += v
|
||||||
|
} else {
|
||||||
|
mongodbHosts += v + ","
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if config.Config.Mongo.DBPassword != "" && config.Config.Mongo.DBUserName != "" {
|
||||||
|
uri = fmt.Sprintf("mongodb://%s:%s@%s/%s?maxPoolSize=%d&authSource=admin",
|
||||||
|
config.Config.Mongo.DBUserName, config.Config.Mongo.DBPassword, mongodbHosts,
|
||||||
|
config.Config.Mongo.DBDatabase, config.Config.Mongo.DBMaxPoolSize)
|
||||||
|
} else {
|
||||||
|
uri = fmt.Sprintf("mongodb://%s/%s/?maxPoolSize=%d&authSource=admin",
|
||||||
|
mongodbHosts, config.Config.Mongo.DBDatabase,
|
||||||
|
config.Config.Mongo.DBMaxPoolSize)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fmt.Println("mongo:", uri)
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second*60)
|
||||||
|
defer cancel()
|
||||||
|
mongoClient, err := mongo.Connect(ctx, options.Client().ApplyURI(uri))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return &Mongo{db: mongoClient}, nil
|
||||||
|
}
|
||||||
|
|
||||||
type Mongo struct {
|
type Mongo struct {
|
||||||
db *mongo.Client
|
db *mongo.Client
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
package http
|
package http
|
||||||
|
|
||||||
import (
|
import (
|
||||||
cbApi "Open_IM/pkg/callbackstruct"
|
cbapi "Open_IM/pkg/callbackstruct"
|
||||||
"Open_IM/pkg/common/config"
|
"Open_IM/pkg/common/config"
|
||||||
"Open_IM/pkg/common/constant"
|
"Open_IM/pkg/common/constant"
|
||||||
"bytes"
|
"bytes"
|
||||||
@ -59,7 +59,7 @@ func Post(url string, data interface{}, timeOutSecond int) (content []byte, err
|
|||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func CallBackPostReturn(url, callbackCommand string, input interface{}, output cbApi.CallbackResp, callbackConfig config.CallBackConfig) error {
|
func callBackPostReturn(url, callbackCommand string, input interface{}, output cbapi.CallbackResp, callbackConfig config.CallBackConfig) error {
|
||||||
v := urlLib.Values{}
|
v := urlLib.Values{}
|
||||||
v.Set("callbackCommand", callbackCommand)
|
v.Set("callbackCommand", callbackCommand)
|
||||||
url = url + "?" + v.Encode()
|
url = url + "?" + v.Encode()
|
||||||
@ -78,3 +78,7 @@ func CallBackPostReturn(url, callbackCommand string, input interface{}, output c
|
|||||||
}
|
}
|
||||||
return output.Parse()
|
return output.Parse()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func CallBackPostReturn(url string, req cbapi.CallbackReq, resp cbapi.CallbackResp, callbackConfig config.CallBackConfig) error {
|
||||||
|
return callBackPostReturn(url, req.GetCallbackCommand(), req, resp, callbackConfig)
|
||||||
|
}
|
||||||
|
@ -87,3 +87,6 @@ func CheckAdmin(ctx context.Context) error {
|
|||||||
func ParseRedisInterfaceToken(redisToken interface{}) (*Claims, error) {
|
func ParseRedisInterfaceToken(redisToken interface{}) (*Claims, error) {
|
||||||
return GetClaimFromToken(string(redisToken.([]uint8)))
|
return GetClaimFromToken(string(redisToken.([]uint8)))
|
||||||
}
|
}
|
||||||
|
func IsManagerUserID(opUserID string) bool {
|
||||||
|
return utils.IsContain(opUserID, config.Config.Manager.AppManagerUid)
|
||||||
|
}
|
||||||
|
@ -39,7 +39,7 @@ func (m *CreateGroupReq) Reset() { *m = CreateGroupReq{} }
|
|||||||
func (m *CreateGroupReq) String() string { return proto.CompactTextString(m) }
|
func (m *CreateGroupReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*CreateGroupReq) ProtoMessage() {}
|
func (*CreateGroupReq) ProtoMessage() {}
|
||||||
func (*CreateGroupReq) Descriptor() ([]byte, []int) {
|
func (*CreateGroupReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{0}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{0}
|
||||||
}
|
}
|
||||||
func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error {
|
func (m *CreateGroupReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b)
|
return xxx_messageInfo_CreateGroupReq.Unmarshal(m, b)
|
||||||
@ -98,7 +98,7 @@ func (m *CreateGroupResp) Reset() { *m = CreateGroupResp{} }
|
|||||||
func (m *CreateGroupResp) String() string { return proto.CompactTextString(m) }
|
func (m *CreateGroupResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*CreateGroupResp) ProtoMessage() {}
|
func (*CreateGroupResp) ProtoMessage() {}
|
||||||
func (*CreateGroupResp) Descriptor() ([]byte, []int) {
|
func (*CreateGroupResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{1}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{1}
|
||||||
}
|
}
|
||||||
func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error {
|
func (m *CreateGroupResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b)
|
return xxx_messageInfo_CreateGroupResp.Unmarshal(m, b)
|
||||||
@ -136,7 +136,7 @@ func (m *GetGroupsInfoReq) Reset() { *m = GetGroupsInfoReq{} }
|
|||||||
func (m *GetGroupsInfoReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupsInfoReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupsInfoReq) ProtoMessage() {}
|
func (*GetGroupsInfoReq) ProtoMessage() {}
|
||||||
func (*GetGroupsInfoReq) Descriptor() ([]byte, []int) {
|
func (*GetGroupsInfoReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{2}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{2}
|
||||||
}
|
}
|
||||||
func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupsInfoReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupsInfoReq.Unmarshal(m, b)
|
||||||
@ -174,7 +174,7 @@ func (m *GetGroupsInfoResp) Reset() { *m = GetGroupsInfoResp{} }
|
|||||||
func (m *GetGroupsInfoResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupsInfoResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupsInfoResp) ProtoMessage() {}
|
func (*GetGroupsInfoResp) ProtoMessage() {}
|
||||||
func (*GetGroupsInfoResp) Descriptor() ([]byte, []int) {
|
func (*GetGroupsInfoResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{3}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{3}
|
||||||
}
|
}
|
||||||
func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupsInfoResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupsInfoResp.Unmarshal(m, b)
|
||||||
@ -212,7 +212,7 @@ func (m *SetGroupInfoReq) Reset() { *m = SetGroupInfoReq{} }
|
|||||||
func (m *SetGroupInfoReq) String() string { return proto.CompactTextString(m) }
|
func (m *SetGroupInfoReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SetGroupInfoReq) ProtoMessage() {}
|
func (*SetGroupInfoReq) ProtoMessage() {}
|
||||||
func (*SetGroupInfoReq) Descriptor() ([]byte, []int) {
|
func (*SetGroupInfoReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{4}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{4}
|
||||||
}
|
}
|
||||||
func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error {
|
func (m *SetGroupInfoReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b)
|
return xxx_messageInfo_SetGroupInfoReq.Unmarshal(m, b)
|
||||||
@ -249,7 +249,7 @@ func (m *SetGroupInfoResp) Reset() { *m = SetGroupInfoResp{} }
|
|||||||
func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) }
|
func (m *SetGroupInfoResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SetGroupInfoResp) ProtoMessage() {}
|
func (*SetGroupInfoResp) ProtoMessage() {}
|
||||||
func (*SetGroupInfoResp) Descriptor() ([]byte, []int) {
|
func (*SetGroupInfoResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{5}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{5}
|
||||||
}
|
}
|
||||||
func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error {
|
func (m *SetGroupInfoResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b)
|
return xxx_messageInfo_SetGroupInfoResp.Unmarshal(m, b)
|
||||||
@ -281,7 +281,7 @@ func (m *GetGroupApplicationListReq) Reset() { *m = GetGroupApplicationL
|
|||||||
func (m *GetGroupApplicationListReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupApplicationListReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupApplicationListReq) ProtoMessage() {}
|
func (*GetGroupApplicationListReq) ProtoMessage() {}
|
||||||
func (*GetGroupApplicationListReq) Descriptor() ([]byte, []int) {
|
func (*GetGroupApplicationListReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{6}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{6}
|
||||||
}
|
}
|
||||||
func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupApplicationListReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupApplicationListReq.Unmarshal(m, b)
|
||||||
@ -327,7 +327,7 @@ func (m *GetGroupApplicationListResp) Reset() { *m = GetGroupApplication
|
|||||||
func (m *GetGroupApplicationListResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupApplicationListResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupApplicationListResp) ProtoMessage() {}
|
func (*GetGroupApplicationListResp) ProtoMessage() {}
|
||||||
func (*GetGroupApplicationListResp) Descriptor() ([]byte, []int) {
|
func (*GetGroupApplicationListResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{7}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{7}
|
||||||
}
|
}
|
||||||
func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupApplicationListResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupApplicationListResp.Unmarshal(m, b)
|
||||||
@ -373,7 +373,7 @@ func (m *GetUserReqApplicationListReq) Reset() { *m = GetUserReqApplicat
|
|||||||
func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetUserReqApplicationListReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetUserReqApplicationListReq) ProtoMessage() {}
|
func (*GetUserReqApplicationListReq) ProtoMessage() {}
|
||||||
func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) {
|
func (*GetUserReqApplicationListReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{8}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{8}
|
||||||
}
|
}
|
||||||
func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetUserReqApplicationListReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetUserReqApplicationListReq.Unmarshal(m, b)
|
||||||
@ -419,7 +419,7 @@ func (m *GetUserReqApplicationListResp) Reset() { *m = GetUserReqApplica
|
|||||||
func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetUserReqApplicationListResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetUserReqApplicationListResp) ProtoMessage() {}
|
func (*GetUserReqApplicationListResp) ProtoMessage() {}
|
||||||
func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) {
|
func (*GetUserReqApplicationListResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{9}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{9}
|
||||||
}
|
}
|
||||||
func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetUserReqApplicationListResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetUserReqApplicationListResp.Unmarshal(m, b)
|
||||||
@ -466,7 +466,7 @@ func (m *TransferGroupOwnerReq) Reset() { *m = TransferGroupOwnerReq{} }
|
|||||||
func (m *TransferGroupOwnerReq) String() string { return proto.CompactTextString(m) }
|
func (m *TransferGroupOwnerReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*TransferGroupOwnerReq) ProtoMessage() {}
|
func (*TransferGroupOwnerReq) ProtoMessage() {}
|
||||||
func (*TransferGroupOwnerReq) Descriptor() ([]byte, []int) {
|
func (*TransferGroupOwnerReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{10}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{10}
|
||||||
}
|
}
|
||||||
func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error {
|
func (m *TransferGroupOwnerReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b)
|
return xxx_messageInfo_TransferGroupOwnerReq.Unmarshal(m, b)
|
||||||
@ -517,7 +517,7 @@ func (m *TransferGroupOwnerResp) Reset() { *m = TransferGroupOwnerResp{}
|
|||||||
func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) }
|
func (m *TransferGroupOwnerResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*TransferGroupOwnerResp) ProtoMessage() {}
|
func (*TransferGroupOwnerResp) ProtoMessage() {}
|
||||||
func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) {
|
func (*TransferGroupOwnerResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{11}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{11}
|
||||||
}
|
}
|
||||||
func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error {
|
func (m *TransferGroupOwnerResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b)
|
return xxx_messageInfo_TransferGroupOwnerResp.Unmarshal(m, b)
|
||||||
@ -551,7 +551,7 @@ func (m *JoinGroupReq) Reset() { *m = JoinGroupReq{} }
|
|||||||
func (m *JoinGroupReq) String() string { return proto.CompactTextString(m) }
|
func (m *JoinGroupReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*JoinGroupReq) ProtoMessage() {}
|
func (*JoinGroupReq) ProtoMessage() {}
|
||||||
func (*JoinGroupReq) Descriptor() ([]byte, []int) {
|
func (*JoinGroupReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{12}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{12}
|
||||||
}
|
}
|
||||||
func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error {
|
func (m *JoinGroupReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b)
|
return xxx_messageInfo_JoinGroupReq.Unmarshal(m, b)
|
||||||
@ -609,7 +609,7 @@ func (m *JoinGroupResp) Reset() { *m = JoinGroupResp{} }
|
|||||||
func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) }
|
func (m *JoinGroupResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*JoinGroupResp) ProtoMessage() {}
|
func (*JoinGroupResp) ProtoMessage() {}
|
||||||
func (*JoinGroupResp) Descriptor() ([]byte, []int) {
|
func (*JoinGroupResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{13}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{13}
|
||||||
}
|
}
|
||||||
func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error {
|
func (m *JoinGroupResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b)
|
return xxx_messageInfo_JoinGroupResp.Unmarshal(m, b)
|
||||||
@ -643,7 +643,7 @@ func (m *GroupApplicationResponseReq) Reset() { *m = GroupApplicationRes
|
|||||||
func (m *GroupApplicationResponseReq) String() string { return proto.CompactTextString(m) }
|
func (m *GroupApplicationResponseReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GroupApplicationResponseReq) ProtoMessage() {}
|
func (*GroupApplicationResponseReq) ProtoMessage() {}
|
||||||
func (*GroupApplicationResponseReq) Descriptor() ([]byte, []int) {
|
func (*GroupApplicationResponseReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{14}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{14}
|
||||||
}
|
}
|
||||||
func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error {
|
func (m *GroupApplicationResponseReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b)
|
return xxx_messageInfo_GroupApplicationResponseReq.Unmarshal(m, b)
|
||||||
@ -701,7 +701,7 @@ func (m *GroupApplicationResponseResp) Reset() { *m = GroupApplicationRe
|
|||||||
func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) }
|
func (m *GroupApplicationResponseResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GroupApplicationResponseResp) ProtoMessage() {}
|
func (*GroupApplicationResponseResp) ProtoMessage() {}
|
||||||
func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) {
|
func (*GroupApplicationResponseResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{15}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{15}
|
||||||
}
|
}
|
||||||
func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error {
|
func (m *GroupApplicationResponseResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b)
|
return xxx_messageInfo_GroupApplicationResponseResp.Unmarshal(m, b)
|
||||||
@ -732,7 +732,7 @@ func (m *QuitGroupReq) Reset() { *m = QuitGroupReq{} }
|
|||||||
func (m *QuitGroupReq) String() string { return proto.CompactTextString(m) }
|
func (m *QuitGroupReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*QuitGroupReq) ProtoMessage() {}
|
func (*QuitGroupReq) ProtoMessage() {}
|
||||||
func (*QuitGroupReq) Descriptor() ([]byte, []int) {
|
func (*QuitGroupReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{16}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{16}
|
||||||
}
|
}
|
||||||
func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error {
|
func (m *QuitGroupReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b)
|
return xxx_messageInfo_QuitGroupReq.Unmarshal(m, b)
|
||||||
@ -769,7 +769,7 @@ func (m *QuitGroupResp) Reset() { *m = QuitGroupResp{} }
|
|||||||
func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) }
|
func (m *QuitGroupResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*QuitGroupResp) ProtoMessage() {}
|
func (*QuitGroupResp) ProtoMessage() {}
|
||||||
func (*QuitGroupResp) Descriptor() ([]byte, []int) {
|
func (*QuitGroupResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{17}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{17}
|
||||||
}
|
}
|
||||||
func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error {
|
func (m *QuitGroupResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b)
|
return xxx_messageInfo_QuitGroupResp.Unmarshal(m, b)
|
||||||
@ -802,7 +802,7 @@ func (m *GetGroupMemberListReq) Reset() { *m = GetGroupMemberListReq{} }
|
|||||||
func (m *GetGroupMemberListReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupMemberListReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupMemberListReq) ProtoMessage() {}
|
func (*GetGroupMemberListReq) ProtoMessage() {}
|
||||||
func (*GetGroupMemberListReq) Descriptor() ([]byte, []int) {
|
func (*GetGroupMemberListReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{18}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{18}
|
||||||
}
|
}
|
||||||
func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupMemberListReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupMemberListReq.Unmarshal(m, b)
|
||||||
@ -855,7 +855,7 @@ func (m *GetGroupMemberListResp) Reset() { *m = GetGroupMemberListResp{}
|
|||||||
func (m *GetGroupMemberListResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupMemberListResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupMemberListResp) ProtoMessage() {}
|
func (*GetGroupMemberListResp) ProtoMessage() {}
|
||||||
func (*GetGroupMemberListResp) Descriptor() ([]byte, []int) {
|
func (*GetGroupMemberListResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{19}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{19}
|
||||||
}
|
}
|
||||||
func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupMemberListResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupMemberListResp.Unmarshal(m, b)
|
||||||
@ -901,7 +901,7 @@ func (m *GetGroupMembersInfoReq) Reset() { *m = GetGroupMembersInfoReq{}
|
|||||||
func (m *GetGroupMembersInfoReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupMembersInfoReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupMembersInfoReq) ProtoMessage() {}
|
func (*GetGroupMembersInfoReq) ProtoMessage() {}
|
||||||
func (*GetGroupMembersInfoReq) Descriptor() ([]byte, []int) {
|
func (*GetGroupMembersInfoReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{20}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{20}
|
||||||
}
|
}
|
||||||
func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupMembersInfoReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupMembersInfoReq.Unmarshal(m, b)
|
||||||
@ -946,7 +946,7 @@ func (m *GetGroupMembersInfoResp) Reset() { *m = GetGroupMembersInfoResp
|
|||||||
func (m *GetGroupMembersInfoResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupMembersInfoResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupMembersInfoResp) ProtoMessage() {}
|
func (*GetGroupMembersInfoResp) ProtoMessage() {}
|
||||||
func (*GetGroupMembersInfoResp) Descriptor() ([]byte, []int) {
|
func (*GetGroupMembersInfoResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{21}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{21}
|
||||||
}
|
}
|
||||||
func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupMembersInfoResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupMembersInfoResp.Unmarshal(m, b)
|
||||||
@ -986,7 +986,7 @@ func (m *KickGroupMemberReq) Reset() { *m = KickGroupMemberReq{} }
|
|||||||
func (m *KickGroupMemberReq) String() string { return proto.CompactTextString(m) }
|
func (m *KickGroupMemberReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*KickGroupMemberReq) ProtoMessage() {}
|
func (*KickGroupMemberReq) ProtoMessage() {}
|
||||||
func (*KickGroupMemberReq) Descriptor() ([]byte, []int) {
|
func (*KickGroupMemberReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{22}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{22}
|
||||||
}
|
}
|
||||||
func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error {
|
func (m *KickGroupMemberReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b)
|
return xxx_messageInfo_KickGroupMemberReq.Unmarshal(m, b)
|
||||||
@ -1037,7 +1037,7 @@ func (m *KickGroupMemberResp) Reset() { *m = KickGroupMemberResp{} }
|
|||||||
func (m *KickGroupMemberResp) String() string { return proto.CompactTextString(m) }
|
func (m *KickGroupMemberResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*KickGroupMemberResp) ProtoMessage() {}
|
func (*KickGroupMemberResp) ProtoMessage() {}
|
||||||
func (*KickGroupMemberResp) Descriptor() ([]byte, []int) {
|
func (*KickGroupMemberResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{23}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{23}
|
||||||
}
|
}
|
||||||
func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error {
|
func (m *KickGroupMemberResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b)
|
return xxx_messageInfo_KickGroupMemberResp.Unmarshal(m, b)
|
||||||
@ -1069,7 +1069,7 @@ func (m *GetJoinedGroupListReq) Reset() { *m = GetJoinedGroupListReq{} }
|
|||||||
func (m *GetJoinedGroupListReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetJoinedGroupListReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetJoinedGroupListReq) ProtoMessage() {}
|
func (*GetJoinedGroupListReq) ProtoMessage() {}
|
||||||
func (*GetJoinedGroupListReq) Descriptor() ([]byte, []int) {
|
func (*GetJoinedGroupListReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{24}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{24}
|
||||||
}
|
}
|
||||||
func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetJoinedGroupListReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetJoinedGroupListReq.Unmarshal(m, b)
|
||||||
@ -1115,7 +1115,7 @@ func (m *GetJoinedGroupListResp) Reset() { *m = GetJoinedGroupListResp{}
|
|||||||
func (m *GetJoinedGroupListResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetJoinedGroupListResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetJoinedGroupListResp) ProtoMessage() {}
|
func (*GetJoinedGroupListResp) ProtoMessage() {}
|
||||||
func (*GetJoinedGroupListResp) Descriptor() ([]byte, []int) {
|
func (*GetJoinedGroupListResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{25}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{25}
|
||||||
}
|
}
|
||||||
func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetJoinedGroupListResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetJoinedGroupListResp.Unmarshal(m, b)
|
||||||
@ -1162,7 +1162,7 @@ func (m *InviteUserToGroupReq) Reset() { *m = InviteUserToGroupReq{} }
|
|||||||
func (m *InviteUserToGroupReq) String() string { return proto.CompactTextString(m) }
|
func (m *InviteUserToGroupReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*InviteUserToGroupReq) ProtoMessage() {}
|
func (*InviteUserToGroupReq) ProtoMessage() {}
|
||||||
func (*InviteUserToGroupReq) Descriptor() ([]byte, []int) {
|
func (*InviteUserToGroupReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{26}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{26}
|
||||||
}
|
}
|
||||||
func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error {
|
func (m *InviteUserToGroupReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b)
|
return xxx_messageInfo_InviteUserToGroupReq.Unmarshal(m, b)
|
||||||
@ -1213,7 +1213,7 @@ func (m *InviteUserToGroupResp) Reset() { *m = InviteUserToGroupResp{} }
|
|||||||
func (m *InviteUserToGroupResp) String() string { return proto.CompactTextString(m) }
|
func (m *InviteUserToGroupResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*InviteUserToGroupResp) ProtoMessage() {}
|
func (*InviteUserToGroupResp) ProtoMessage() {}
|
||||||
func (*InviteUserToGroupResp) Descriptor() ([]byte, []int) {
|
func (*InviteUserToGroupResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{27}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{27}
|
||||||
}
|
}
|
||||||
func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error {
|
func (m *InviteUserToGroupResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b)
|
return xxx_messageInfo_InviteUserToGroupResp.Unmarshal(m, b)
|
||||||
@ -1245,7 +1245,7 @@ func (m *GetGroupAllMemberReq) Reset() { *m = GetGroupAllMemberReq{} }
|
|||||||
func (m *GetGroupAllMemberReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupAllMemberReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupAllMemberReq) ProtoMessage() {}
|
func (*GetGroupAllMemberReq) ProtoMessage() {}
|
||||||
func (*GetGroupAllMemberReq) Descriptor() ([]byte, []int) {
|
func (*GetGroupAllMemberReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{28}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{28}
|
||||||
}
|
}
|
||||||
func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupAllMemberReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupAllMemberReq.Unmarshal(m, b)
|
||||||
@ -1290,7 +1290,7 @@ func (m *GetGroupAllMemberResp) Reset() { *m = GetGroupAllMemberResp{} }
|
|||||||
func (m *GetGroupAllMemberResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupAllMemberResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupAllMemberResp) ProtoMessage() {}
|
func (*GetGroupAllMemberResp) ProtoMessage() {}
|
||||||
func (*GetGroupAllMemberResp) Descriptor() ([]byte, []int) {
|
func (*GetGroupAllMemberResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{29}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{29}
|
||||||
}
|
}
|
||||||
func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupAllMemberResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupAllMemberResp.Unmarshal(m, b)
|
||||||
@ -1330,7 +1330,7 @@ func (m *CMSGroup) Reset() { *m = CMSGroup{} }
|
|||||||
func (m *CMSGroup) String() string { return proto.CompactTextString(m) }
|
func (m *CMSGroup) String() string { return proto.CompactTextString(m) }
|
||||||
func (*CMSGroup) ProtoMessage() {}
|
func (*CMSGroup) ProtoMessage() {}
|
||||||
func (*CMSGroup) Descriptor() ([]byte, []int) {
|
func (*CMSGroup) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{30}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{30}
|
||||||
}
|
}
|
||||||
func (m *CMSGroup) XXX_Unmarshal(b []byte) error {
|
func (m *CMSGroup) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_CMSGroup.Unmarshal(m, b)
|
return xxx_messageInfo_CMSGroup.Unmarshal(m, b)
|
||||||
@ -1384,7 +1384,7 @@ func (m *GetGroupsReq) Reset() { *m = GetGroupsReq{} }
|
|||||||
func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupsReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupsReq) ProtoMessage() {}
|
func (*GetGroupsReq) ProtoMessage() {}
|
||||||
func (*GetGroupsReq) Descriptor() ([]byte, []int) {
|
func (*GetGroupsReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{31}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{31}
|
||||||
}
|
}
|
||||||
func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupsReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupsReq.Unmarshal(m, b)
|
||||||
@ -1437,7 +1437,7 @@ func (m *GetGroupsResp) Reset() { *m = GetGroupsResp{} }
|
|||||||
func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupsResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupsResp) ProtoMessage() {}
|
func (*GetGroupsResp) ProtoMessage() {}
|
||||||
func (*GetGroupsResp) Descriptor() ([]byte, []int) {
|
func (*GetGroupsResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{32}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{32}
|
||||||
}
|
}
|
||||||
func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupsResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupsResp.Unmarshal(m, b)
|
||||||
@ -1482,7 +1482,7 @@ func (m *GetGroupMemberReq) Reset() { *m = GetGroupMemberReq{} }
|
|||||||
func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupMemberReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupMemberReq) ProtoMessage() {}
|
func (*GetGroupMemberReq) ProtoMessage() {}
|
||||||
func (*GetGroupMemberReq) Descriptor() ([]byte, []int) {
|
func (*GetGroupMemberReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{33}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{33}
|
||||||
}
|
}
|
||||||
func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupMemberReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupMemberReq.Unmarshal(m, b)
|
||||||
@ -1522,7 +1522,7 @@ func (m *GetGroupMembersCMSReq) Reset() { *m = GetGroupMembersCMSReq{} }
|
|||||||
func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupMembersCMSReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupMembersCMSReq) ProtoMessage() {}
|
func (*GetGroupMembersCMSReq) ProtoMessage() {}
|
||||||
func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) {
|
func (*GetGroupMembersCMSReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{34}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{34}
|
||||||
}
|
}
|
||||||
func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupMembersCMSReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupMembersCMSReq.Unmarshal(m, b)
|
||||||
@ -1575,7 +1575,7 @@ func (m *GetGroupMembersCMSResp) Reset() { *m = GetGroupMembersCMSResp{}
|
|||||||
func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupMembersCMSResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupMembersCMSResp) ProtoMessage() {}
|
func (*GetGroupMembersCMSResp) ProtoMessage() {}
|
||||||
func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) {
|
func (*GetGroupMembersCMSResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{35}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{35}
|
||||||
}
|
}
|
||||||
func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupMembersCMSResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupMembersCMSResp.Unmarshal(m, b)
|
||||||
@ -1620,7 +1620,7 @@ func (m *DismissGroupReq) Reset() { *m = DismissGroupReq{} }
|
|||||||
func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) }
|
func (m *DismissGroupReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*DismissGroupReq) ProtoMessage() {}
|
func (*DismissGroupReq) ProtoMessage() {}
|
||||||
func (*DismissGroupReq) Descriptor() ([]byte, []int) {
|
func (*DismissGroupReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{36}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{36}
|
||||||
}
|
}
|
||||||
func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error {
|
func (m *DismissGroupReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b)
|
return xxx_messageInfo_DismissGroupReq.Unmarshal(m, b)
|
||||||
@ -1657,7 +1657,7 @@ func (m *DismissGroupResp) Reset() { *m = DismissGroupResp{} }
|
|||||||
func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) }
|
func (m *DismissGroupResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*DismissGroupResp) ProtoMessage() {}
|
func (*DismissGroupResp) ProtoMessage() {}
|
||||||
func (*DismissGroupResp) Descriptor() ([]byte, []int) {
|
func (*DismissGroupResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{37}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{37}
|
||||||
}
|
}
|
||||||
func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error {
|
func (m *DismissGroupResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b)
|
return xxx_messageInfo_DismissGroupResp.Unmarshal(m, b)
|
||||||
@ -1690,7 +1690,7 @@ func (m *MuteGroupMemberReq) Reset() { *m = MuteGroupMemberReq{} }
|
|||||||
func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) }
|
func (m *MuteGroupMemberReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*MuteGroupMemberReq) ProtoMessage() {}
|
func (*MuteGroupMemberReq) ProtoMessage() {}
|
||||||
func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) {
|
func (*MuteGroupMemberReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{38}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{38}
|
||||||
}
|
}
|
||||||
func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error {
|
func (m *MuteGroupMemberReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b)
|
return xxx_messageInfo_MuteGroupMemberReq.Unmarshal(m, b)
|
||||||
@ -1741,7 +1741,7 @@ func (m *MuteGroupMemberResp) Reset() { *m = MuteGroupMemberResp{} }
|
|||||||
func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) }
|
func (m *MuteGroupMemberResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*MuteGroupMemberResp) ProtoMessage() {}
|
func (*MuteGroupMemberResp) ProtoMessage() {}
|
||||||
func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) {
|
func (*MuteGroupMemberResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{39}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{39}
|
||||||
}
|
}
|
||||||
func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error {
|
func (m *MuteGroupMemberResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b)
|
return xxx_messageInfo_MuteGroupMemberResp.Unmarshal(m, b)
|
||||||
@ -1773,7 +1773,7 @@ func (m *CancelMuteGroupMemberReq) Reset() { *m = CancelMuteGroupMemberR
|
|||||||
func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) }
|
func (m *CancelMuteGroupMemberReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*CancelMuteGroupMemberReq) ProtoMessage() {}
|
func (*CancelMuteGroupMemberReq) ProtoMessage() {}
|
||||||
func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) {
|
func (*CancelMuteGroupMemberReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{40}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{40}
|
||||||
}
|
}
|
||||||
func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error {
|
func (m *CancelMuteGroupMemberReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b)
|
return xxx_messageInfo_CancelMuteGroupMemberReq.Unmarshal(m, b)
|
||||||
@ -1817,7 +1817,7 @@ func (m *CancelMuteGroupMemberResp) Reset() { *m = CancelMuteGroupMember
|
|||||||
func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) }
|
func (m *CancelMuteGroupMemberResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*CancelMuteGroupMemberResp) ProtoMessage() {}
|
func (*CancelMuteGroupMemberResp) ProtoMessage() {}
|
||||||
func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) {
|
func (*CancelMuteGroupMemberResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{41}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{41}
|
||||||
}
|
}
|
||||||
func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error {
|
func (m *CancelMuteGroupMemberResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b)
|
return xxx_messageInfo_CancelMuteGroupMemberResp.Unmarshal(m, b)
|
||||||
@ -1848,7 +1848,7 @@ func (m *MuteGroupReq) Reset() { *m = MuteGroupReq{} }
|
|||||||
func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) }
|
func (m *MuteGroupReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*MuteGroupReq) ProtoMessage() {}
|
func (*MuteGroupReq) ProtoMessage() {}
|
||||||
func (*MuteGroupReq) Descriptor() ([]byte, []int) {
|
func (*MuteGroupReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{42}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{42}
|
||||||
}
|
}
|
||||||
func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error {
|
func (m *MuteGroupReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b)
|
return xxx_messageInfo_MuteGroupReq.Unmarshal(m, b)
|
||||||
@ -1885,7 +1885,7 @@ func (m *MuteGroupResp) Reset() { *m = MuteGroupResp{} }
|
|||||||
func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) }
|
func (m *MuteGroupResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*MuteGroupResp) ProtoMessage() {}
|
func (*MuteGroupResp) ProtoMessage() {}
|
||||||
func (*MuteGroupResp) Descriptor() ([]byte, []int) {
|
func (*MuteGroupResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{43}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{43}
|
||||||
}
|
}
|
||||||
func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error {
|
func (m *MuteGroupResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b)
|
return xxx_messageInfo_MuteGroupResp.Unmarshal(m, b)
|
||||||
@ -1916,7 +1916,7 @@ func (m *CancelMuteGroupReq) Reset() { *m = CancelMuteGroupReq{} }
|
|||||||
func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) }
|
func (m *CancelMuteGroupReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*CancelMuteGroupReq) ProtoMessage() {}
|
func (*CancelMuteGroupReq) ProtoMessage() {}
|
||||||
func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) {
|
func (*CancelMuteGroupReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{44}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{44}
|
||||||
}
|
}
|
||||||
func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error {
|
func (m *CancelMuteGroupReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b)
|
return xxx_messageInfo_CancelMuteGroupReq.Unmarshal(m, b)
|
||||||
@ -1953,7 +1953,7 @@ func (m *CancelMuteGroupResp) Reset() { *m = CancelMuteGroupResp{} }
|
|||||||
func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) }
|
func (m *CancelMuteGroupResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*CancelMuteGroupResp) ProtoMessage() {}
|
func (*CancelMuteGroupResp) ProtoMessage() {}
|
||||||
func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) {
|
func (*CancelMuteGroupResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{45}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{45}
|
||||||
}
|
}
|
||||||
func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error {
|
func (m *CancelMuteGroupResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b)
|
return xxx_messageInfo_CancelMuteGroupResp.Unmarshal(m, b)
|
||||||
@ -1984,7 +1984,7 @@ func (m *GetJoinedSuperGroupListReq) Reset() { *m = GetJoinedSuperGroupL
|
|||||||
func (m *GetJoinedSuperGroupListReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetJoinedSuperGroupListReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetJoinedSuperGroupListReq) ProtoMessage() {}
|
func (*GetJoinedSuperGroupListReq) ProtoMessage() {}
|
||||||
func (*GetJoinedSuperGroupListReq) Descriptor() ([]byte, []int) {
|
func (*GetJoinedSuperGroupListReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{46}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{46}
|
||||||
}
|
}
|
||||||
func (m *GetJoinedSuperGroupListReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetJoinedSuperGroupListReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetJoinedSuperGroupListReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetJoinedSuperGroupListReq.Unmarshal(m, b)
|
||||||
@ -2022,7 +2022,7 @@ func (m *GetJoinedSuperGroupListResp) Reset() { *m = GetJoinedSuperGroup
|
|||||||
func (m *GetJoinedSuperGroupListResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetJoinedSuperGroupListResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetJoinedSuperGroupListResp) ProtoMessage() {}
|
func (*GetJoinedSuperGroupListResp) ProtoMessage() {}
|
||||||
func (*GetJoinedSuperGroupListResp) Descriptor() ([]byte, []int) {
|
func (*GetJoinedSuperGroupListResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{47}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{47}
|
||||||
}
|
}
|
||||||
func (m *GetJoinedSuperGroupListResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetJoinedSuperGroupListResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetJoinedSuperGroupListResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetJoinedSuperGroupListResp.Unmarshal(m, b)
|
||||||
@ -2060,7 +2060,7 @@ func (m *GetSuperGroupsInfoReq) Reset() { *m = GetSuperGroupsInfoReq{} }
|
|||||||
func (m *GetSuperGroupsInfoReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetSuperGroupsInfoReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetSuperGroupsInfoReq) ProtoMessage() {}
|
func (*GetSuperGroupsInfoReq) ProtoMessage() {}
|
||||||
func (*GetSuperGroupsInfoReq) Descriptor() ([]byte, []int) {
|
func (*GetSuperGroupsInfoReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{48}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{48}
|
||||||
}
|
}
|
||||||
func (m *GetSuperGroupsInfoReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetSuperGroupsInfoReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetSuperGroupsInfoReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetSuperGroupsInfoReq.Unmarshal(m, b)
|
||||||
@ -2098,7 +2098,7 @@ func (m *GetSuperGroupsInfoResp) Reset() { *m = GetSuperGroupsInfoResp{}
|
|||||||
func (m *GetSuperGroupsInfoResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetSuperGroupsInfoResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetSuperGroupsInfoResp) ProtoMessage() {}
|
func (*GetSuperGroupsInfoResp) ProtoMessage() {}
|
||||||
func (*GetSuperGroupsInfoResp) Descriptor() ([]byte, []int) {
|
func (*GetSuperGroupsInfoResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{49}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{49}
|
||||||
}
|
}
|
||||||
func (m *GetSuperGroupsInfoResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetSuperGroupsInfoResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetSuperGroupsInfoResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetSuperGroupsInfoResp.Unmarshal(m, b)
|
||||||
@ -2141,7 +2141,7 @@ func (m *SetGroupMemberInfo) Reset() { *m = SetGroupMemberInfo{} }
|
|||||||
func (m *SetGroupMemberInfo) String() string { return proto.CompactTextString(m) }
|
func (m *SetGroupMemberInfo) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SetGroupMemberInfo) ProtoMessage() {}
|
func (*SetGroupMemberInfo) ProtoMessage() {}
|
||||||
func (*SetGroupMemberInfo) Descriptor() ([]byte, []int) {
|
func (*SetGroupMemberInfo) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{50}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{50}
|
||||||
}
|
}
|
||||||
func (m *SetGroupMemberInfo) XXX_Unmarshal(b []byte) error {
|
func (m *SetGroupMemberInfo) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_SetGroupMemberInfo.Unmarshal(m, b)
|
return xxx_messageInfo_SetGroupMemberInfo.Unmarshal(m, b)
|
||||||
@ -2214,7 +2214,7 @@ func (m *SetGroupMemberInfoReq) Reset() { *m = SetGroupMemberInfoReq{} }
|
|||||||
func (m *SetGroupMemberInfoReq) String() string { return proto.CompactTextString(m) }
|
func (m *SetGroupMemberInfoReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SetGroupMemberInfoReq) ProtoMessage() {}
|
func (*SetGroupMemberInfoReq) ProtoMessage() {}
|
||||||
func (*SetGroupMemberInfoReq) Descriptor() ([]byte, []int) {
|
func (*SetGroupMemberInfoReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{51}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{51}
|
||||||
}
|
}
|
||||||
func (m *SetGroupMemberInfoReq) XXX_Unmarshal(b []byte) error {
|
func (m *SetGroupMemberInfoReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_SetGroupMemberInfoReq.Unmarshal(m, b)
|
return xxx_messageInfo_SetGroupMemberInfoReq.Unmarshal(m, b)
|
||||||
@ -2251,7 +2251,7 @@ func (m *SetGroupMemberInfoResp) Reset() { *m = SetGroupMemberInfoResp{}
|
|||||||
func (m *SetGroupMemberInfoResp) String() string { return proto.CompactTextString(m) }
|
func (m *SetGroupMemberInfoResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SetGroupMemberInfoResp) ProtoMessage() {}
|
func (*SetGroupMemberInfoResp) ProtoMessage() {}
|
||||||
func (*SetGroupMemberInfoResp) Descriptor() ([]byte, []int) {
|
func (*SetGroupMemberInfoResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{52}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{52}
|
||||||
}
|
}
|
||||||
func (m *SetGroupMemberInfoResp) XXX_Unmarshal(b []byte) error {
|
func (m *SetGroupMemberInfoResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_SetGroupMemberInfoResp.Unmarshal(m, b)
|
return xxx_messageInfo_SetGroupMemberInfoResp.Unmarshal(m, b)
|
||||||
@ -2282,7 +2282,7 @@ func (m *GetGroupAbstractInfoReq) Reset() { *m = GetGroupAbstractInfoReq
|
|||||||
func (m *GetGroupAbstractInfoReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupAbstractInfoReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupAbstractInfoReq) ProtoMessage() {}
|
func (*GetGroupAbstractInfoReq) ProtoMessage() {}
|
||||||
func (*GetGroupAbstractInfoReq) Descriptor() ([]byte, []int) {
|
func (*GetGroupAbstractInfoReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{53}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{53}
|
||||||
}
|
}
|
||||||
func (m *GetGroupAbstractInfoReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupAbstractInfoReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupAbstractInfoReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupAbstractInfoReq.Unmarshal(m, b)
|
||||||
@ -2322,7 +2322,7 @@ func (m *GroupAbstractInfo) Reset() { *m = GroupAbstractInfo{} }
|
|||||||
func (m *GroupAbstractInfo) String() string { return proto.CompactTextString(m) }
|
func (m *GroupAbstractInfo) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GroupAbstractInfo) ProtoMessage() {}
|
func (*GroupAbstractInfo) ProtoMessage() {}
|
||||||
func (*GroupAbstractInfo) Descriptor() ([]byte, []int) {
|
func (*GroupAbstractInfo) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{54}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{54}
|
||||||
}
|
}
|
||||||
func (m *GroupAbstractInfo) XXX_Unmarshal(b []byte) error {
|
func (m *GroupAbstractInfo) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GroupAbstractInfo.Unmarshal(m, b)
|
return xxx_messageInfo_GroupAbstractInfo.Unmarshal(m, b)
|
||||||
@ -2374,7 +2374,7 @@ func (m *GetGroupAbstractInfoResp) Reset() { *m = GetGroupAbstractInfoRe
|
|||||||
func (m *GetGroupAbstractInfoResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupAbstractInfoResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupAbstractInfoResp) ProtoMessage() {}
|
func (*GetGroupAbstractInfoResp) ProtoMessage() {}
|
||||||
func (*GetGroupAbstractInfoResp) Descriptor() ([]byte, []int) {
|
func (*GetGroupAbstractInfoResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{55}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{55}
|
||||||
}
|
}
|
||||||
func (m *GetGroupAbstractInfoResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupAbstractInfoResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupAbstractInfoResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupAbstractInfoResp.Unmarshal(m, b)
|
||||||
@ -2413,7 +2413,7 @@ func (m *GetUserInGroupMembersReq) Reset() { *m = GetUserInGroupMembersR
|
|||||||
func (m *GetUserInGroupMembersReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetUserInGroupMembersReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetUserInGroupMembersReq) ProtoMessage() {}
|
func (*GetUserInGroupMembersReq) ProtoMessage() {}
|
||||||
func (*GetUserInGroupMembersReq) Descriptor() ([]byte, []int) {
|
func (*GetUserInGroupMembersReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{56}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{56}
|
||||||
}
|
}
|
||||||
func (m *GetUserInGroupMembersReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetUserInGroupMembersReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetUserInGroupMembersReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetUserInGroupMembersReq.Unmarshal(m, b)
|
||||||
@ -2458,7 +2458,7 @@ func (m *GetUserInGroupMembersResp) Reset() { *m = GetUserInGroupMembers
|
|||||||
func (m *GetUserInGroupMembersResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetUserInGroupMembersResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetUserInGroupMembersResp) ProtoMessage() {}
|
func (*GetUserInGroupMembersResp) ProtoMessage() {}
|
||||||
func (*GetUserInGroupMembersResp) Descriptor() ([]byte, []int) {
|
func (*GetUserInGroupMembersResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{57}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{57}
|
||||||
}
|
}
|
||||||
func (m *GetUserInGroupMembersResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetUserInGroupMembersResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetUserInGroupMembersResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetUserInGroupMembersResp.Unmarshal(m, b)
|
||||||
@ -2496,7 +2496,7 @@ func (m *GetGroupMemberUserIDReq) Reset() { *m = GetGroupMemberUserIDReq
|
|||||||
func (m *GetGroupMemberUserIDReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupMemberUserIDReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupMemberUserIDReq) ProtoMessage() {}
|
func (*GetGroupMemberUserIDReq) ProtoMessage() {}
|
||||||
func (*GetGroupMemberUserIDReq) Descriptor() ([]byte, []int) {
|
func (*GetGroupMemberUserIDReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{58}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{58}
|
||||||
}
|
}
|
||||||
func (m *GetGroupMemberUserIDReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupMemberUserIDReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupMemberUserIDReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupMemberUserIDReq.Unmarshal(m, b)
|
||||||
@ -2534,7 +2534,7 @@ func (m *GetGroupMemberUserIDResp) Reset() { *m = GetGroupMemberUserIDRe
|
|||||||
func (m *GetGroupMemberUserIDResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetGroupMemberUserIDResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetGroupMemberUserIDResp) ProtoMessage() {}
|
func (*GetGroupMemberUserIDResp) ProtoMessage() {}
|
||||||
func (*GetGroupMemberUserIDResp) Descriptor() ([]byte, []int) {
|
func (*GetGroupMemberUserIDResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_group_b971ad66a8171801, []int{59}
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{59}
|
||||||
}
|
}
|
||||||
func (m *GetGroupMemberUserIDResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetGroupMemberUserIDResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetGroupMemberUserIDResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetGroupMemberUserIDResp.Unmarshal(m, b)
|
||||||
@ -2561,6 +2561,90 @@ func (m *GetGroupMemberUserIDResp) GetUserIDs() []string {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type GetGroupMemberRoleLevelReq struct {
|
||||||
|
GroupID string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"`
|
||||||
|
RoleLevels []int32 `protobuf:"varint,2,rep,packed,name=roleLevels" json:"roleLevels,omitempty"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *GetGroupMemberRoleLevelReq) Reset() { *m = GetGroupMemberRoleLevelReq{} }
|
||||||
|
func (m *GetGroupMemberRoleLevelReq) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*GetGroupMemberRoleLevelReq) ProtoMessage() {}
|
||||||
|
func (*GetGroupMemberRoleLevelReq) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{60}
|
||||||
|
}
|
||||||
|
func (m *GetGroupMemberRoleLevelReq) XXX_Unmarshal(b []byte) error {
|
||||||
|
return xxx_messageInfo_GetGroupMemberRoleLevelReq.Unmarshal(m, b)
|
||||||
|
}
|
||||||
|
func (m *GetGroupMemberRoleLevelReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_GetGroupMemberRoleLevelReq.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (dst *GetGroupMemberRoleLevelReq) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_GetGroupMemberRoleLevelReq.Merge(dst, src)
|
||||||
|
}
|
||||||
|
func (m *GetGroupMemberRoleLevelReq) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_GetGroupMemberRoleLevelReq.Size(m)
|
||||||
|
}
|
||||||
|
func (m *GetGroupMemberRoleLevelReq) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_GetGroupMemberRoleLevelReq.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_GetGroupMemberRoleLevelReq proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *GetGroupMemberRoleLevelReq) GetGroupID() string {
|
||||||
|
if m != nil {
|
||||||
|
return m.GroupID
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *GetGroupMemberRoleLevelReq) GetRoleLevels() []int32 {
|
||||||
|
if m != nil {
|
||||||
|
return m.RoleLevels
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type GetGroupMemberRoleLevelResp struct {
|
||||||
|
Members []*sdkws.GroupMemberFullInfo `protobuf:"bytes,1,rep,name=members" json:"members,omitempty"`
|
||||||
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
|
XXX_unrecognized []byte `json:"-"`
|
||||||
|
XXX_sizecache int32 `json:"-"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *GetGroupMemberRoleLevelResp) Reset() { *m = GetGroupMemberRoleLevelResp{} }
|
||||||
|
func (m *GetGroupMemberRoleLevelResp) String() string { return proto.CompactTextString(m) }
|
||||||
|
func (*GetGroupMemberRoleLevelResp) ProtoMessage() {}
|
||||||
|
func (*GetGroupMemberRoleLevelResp) Descriptor() ([]byte, []int) {
|
||||||
|
return fileDescriptor_group_4a94cf46004e5ca3, []int{61}
|
||||||
|
}
|
||||||
|
func (m *GetGroupMemberRoleLevelResp) XXX_Unmarshal(b []byte) error {
|
||||||
|
return xxx_messageInfo_GetGroupMemberRoleLevelResp.Unmarshal(m, b)
|
||||||
|
}
|
||||||
|
func (m *GetGroupMemberRoleLevelResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||||
|
return xxx_messageInfo_GetGroupMemberRoleLevelResp.Marshal(b, m, deterministic)
|
||||||
|
}
|
||||||
|
func (dst *GetGroupMemberRoleLevelResp) XXX_Merge(src proto.Message) {
|
||||||
|
xxx_messageInfo_GetGroupMemberRoleLevelResp.Merge(dst, src)
|
||||||
|
}
|
||||||
|
func (m *GetGroupMemberRoleLevelResp) XXX_Size() int {
|
||||||
|
return xxx_messageInfo_GetGroupMemberRoleLevelResp.Size(m)
|
||||||
|
}
|
||||||
|
func (m *GetGroupMemberRoleLevelResp) XXX_DiscardUnknown() {
|
||||||
|
xxx_messageInfo_GetGroupMemberRoleLevelResp.DiscardUnknown(m)
|
||||||
|
}
|
||||||
|
|
||||||
|
var xxx_messageInfo_GetGroupMemberRoleLevelResp proto.InternalMessageInfo
|
||||||
|
|
||||||
|
func (m *GetGroupMemberRoleLevelResp) GetMembers() []*sdkws.GroupMemberFullInfo {
|
||||||
|
if m != nil {
|
||||||
|
return m.Members
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
proto.RegisterType((*CreateGroupReq)(nil), "group.CreateGroupReq")
|
proto.RegisterType((*CreateGroupReq)(nil), "group.CreateGroupReq")
|
||||||
proto.RegisterType((*CreateGroupResp)(nil), "group.CreateGroupResp")
|
proto.RegisterType((*CreateGroupResp)(nil), "group.CreateGroupResp")
|
||||||
@ -2622,6 +2706,8 @@ func init() {
|
|||||||
proto.RegisterType((*GetUserInGroupMembersResp)(nil), "group.GetUserInGroupMembersResp")
|
proto.RegisterType((*GetUserInGroupMembersResp)(nil), "group.GetUserInGroupMembersResp")
|
||||||
proto.RegisterType((*GetGroupMemberUserIDReq)(nil), "group.GetGroupMemberUserIDReq")
|
proto.RegisterType((*GetGroupMemberUserIDReq)(nil), "group.GetGroupMemberUserIDReq")
|
||||||
proto.RegisterType((*GetGroupMemberUserIDResp)(nil), "group.GetGroupMemberUserIDResp")
|
proto.RegisterType((*GetGroupMemberUserIDResp)(nil), "group.GetGroupMemberUserIDResp")
|
||||||
|
proto.RegisterType((*GetGroupMemberRoleLevelReq)(nil), "group.GetGroupMemberRoleLevelReq")
|
||||||
|
proto.RegisterType((*GetGroupMemberRoleLevelResp)(nil), "group.GetGroupMemberRoleLevelResp")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reference imports to suppress errors if they are not otherwise used.
|
// Reference imports to suppress errors if they are not otherwise used.
|
||||||
@ -2688,6 +2774,8 @@ type GroupClient interface {
|
|||||||
GetUserInGroupMembers(ctx context.Context, in *GetUserInGroupMembersReq, opts ...grpc.CallOption) (*GetUserInGroupMembersResp, error)
|
GetUserInGroupMembers(ctx context.Context, in *GetUserInGroupMembersReq, opts ...grpc.CallOption) (*GetUserInGroupMembersResp, error)
|
||||||
// 获取群成员用户ID
|
// 获取群成员用户ID
|
||||||
GetGroupMemberUserID(ctx context.Context, in *GetGroupMemberUserIDReq, opts ...grpc.CallOption) (*GetGroupMemberUserIDResp, error)
|
GetGroupMemberUserID(ctx context.Context, in *GetGroupMemberUserIDReq, opts ...grpc.CallOption) (*GetGroupMemberUserIDResp, error)
|
||||||
|
// 查询群组中对应级别的成员
|
||||||
|
GetGroupMemberRoleLevel(ctx context.Context, in *GetGroupMemberRoleLevelReq, opts ...grpc.CallOption) (*GetGroupMemberRoleLevelResp, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
type groupClient struct {
|
type groupClient struct {
|
||||||
@ -2941,6 +3029,15 @@ func (c *groupClient) GetGroupMemberUserID(ctx context.Context, in *GetGroupMemb
|
|||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (c *groupClient) GetGroupMemberRoleLevel(ctx context.Context, in *GetGroupMemberRoleLevelReq, opts ...grpc.CallOption) (*GetGroupMemberRoleLevelResp, error) {
|
||||||
|
out := new(GetGroupMemberRoleLevelResp)
|
||||||
|
err := grpc.Invoke(ctx, "/group.group/GetGroupMemberRoleLevel", in, out, c.cc, opts...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return out, nil
|
||||||
|
}
|
||||||
|
|
||||||
// Server API for Group service
|
// Server API for Group service
|
||||||
|
|
||||||
type GroupServer interface {
|
type GroupServer interface {
|
||||||
@ -2997,6 +3094,8 @@ type GroupServer interface {
|
|||||||
GetUserInGroupMembers(context.Context, *GetUserInGroupMembersReq) (*GetUserInGroupMembersResp, error)
|
GetUserInGroupMembers(context.Context, *GetUserInGroupMembersReq) (*GetUserInGroupMembersResp, error)
|
||||||
// 获取群成员用户ID
|
// 获取群成员用户ID
|
||||||
GetGroupMemberUserID(context.Context, *GetGroupMemberUserIDReq) (*GetGroupMemberUserIDResp, error)
|
GetGroupMemberUserID(context.Context, *GetGroupMemberUserIDReq) (*GetGroupMemberUserIDResp, error)
|
||||||
|
// 查询群组中对应级别的成员
|
||||||
|
GetGroupMemberRoleLevel(context.Context, *GetGroupMemberRoleLevelReq) (*GetGroupMemberRoleLevelResp, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
func RegisterGroupServer(s *grpc.Server, srv GroupServer) {
|
func RegisterGroupServer(s *grpc.Server, srv GroupServer) {
|
||||||
@ -3489,6 +3588,24 @@ func _Group_GetGroupMemberUserID_Handler(srv interface{}, ctx context.Context, d
|
|||||||
return interceptor(ctx, in, info, handler)
|
return interceptor(ctx, in, info, handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func _Group_GetGroupMemberRoleLevel_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
|
in := new(GetGroupMemberRoleLevelReq)
|
||||||
|
if err := dec(in); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if interceptor == nil {
|
||||||
|
return srv.(GroupServer).GetGroupMemberRoleLevel(ctx, in)
|
||||||
|
}
|
||||||
|
info := &grpc.UnaryServerInfo{
|
||||||
|
Server: srv,
|
||||||
|
FullMethod: "/group.group/GetGroupMemberRoleLevel",
|
||||||
|
}
|
||||||
|
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
||||||
|
return srv.(GroupServer).GetGroupMemberRoleLevel(ctx, req.(*GetGroupMemberRoleLevelReq))
|
||||||
|
}
|
||||||
|
return interceptor(ctx, in, info, handler)
|
||||||
|
}
|
||||||
|
|
||||||
var _Group_serviceDesc = grpc.ServiceDesc{
|
var _Group_serviceDesc = grpc.ServiceDesc{
|
||||||
ServiceName: "group.group",
|
ServiceName: "group.group",
|
||||||
HandlerType: (*GroupServer)(nil),
|
HandlerType: (*GroupServer)(nil),
|
||||||
@ -3601,126 +3718,132 @@ var _Group_serviceDesc = grpc.ServiceDesc{
|
|||||||
MethodName: "getGroupMemberUserID",
|
MethodName: "getGroupMemberUserID",
|
||||||
Handler: _Group_GetGroupMemberUserID_Handler,
|
Handler: _Group_GetGroupMemberUserID_Handler,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
MethodName: "GetGroupMemberRoleLevel",
|
||||||
|
Handler: _Group_GetGroupMemberRoleLevel_Handler,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
Streams: []grpc.StreamDesc{},
|
Streams: []grpc.StreamDesc{},
|
||||||
Metadata: "group/group.proto",
|
Metadata: "group/group.proto",
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_b971ad66a8171801) }
|
func init() { proto.RegisterFile("group/group.proto", fileDescriptor_group_4a94cf46004e5ca3) }
|
||||||
|
|
||||||
var fileDescriptor_group_b971ad66a8171801 = []byte{
|
var fileDescriptor_group_4a94cf46004e5ca3 = []byte{
|
||||||
// 1808 bytes of a gzipped FileDescriptorProto
|
// 1833 bytes of a gzipped FileDescriptorProto
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x59, 0x5f, 0x53, 0xdc, 0xc8,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xb4, 0x59, 0x51, 0x53, 0xe4, 0xc6,
|
||||||
0x11, 0x2f, 0x2d, 0x06, 0x43, 0x9b, 0x35, 0x30, 0xb0, 0x20, 0x04, 0x06, 0x32, 0xa6, 0x1c, 0x2a,
|
0x11, 0xae, 0xdd, 0x33, 0xdc, 0xd1, 0xc7, 0x1a, 0x18, 0xd8, 0x45, 0x27, 0xb8, 0x83, 0x8c, 0xaf,
|
||||||
0xb1, 0x97, 0x94, 0x71, 0x5c, 0xf9, 0xe3, 0x2a, 0xc7, 0x86, 0x18, 0x93, 0xb0, 0x10, 0xb4, 0xb6,
|
0x62, 0x2a, 0x31, 0x8b, 0x0b, 0x2e, 0x2e, 0xbb, 0x92, 0x2a, 0xe7, 0xcc, 0xc5, 0x18, 0x87, 0x85,
|
||||||
0x53, 0x71, 0x2a, 0x45, 0xc4, 0xee, 0x20, 0xcb, 0x68, 0xa5, 0x41, 0xa3, 0x05, 0xd7, 0x95, 0xef,
|
0xa0, 0x3d, 0x3b, 0x29, 0xbf, 0xc4, 0x62, 0x77, 0x90, 0x75, 0x68, 0xa5, 0x41, 0xa3, 0x05, 0x3f,
|
||||||
0xe1, 0xee, 0xf9, 0xfe, 0x3c, 0xdc, 0xe3, 0x3d, 0xdd, 0x7d, 0x86, 0xfb, 0x38, 0xf7, 0x61, 0xae,
|
0x26, 0x95, 0x87, 0x3c, 0x25, 0x8f, 0x79, 0xc9, 0x53, 0xde, 0xf2, 0x2b, 0xf2, 0xdb, 0x52, 0x9a,
|
||||||
0x34, 0x92, 0x66, 0x47, 0xd2, 0x68, 0x17, 0x9f, 0xc1, 0x2f, 0x5b, 0xa5, 0x9e, 0xee, 0xe9, 0x9e,
|
0x91, 0x46, 0x23, 0xcd, 0x68, 0x77, 0xcd, 0x1d, 0x2f, 0x5b, 0xa5, 0xee, 0x9e, 0xe9, 0x9e, 0x9e,
|
||||||
0x9e, 0xfe, 0xf3, 0xeb, 0x59, 0x98, 0xb2, 0x03, 0xbf, 0x4b, 0xd7, 0xf9, 0x6f, 0x9d, 0x06, 0x7e,
|
0xee, 0x9e, 0xaf, 0x7b, 0x61, 0xc5, 0x8b, 0xa3, 0x31, 0xdd, 0xe3, 0xbf, 0x5d, 0x1a, 0x47, 0x49,
|
||||||
0xe8, 0xa3, 0x61, 0xfe, 0x61, 0xac, 0xed, 0x53, 0xe2, 0xdd, 0xdb, 0x69, 0xdc, 0x6b, 0x92, 0xe0,
|
0x84, 0xe6, 0xf8, 0x87, 0xfd, 0xe1, 0x19, 0x25, 0xe1, 0xee, 0x71, 0x6f, 0xb7, 0x4f, 0xe2, 0x1b,
|
||||||
0x8c, 0x04, 0xeb, 0xf4, 0xc4, 0x5e, 0xe7, 0x0c, 0xeb, 0xac, 0x7d, 0x72, 0x78, 0xce, 0xd6, 0xcf,
|
0x12, 0xef, 0xd1, 0x2b, 0x6f, 0x8f, 0x0b, 0xec, 0xb1, 0xe1, 0xd5, 0x2d, 0xdb, 0xbb, 0x65, 0x42,
|
||||||
0x59, 0x2c, 0x60, 0xd4, 0x07, 0x72, 0x06, 0x16, 0xa5, 0x24, 0x48, 0xf8, 0xf1, 0x4f, 0x1a, 0xdc,
|
0xde, 0xde, 0x9d, 0x26, 0x18, 0xbb, 0x94, 0x92, 0x38, 0x13, 0xc7, 0xff, 0x6d, 0xc0, 0xfb, 0x87,
|
||||||
0xdc, 0x0c, 0x88, 0x15, 0x92, 0xed, 0x48, 0x93, 0x49, 0x4e, 0xd1, 0x0a, 0xdc, 0x70, 0x3c, 0x27,
|
0x31, 0x71, 0x13, 0x72, 0x94, 0xea, 0x71, 0xc8, 0x35, 0xda, 0x86, 0xc7, 0x7e, 0xe8, 0x27, 0x3d,
|
||||||
0x6c, 0x90, 0xce, 0x11, 0x09, 0x98, 0xae, 0xad, 0x0c, 0xad, 0x8d, 0x99, 0x32, 0x09, 0xfd, 0x05,
|
0x32, 0xba, 0x20, 0x31, 0xb3, 0x1a, 0xdb, 0x0f, 0x76, 0x16, 0x1c, 0x95, 0x84, 0xba, 0xb0, 0xc0,
|
||||||
0xc6, 0xb8, 0x5d, 0x3b, 0xde, 0xb1, 0xaf, 0x57, 0x56, 0xb4, 0xb5, 0x1b, 0xf7, 0x17, 0xeb, 0x8c,
|
0xad, 0x3a, 0x0e, 0x2f, 0x23, 0xab, 0xb9, 0xdd, 0xd8, 0x79, 0xbc, 0xbf, 0xdc, 0xe5, 0xdb, 0x77,
|
||||||
0x2b, 0x3c, 0xb4, 0xa8, 0x73, 0x48, 0xad, 0xc0, 0xea, 0xb0, 0xfa, 0x76, 0xca, 0x63, 0xf6, 0xd8,
|
0x8f, 0x72, 0xba, 0x53, 0x88, 0x20, 0x0c, 0x8b, 0xee, 0x70, 0xe4, 0x87, 0xdf, 0x30, 0x12, 0x1f,
|
||||||
0x11, 0x86, 0x71, 0xab, 0xdd, 0x71, 0xbc, 0x97, 0x8c, 0x04, 0x3b, 0x5b, 0x4c, 0x1f, 0xe2, 0xdb,
|
0xbf, 0x62, 0xd6, 0x03, 0xbe, 0x65, 0x89, 0x96, 0x6a, 0x8d, 0x6e, 0x43, 0x12, 0x8b, 0x6f, 0xeb,
|
||||||
0x67, 0x68, 0x91, 0x05, 0xfe, 0xb9, 0x47, 0x82, 0xf8, 0x5b, 0xbf, 0xb6, 0xa2, 0x45, 0x16, 0x48,
|
0xbd, 0xed, 0x46, 0xaa, 0x55, 0x21, 0xe1, 0x97, 0xb0, 0x54, 0xb2, 0x94, 0xd1, 0xb2, 0x21, 0x8d,
|
||||||
0x24, 0xdc, 0x80, 0x89, 0x8c, 0xd5, 0x8c, 0x66, 0x8d, 0xd2, 0x3e, 0xc8, 0x28, 0x5c, 0x87, 0xc9,
|
0xa9, 0x86, 0xe0, 0x2e, 0x2c, 0x1f, 0x91, 0x84, 0xb3, 0x18, 0xe7, 0x91, 0x6b, 0x64, 0xc3, 0x23,
|
||||||
0x6d, 0x12, 0xf2, 0x25, 0xc6, 0xd7, 0xc8, 0x29, 0x32, 0x60, 0x34, 0x66, 0xd8, 0x4a, 0x7d, 0x20,
|
0x21, 0xf0, 0x2a, 0x3f, 0xab, 0xfc, 0xc6, 0xbf, 0x83, 0x95, 0x8a, 0x3c, 0xa3, 0xe8, 0x63, 0x00,
|
||||||
0xbe, 0xf1, 0x01, 0x4c, 0xe5, 0xf8, 0x19, 0x45, 0x8f, 0x00, 0xc4, 0x8e, 0xb1, 0xc8, 0x20, 0x0b,
|
0xb9, 0xa3, 0x58, 0x62, 0xd2, 0xaa, 0xc8, 0xe0, 0x3e, 0x2c, 0xf5, 0xb3, 0x6d, 0x72, 0xad, 0xbf,
|
||||||
0x24, 0x7e, 0x7c, 0x08, 0x13, 0xcd, 0x64, 0xcb, 0xd4, 0x82, 0x5d, 0x98, 0x10, 0x0c, 0xcf, 0xfc,
|
0x85, 0x25, 0x29, 0xf0, 0x65, 0x14, 0xf7, 0x49, 0x92, 0xd9, 0xdf, 0xa9, 0xee, 0x24, 0xb8, 0x4e,
|
||||||
0xa0, 0x49, 0xc2, 0xe4, 0x5c, 0xb8, 0xdf, 0xae, 0x31, 0xa7, 0x99, 0x17, 0xc5, 0x08, 0x26, 0xb3,
|
0x55, 0x1c, 0x23, 0x58, 0x2e, 0x6f, 0xca, 0x28, 0xbe, 0x01, 0x3b, 0xb7, 0xf7, 0x25, 0xa5, 0x81,
|
||||||
0x0a, 0x18, 0xc5, 0x5f, 0x6a, 0x60, 0xa4, 0x07, 0x79, 0x42, 0xa9, 0xeb, 0xb4, 0xac, 0xd0, 0xf1,
|
0x3f, 0x70, 0x13, 0x3f, 0x0a, 0x4f, 0x7c, 0x96, 0xa4, 0x3a, 0x3f, 0x05, 0xa0, 0xae, 0xe7, 0x87,
|
||||||
0xbd, 0x5d, 0x87, 0x85, 0x91, 0x01, 0x5b, 0x00, 0xd4, 0xb2, 0x1d, 0x8f, 0x13, 0x13, 0xdd, 0xab,
|
0x9c, 0x98, 0xa9, 0xb3, 0x32, 0x75, 0x0e, 0xb9, 0x1e, 0x13, 0x96, 0xfc, 0x41, 0xf2, 0x1d, 0x45,
|
||||||
0x0a, 0xdd, 0x26, 0x39, 0xed, 0x12, 0x16, 0xfe, 0x4b, 0xf0, 0x9a, 0x92, 0x1c, 0x5a, 0x02, 0x38,
|
0x16, 0x3d, 0x03, 0xb8, 0x8c, 0xa3, 0x51, 0x76, 0x37, 0x4d, 0x7e, 0x37, 0x0a, 0x05, 0x87, 0xb0,
|
||||||
0x0e, 0xfc, 0x4e, 0x72, 0x99, 0x15, 0x7e, 0x99, 0x12, 0x05, 0x7f, 0x06, 0x0b, 0xa5, 0x36, 0x30,
|
0x51, 0xab, 0x97, 0x51, 0xb4, 0x06, 0x73, 0x49, 0x94, 0xb8, 0x01, 0xd7, 0xd9, 0x72, 0xc4, 0x07,
|
||||||
0x8a, 0x66, 0x60, 0x38, 0xf4, 0x43, 0xcb, 0xe5, 0xfa, 0xab, 0x66, 0xfc, 0x81, 0xfe, 0x0e, 0x55,
|
0xfa, 0x0c, 0x5a, 0x5e, 0x16, 0x73, 0xa9, 0x6a, 0x66, 0x35, 0xb9, 0x2b, 0x57, 0x55, 0x07, 0x64,
|
||||||
0x3b, 0x09, 0xd8, 0x48, 0x35, 0xd3, 0x2b, 0xdc, 0xdf, 0xcb, 0x65, 0x9e, 0x49, 0xf8, 0xcc, 0xac,
|
0x3c, 0xa7, 0x2c, 0x89, 0x29, 0x6c, 0x1e, 0x91, 0x24, 0x55, 0xee, 0x90, 0xeb, 0x77, 0x7a, 0xd2,
|
||||||
0x14, 0x7e, 0x0f, 0x8b, 0xdb, 0x24, 0x8c, 0x0c, 0x31, 0xc9, 0xe9, 0x95, 0x79, 0x60, 0x16, 0x46,
|
0x0e, 0xcc, 0x8f, 0xd5, 0x53, 0x66, 0x5f, 0x98, 0xc2, 0xd3, 0x09, 0x1a, 0xef, 0xe3, 0x8c, 0x7f,
|
||||||
0xba, 0xf2, 0xe9, 0x93, 0x2f, 0xfc, 0x1e, 0x6e, 0xf5, 0xd1, 0x7e, 0xd5, 0x67, 0xff, 0x42, 0x83,
|
0x6d, 0x40, 0xfb, 0x75, 0xec, 0x86, 0xec, 0x92, 0xc4, 0x5c, 0xee, 0x2c, 0xcd, 0x85, 0xf4, 0x74,
|
||||||
0xda, 0x8b, 0xc0, 0xf2, 0xd8, 0x31, 0x09, 0x38, 0xdf, 0x7e, 0x94, 0x60, 0xd1, 0xa9, 0x75, 0xb8,
|
0x16, 0x3c, 0xcc, 0x22, 0x94, 0x2b, 0x5b, 0x70, 0xf2, 0x4f, 0xf4, 0x73, 0x78, 0x3f, 0x0a, 0x86,
|
||||||
0x9e, 0x84, 0x3a, 0x57, 0x3c, 0x66, 0xa6, 0x9f, 0xe8, 0x0e, 0xdc, 0xf4, 0xdd, 0xf6, 0xbe, 0x94,
|
0x67, 0x4a, 0x1e, 0x89, 0x53, 0x54, 0xa8, 0xa9, 0x5c, 0x48, 0x6e, 0x55, 0xb9, 0x07, 0x42, 0xae,
|
||||||
0x9c, 0xf1, 0x89, 0x72, 0xd4, 0x88, 0xcf, 0x23, 0xe7, 0x32, 0xdf, 0x50, 0xcc, 0x97, 0xa5, 0x62,
|
0x4c, 0xc5, 0x16, 0x74, 0x4c, 0x26, 0x30, 0x8a, 0xff, 0xd9, 0x80, 0xc5, 0xaf, 0x23, 0x3f, 0x94,
|
||||||
0x1d, 0x66, 0x55, 0x26, 0x30, 0x8a, 0xbf, 0xd1, 0x60, 0xfc, 0x1f, 0xbe, 0xe3, 0x89, 0xb2, 0x54,
|
0x55, 0xa3, 0xde, 0xa8, 0x67, 0x00, 0x31, 0xb9, 0xee, 0x11, 0xc6, 0x5c, 0x8f, 0xe4, 0xc1, 0x53,
|
||||||
0x6e, 0xd4, 0x12, 0x40, 0x40, 0x4e, 0x1b, 0x84, 0x31, 0xcb, 0x26, 0x69, 0x80, 0xf5, 0x28, 0xd1,
|
0x50, 0x52, 0xfe, 0x9b, 0xc8, 0x0f, 0xfb, 0xd1, 0x38, 0x1e, 0x10, 0x6e, 0xc8, 0x9c, 0xa3, 0x50,
|
||||||
0xfa, 0x5b, 0xdf, 0xf1, 0x9a, 0x7e, 0x37, 0x68, 0x11, 0x6e, 0xc8, 0xb0, 0x29, 0x51, 0xd0, 0x2a,
|
0xd0, 0x73, 0x68, 0xf9, 0xe1, 0x8d, 0x9f, 0x54, 0x6a, 0x43, 0x99, 0x88, 0x97, 0xa0, 0xa5, 0xd8,
|
||||||
0x54, 0x1d, 0xef, 0xcc, 0x09, 0x73, 0x05, 0x27, 0x4b, 0xc4, 0x13, 0x50, 0x95, 0xec, 0x61, 0x14,
|
0xc3, 0x28, 0xfe, 0x77, 0x03, 0x36, 0xaa, 0x11, 0x99, 0x32, 0xa2, 0x90, 0x91, 0xa9, 0x06, 0x4f,
|
||||||
0x7f, 0xaf, 0xc1, 0x42, 0x3e, 0x6a, 0xa3, 0x05, 0xdf, 0x63, 0x64, 0xa0, 0xc1, 0xfd, 0x32, 0x22,
|
0x8a, 0xf6, 0x94, 0xff, 0x83, 0x1b, 0x0e, 0x03, 0x32, 0xec, 0x31, 0x2f, 0xf3, 0x9c, 0x42, 0x49,
|
||||||
0x5a, 0x7f, 0x63, 0x79, 0x6d, 0x97, 0xb4, 0x1b, 0xcc, 0x4e, 0x3c, 0x27, 0x51, 0xa2, 0x1a, 0x1a,
|
0xcb, 0x9d, 0xf8, 0x72, 0x08, 0x1b, 0x07, 0x09, 0xb7, 0x77, 0xce, 0x29, 0xd1, 0xf0, 0x33, 0xd8,
|
||||||
0x7f, 0x99, 0x84, 0x75, 0xdd, 0x90, 0xdb, 0x3b, 0x6c, 0x66, 0x68, 0x78, 0x09, 0x16, 0xcb, 0x8d,
|
0xac, 0x37, 0x8e, 0x51, 0xbc, 0x03, 0x8b, 0xe7, 0x63, 0x3f, 0x99, 0xee, 0xde, 0xf4, 0xe0, 0x8a,
|
||||||
0x63, 0x14, 0xaf, 0xc1, 0xf8, 0x41, 0xd7, 0x09, 0x07, 0xbb, 0x37, 0x3a, 0xb8, 0xc4, 0xc9, 0x28,
|
0x24, 0xa3, 0xf8, 0x6f, 0x0d, 0x68, 0xe7, 0xd9, 0x28, 0x2a, 0xf6, 0xdb, 0xa7, 0x85, 0xa2, 0xbe,
|
||||||
0xfe, 0x56, 0x83, 0x5a, 0x9a, 0xb1, 0x71, 0x4b, 0xb8, 0xdc, 0x74, 0x91, 0x4c, 0xa9, 0x64, 0x1d,
|
0x59, 0x76, 0x56, 0x07, 0xe6, 0x2f, 0xfd, 0x20, 0x21, 0x71, 0x76, 0x73, 0xd9, 0x17, 0x1e, 0x42,
|
||||||
0x37, 0x0b, 0x23, 0xc7, 0x8e, 0x1b, 0x92, 0x20, 0xb9, 0xc5, 0xe4, 0x0b, 0x53, 0x98, 0x55, 0x19,
|
0xc7, 0x64, 0x44, 0x6d, 0xa6, 0xbc, 0x80, 0x87, 0xa3, 0xec, 0xc5, 0x11, 0x39, 0x62, 0xab, 0x39,
|
||||||
0x54, 0x9a, 0x41, 0x7f, 0x83, 0xeb, 0x9d, 0xa4, 0xbd, 0xc5, 0xb9, 0x73, 0xa7, 0x2c, 0x77, 0xe2,
|
0x22, 0xb6, 0xf8, 0x72, 0x1c, 0x04, 0xbc, 0xd6, 0xe5, 0xa2, 0xf8, 0xa4, 0xaa, 0x45, 0x96, 0xf5,
|
||||||
0xed, 0x9e, 0x75, 0x5d, 0x97, 0x17, 0xcd, 0x54, 0x0c, 0xef, 0xe6, 0x35, 0x8a, 0xbe, 0x51, 0x7e,
|
0xfa, 0xeb, 0xb5, 0xca, 0x9a, 0x16, 0x8a, 0xdd, 0xce, 0x60, 0xdd, 0xb8, 0x1b, 0xa3, 0xaa, 0x79,
|
||||||
0xed, 0x7a, 0x56, 0xeb, 0x58, 0x6f, 0xb7, 0xff, 0xc2, 0x9c, 0x72, 0x37, 0x46, 0x65, 0x53, 0xb5,
|
0x8d, 0xd9, 0xcd, 0x0b, 0x00, 0xfd, 0xde, 0x1f, 0x5c, 0x29, 0x32, 0x93, 0x4d, 0x7b, 0x0e, 0xad,
|
||||||
0x5f, 0x67, 0xaa, 0x0b, 0xe8, 0x9f, 0x4e, 0xeb, 0x44, 0xe2, 0xe9, 0x6f, 0xe6, 0x2a, 0x54, 0x4f,
|
0x2b, 0x7f, 0x70, 0x45, 0x86, 0xf9, 0x4b, 0x29, 0x0c, 0x2c, 0x13, 0x53, 0x97, 0xc7, 0xc4, 0x65,
|
||||||
0x9c, 0xd6, 0x09, 0x69, 0xa7, 0x2d, 0x3a, 0x36, 0x36, 0x4b, 0x8c, 0xae, 0x22, 0x20, 0x16, 0xf3,
|
0x51, 0x98, 0xc5, 0x5e, 0xf6, 0x85, 0xdb, 0xb0, 0xaa, 0x69, 0x63, 0x14, 0x5f, 0xf3, 0x70, 0x48,
|
||||||
0xbd, 0x24, 0x3e, 0x93, 0x2f, 0x5c, 0x83, 0xe9, 0x82, 0x36, 0x46, 0xf1, 0xe7, 0x3c, 0x64, 0xa2,
|
0x93, 0x83, 0x0c, 0x39, 0xef, 0xfe, 0xdf, 0x83, 0x3f, 0xf1, 0x6b, 0xd1, 0x54, 0xd6, 0x5e, 0xfe,
|
||||||
0x04, 0x22, 0x6d, 0xbe, 0xf6, 0x69, 0x7b, 0x4c, 0x9b, 0x5f, 0x57, 0x41, 0x7d, 0x69, 0x80, 0x3c,
|
0x0e, 0xcc, 0x73, 0x17, 0xe4, 0x77, 0xaf, 0x3f, 0xa7, 0x19, 0x1f, 0x53, 0x58, 0x3b, 0xe6, 0x79,
|
||||||
0x80, 0x11, 0xee, 0x8e, 0x34, 0x3e, 0xfa, 0xf7, 0xf1, 0x84, 0x17, 0x53, 0x98, 0xd9, 0xe1, 0x35,
|
0x9f, 0x6a, 0x7a, 0x1d, 0xcd, 0x50, 0x7e, 0x0a, 0x6f, 0x35, 0x55, 0x6f, 0xa5, 0x35, 0x50, 0x54,
|
||||||
0x23, 0xd2, 0xfa, 0xc2, 0xbf, 0x40, 0xe9, 0xea, 0x79, 0xb1, 0x22, 0x7b, 0x31, 0xaa, 0x9f, 0x71,
|
0x90, 0x61, 0x19, 0x96, 0x54, 0xa8, 0x78, 0x1d, 0xda, 0x06, 0x8d, 0x8c, 0xe2, 0x37, 0xb0, 0x26,
|
||||||
0xf5, 0x69, 0x67, 0x71, 0x52, 0x8e, 0x8a, 0xe7, 0xa0, 0xa6, 0xd0, 0xc8, 0x28, 0x3e, 0x83, 0x19,
|
0x1f, 0xbd, 0x20, 0x28, 0xae, 0xf7, 0x1e, 0xb2, 0x0c, 0xf7, 0x8a, 0x94, 0x56, 0x74, 0xdd, 0x39,
|
||||||
0xd1, 0x54, 0x5d, 0xb7, 0x77, 0xed, 0x57, 0x9c, 0xa1, 0xf8, 0x3f, 0xbd, 0xd2, 0x20, 0xe9, 0xbd,
|
0x2e, 0xff, 0xd5, 0x80, 0x47, 0x87, 0xbd, 0x3e, 0x97, 0xf9, 0xa9, 0x20, 0x0a, 0x75, 0x01, 0x79,
|
||||||
0x94, 0x38, 0xfe, 0x51, 0x83, 0xd1, 0xcd, 0x46, 0x93, 0xf3, 0x7c, 0x0c, 0xda, 0x43, 0x75, 0x40,
|
0xf2, 0x31, 0x48, 0x9d, 0x72, 0xea, 0x8e, 0xf2, 0xba, 0x6e, 0xe0, 0xa0, 0x5f, 0xc0, 0x72, 0x99,
|
||||||
0xb6, 0x68, 0x36, 0x91, 0xe3, 0xf6, 0xac, 0x4e, 0xda, 0x37, 0x14, 0x2b, 0xe8, 0x77, 0x30, 0x99,
|
0x2a, 0x9f, 0x1b, 0x8d, 0x8e, 0xff, 0xd2, 0x80, 0x45, 0x89, 0xb8, 0xde, 0xce, 0x99, 0x9b, 0xd9,
|
||||||
0xa5, 0x8a, 0x76, 0x56, 0xa0, 0xe3, 0xaf, 0x34, 0x18, 0x17, 0xd0, 0xf0, 0xf2, 0x1c, 0xbe, 0x98,
|
0xb1, 0x14, 0xeb, 0x0a, 0x82, 0xea, 0xea, 0x07, 0x65, 0x57, 0x9f, 0x42, 0x4b, 0xb1, 0xa0, 0x36,
|
||||||
0x1c, 0x57, 0xb2, 0xb4, 0x47, 0x90, 0xaf, 0x63, 0x28, 0x7b, 0x1d, 0x7b, 0x50, 0x95, 0xac, 0x29,
|
0x64, 0x3f, 0xac, 0x84, 0xec, 0x52, 0x57, 0xa0, 0xf6, 0xdc, 0xad, 0x32, 0x62, 0x77, 0x0b, 0x0c,
|
||||||
0x0d, 0xf7, 0xdf, 0xe6, 0xc2, 0x7d, 0xa2, 0x1e, 0x0f, 0x21, 0xa9, 0xbb, 0x45, 0x84, 0xdf, 0xeb,
|
0x39, 0x43, 0x09, 0xc0, 0x7f, 0xd7, 0xaa, 0x37, 0x3b, 0xec, 0xf5, 0xef, 0xab, 0x7a, 0xdb, 0xf0,
|
||||||
0x01, 0xdf, 0x0b, 0x94, 0x12, 0xfc, 0x5d, 0xa1, 0x53, 0xb0, 0xcd, 0x46, 0xf3, 0x53, 0x74, 0x0a,
|
0x68, 0x9c, 0xdf, 0xa0, 0xf0, 0x83, 0xfc, 0xd6, 0x2b, 0xb8, 0x30, 0xe4, 0x1d, 0x57, 0xf0, 0x5f,
|
||||||
0x03, 0x46, 0xbb, 0xe9, 0xcd, 0xc6, 0x3e, 0x11, 0xdf, 0xc5, 0x6e, 0x11, 0x1b, 0x75, 0x85, 0xdd,
|
0xc2, 0xd2, 0x2b, 0x9f, 0x8d, 0x7c, 0xc6, 0x66, 0x78, 0xeb, 0x10, 0x2c, 0x97, 0x85, 0x79, 0x1a,
|
||||||
0xe2, 0xf7, 0x30, 0xb1, 0xe5, 0xb0, 0x8e, 0xc3, 0xd8, 0x05, 0xfa, 0x2d, 0x82, 0xc9, 0x2c, 0x33,
|
0xa2, 0xde, 0x38, 0x6b, 0x0a, 0x66, 0xa9, 0xb1, 0x35, 0x08, 0x2f, 0x7d, 0xb5, 0x47, 0xe3, 0x84,
|
||||||
0xa3, 0xf8, 0x2d, 0xa0, 0x46, 0x37, 0x99, 0x76, 0x2e, 0x52, 0xc3, 0x4b, 0x10, 0x67, 0x84, 0x1c,
|
0x0c, 0xfb, 0x64, 0x10, 0x85, 0x43, 0xc6, 0xdd, 0xd1, 0x72, 0x4a, 0xb4, 0xb4, 0xc2, 0x6a, 0xba,
|
||||||
0x3a, 0xdd, 0x90, 0xb4, 0x9b, 0xa4, 0xe5, 0x7b, 0x6d, 0xc6, 0x5d, 0x53, 0x35, 0x33, 0xb4, 0xa8,
|
0x18, 0xc5, 0x27, 0x60, 0x1d, 0xba, 0xe1, 0x80, 0x04, 0xef, 0xc2, 0x10, 0xbc, 0x01, 0x4f, 0x6a,
|
||||||
0x82, 0x17, 0x74, 0x31, 0x8a, 0x77, 0x41, 0xdf, 0xb4, 0xbc, 0x16, 0x71, 0x2f, 0xc3, 0x10, 0xbc,
|
0x76, 0x13, 0xb8, 0x40, 0x92, 0xa7, 0xe2, 0x02, 0x45, 0x92, 0x51, 0xdc, 0x05, 0x54, 0xd9, 0x77,
|
||||||
0x00, 0xf3, 0x25, 0xbb, 0xc5, 0xd8, 0x44, 0x90, 0x07, 0x62, 0x13, 0x89, 0x93, 0x51, 0x5c, 0x07,
|
0xf2, 0x06, 0x6d, 0x58, 0xd5, 0xe4, 0x19, 0xc5, 0x2f, 0x78, 0x8f, 0x21, 0x6a, 0x7b, 0x7f, 0x4c,
|
||||||
0x94, 0xdb, 0xb7, 0xff, 0x06, 0x35, 0x98, 0x2e, 0xf0, 0x33, 0x8a, 0x1f, 0xf0, 0xb9, 0x28, 0xee,
|
0x33, 0x64, 0x98, 0xbf, 0x29, 0xc5, 0xa1, 0x1a, 0xa5, 0x43, 0x1d, 0xf1, 0x0e, 0xc1, 0xbc, 0x8a,
|
||||||
0x17, 0xcd, 0x2e, 0x4d, 0xd0, 0x69, 0xda, 0xb3, 0x7a, 0x87, 0xd2, 0x32, 0x87, 0x6a, 0xf2, 0x49,
|
0x51, 0xe5, 0x01, 0x68, 0x4c, 0x79, 0x00, 0x0e, 0x78, 0x7a, 0x14, 0x5b, 0xcc, 0xd4, 0xc7, 0x7d,
|
||||||
0x46, 0x2d, 0xc5, 0xa8, 0xd4, 0x54, 0xb4, 0x0f, 0x68, 0x2a, 0x1b, 0x3c, 0x85, 0x7a, 0xdb, 0x5d,
|
0xcd, 0x43, 0x59, 0x5b, 0x74, 0xa7, 0x66, 0xee, 0x3f, 0x4d, 0x40, 0xfd, 0x52, 0x5e, 0xf0, 0xaa,
|
||||||
0x68, 0x40, 0x7d, 0xc5, 0x43, 0xbc, 0x20, 0xf4, 0xd1, 0x53, 0xea, 0x0f, 0x15, 0x40, 0xcd, 0x4c,
|
0xf8, 0xd3, 0x03, 0xee, 0x53, 0x78, 0x14, 0xfa, 0x83, 0xab, 0x30, 0xcf, 0xbd, 0xc7, 0xfb, 0x9b,
|
||||||
0xee, 0xf0, 0x8a, 0xfa, 0xe1, 0x81, 0xf8, 0x27, 0x18, 0xf5, 0x9c, 0xd6, 0x89, 0x97, 0xe6, 0x67,
|
0x5d, 0x2f, 0x8a, 0xbc, 0x80, 0x88, 0xde, 0xfc, 0x62, 0x7c, 0xd9, 0xed, 0x27, 0xb1, 0x1f, 0x7a,
|
||||||
0x64, 0x84, 0xed, 0xfb, 0xb6, 0x4b, 0xe2, 0x87, 0x89, 0xa3, 0xee, 0x71, 0xbd, 0x19, 0x06, 0x8e,
|
0xdf, 0xba, 0xc1, 0x98, 0x38, 0x52, 0x1a, 0x7d, 0x02, 0x0f, 0x2f, 0xdd, 0x01, 0xf9, 0xc6, 0x39,
|
||||||
0x67, 0xbf, 0xb2, 0xdc, 0x2e, 0x31, 0x05, 0x37, 0x7a, 0x08, 0xd7, 0x8f, 0xad, 0x16, 0x79, 0x69,
|
0xe1, 0xd8, 0x72, 0xda, 0xc2, 0x5c, 0x18, 0x7d, 0x06, 0x0b, 0x71, 0x14, 0x90, 0x13, 0x72, 0x43,
|
||||||
0xee, 0x72, 0xdc, 0x3b, 0x48, 0x30, 0x65, 0x46, 0x7f, 0x86, 0xb1, 0xc0, 0x77, 0xc9, 0x2e, 0x39,
|
0x02, 0x6b, 0x8e, 0xaf, 0xdc, 0xd0, 0x56, 0x1e, 0x87, 0xc9, 0xc1, 0xbe, 0x58, 0x58, 0x48, 0xa3,
|
||||||
0x23, 0xae, 0x3e, 0xcc, 0x25, 0x17, 0x0a, 0x92, 0x3b, 0x5e, 0xb8, 0x71, 0x3f, 0x16, 0xec, 0x71,
|
0x8f, 0xa0, 0x49, 0x7e, 0xb4, 0xe6, 0x67, 0xd0, 0xd6, 0x24, 0x3f, 0xe2, 0x13, 0x68, 0xeb, 0x2e,
|
||||||
0xa3, 0xbb, 0x50, 0x21, 0xef, 0xf4, 0x91, 0x0b, 0x68, 0xab, 0x90, 0x77, 0x78, 0x17, 0x6a, 0x45,
|
0x4a, 0x2f, 0xe9, 0xa0, 0xfa, 0x5c, 0x3d, 0xc9, 0xca, 0xa6, 0x41, 0x5c, 0x96, 0x08, 0x0b, 0x3a,
|
||||||
0x17, 0x45, 0x17, 0xb6, 0x91, 0x6f, 0x81, 0xf3, 0x49, 0x99, 0x55, 0xb0, 0x8b, 0xd2, 0xa1, 0xc3,
|
0xa6, 0xdd, 0x18, 0xc5, 0xbf, 0x2a, 0x00, 0xdb, 0xcb, 0x0b, 0x96, 0xc4, 0xee, 0x20, 0x99, 0x25,
|
||||||
0xac, 0x6a, 0x37, 0x46, 0xf1, 0x1f, 0x7b, 0xa0, 0xf1, 0xc9, 0x11, 0x0b, 0x03, 0xab, 0x15, 0x5e,
|
0x1c, 0xfe, 0xd1, 0x80, 0x15, 0x6d, 0xd1, 0x84, 0x1b, 0xfc, 0x28, 0x1b, 0xcc, 0x08, 0xed, 0xa7,
|
||||||
0x24, 0x34, 0xbe, 0xd6, 0x60, 0xaa, 0x20, 0xd4, 0xe7, 0x06, 0xef, 0x26, 0xef, 0x52, 0xb1, 0xf6,
|
0xe3, 0xf4, 0x97, 0x5f, 0x66, 0xcb, 0xd1, 0x19, 0xe8, 0x63, 0x58, 0xf5, 0xca, 0xb0, 0xf7, 0x2b,
|
||||||
0xbd, 0x6e, 0xf4, 0xcb, 0x2f, 0xb3, 0x6a, 0x16, 0x17, 0xd0, 0x1f, 0x60, 0xda, 0xce, 0xc2, 0xf0,
|
0x97, 0xfd, 0xc0, 0xaf, 0xf8, 0x3d, 0xc7, 0xc4, 0xc2, 0x43, 0xb0, 0xcc, 0xc7, 0x60, 0x14, 0x7d,
|
||||||
0xe7, 0x16, 0x7b, 0xc3, 0xaf, 0xf8, 0x9a, 0xa9, 0x5a, 0xc2, 0x6d, 0xd0, 0xd5, 0xc7, 0x60, 0x14,
|
0x95, 0xbd, 0xb6, 0x2a, 0x23, 0x77, 0x9e, 0x95, 0x39, 0x4f, 0x5f, 0x69, 0x58, 0x83, 0x4f, 0xb9,
|
||||||
0x3d, 0x4f, 0x3a, 0xb5, 0xbc, 0x90, 0x3a, 0x4f, 0x4f, 0x9c, 0x57, 0x94, 0x54, 0xc8, 0xe0, 0x3d,
|
0x16, 0xfe, 0xd0, 0x86, 0x6a, 0x55, 0x9f, 0x90, 0xb6, 0x25, 0x2f, 0x36, 0x2b, 0x5e, 0x3c, 0x87,
|
||||||
0xae, 0x85, 0x37, 0x69, 0x4f, 0xae, 0xfc, 0x7d, 0xd2, 0x39, 0xe3, 0xc5, 0x4a, 0xce, 0x8b, 0xff,
|
0x27, 0x35, 0xfb, 0xdd, 0x19, 0x97, 0x1c, 0x54, 0x01, 0xb8, 0x80, 0x05, 0x93, 0xeb, 0xd4, 0x8b,
|
||||||
0x83, 0xf9, 0x92, 0xfd, 0x2e, 0x05, 0xeb, 0x6c, 0xe4, 0x07, 0x82, 0x18, 0x5e, 0xf4, 0xaf, 0x65,
|
0xc2, 0x7b, 0xe5, 0x45, 0x8c, 0xa6, 0xab, 0xc6, 0x19, 0xba, 0x13, 0x41, 0x90, 0x7f, 0xe2, 0x6f,
|
||||||
0x0f, 0x7a, 0x9e, 0xcc, 0x0a, 0x31, 0x1a, 0x49, 0x75, 0x13, 0x24, 0x19, 0x07, 0x44, 0xfa, 0x79,
|
0x8b, 0x51, 0x49, 0x56, 0x5e, 0xf3, 0x58, 0x9f, 0xde, 0xcd, 0xe6, 0x92, 0xc2, 0x27, 0x73, 0x8e,
|
||||||
0xff, 0xe7, 0x49, 0x88, 0x5f, 0x19, 0xd1, 0x23, 0xb8, 0xd1, 0xea, 0x3d, 0xaa, 0xa1, 0x5a, 0x0a,
|
0x42, 0xc1, 0xfd, 0x62, 0x14, 0xa2, 0xed, 0x7b, 0x57, 0xbf, 0xec, 0xff, 0x6f, 0x05, 0xc4, 0x1c,
|
||||||
0x02, 0x32, 0xcf, 0x83, 0xc6, 0xac, 0x8a, 0xcc, 0x28, 0x7a, 0x08, 0x63, 0x6f, 0xd3, 0xf9, 0x18,
|
0x10, 0xfd, 0x06, 0x1e, 0x0f, 0x8a, 0x21, 0x18, 0x6a, 0xe7, 0xa8, 0xa3, 0x34, 0xc2, 0xb3, 0x3b,
|
||||||
0x4d, 0x27, 0x4c, 0xf2, 0x04, 0x6f, 0xcc, 0x14, 0x89, 0xb1, 0xdc, 0x69, 0x3a, 0x5e, 0x0a, 0x39,
|
0x26, 0x32, 0xa3, 0xe8, 0x13, 0x58, 0x78, 0x93, 0x37, 0xc9, 0x68, 0x35, 0x13, 0x52, 0xdb, 0x78,
|
||||||
0x79, 0x34, 0x15, 0x72, 0x99, 0x29, 0x14, 0x3d, 0x85, 0xaa, 0x2d, 0xbf, 0xc1, 0xa1, 0xb9, 0x34,
|
0x7b, 0x4d, 0x27, 0x8a, 0x75, 0xd7, 0x79, 0x8f, 0x29, 0xd7, 0xa9, 0xfd, 0xa9, 0x5c, 0x57, 0x6a,
|
||||||
0x20, 0x72, 0x2f, 0x79, 0x86, 0xae, 0x5e, 0x60, 0x14, 0x3d, 0x86, 0x71, 0x26, 0xbd, 0x89, 0xa1,
|
0x45, 0xd1, 0x17, 0xd0, 0xf2, 0xd4, 0xf9, 0x19, 0x5a, 0xcf, 0x23, 0xb6, 0x32, 0x85, 0xb3, 0x2d,
|
||||||
0xd9, 0x5c, 0x42, 0xa6, 0x3b, 0xcc, 0x29, 0xe9, 0x8c, 0xa2, 0xff, 0xc3, 0x9c, 0xad, 0x7e, 0xbb,
|
0x33, 0x83, 0x51, 0xf4, 0x39, 0x2c, 0x32, 0x65, 0xce, 0x85, 0x3a, 0x95, 0x8a, 0x91, 0xef, 0xb0,
|
||||||
0x42, 0xbf, 0xc9, 0x69, 0x2d, 0xbe, 0x2e, 0x19, 0x78, 0x10, 0x0b, 0xa3, 0xe8, 0x18, 0xe6, 0xed,
|
0x6e, 0xa4, 0x33, 0x8a, 0xbe, 0x87, 0x75, 0xcf, 0x3c, 0x9c, 0x42, 0x3f, 0xab, 0x68, 0xd5, 0x47,
|
||||||
0xb2, 0x37, 0x22, 0x74, 0xbb, 0xb7, 0x41, 0xe9, 0x1b, 0x96, 0xb1, 0x3a, 0x98, 0x89, 0x51, 0x74,
|
0x49, 0x36, 0x9e, 0x26, 0xc2, 0x28, 0xba, 0x84, 0x27, 0x5e, 0xdd, 0x70, 0x08, 0x7d, 0x50, 0x6c,
|
||||||
0x00, 0x28, 0x2c, 0xbc, 0xc4, 0xa0, 0xc5, 0x44, 0x56, 0xf9, 0x4e, 0x64, 0xdc, 0xea, 0xb3, 0xca,
|
0x50, 0x3b, 0xb0, 0xb2, 0x9f, 0x4f, 0x17, 0x62, 0x14, 0x9d, 0x03, 0x4a, 0xb4, 0x71, 0x0c, 0xda,
|
||||||
0x28, 0x6a, 0x81, 0x6e, 0x97, 0x3c, 0x41, 0x20, 0x9c, 0xc9, 0x5e, 0xe5, 0x03, 0x8a, 0x71, 0x7b,
|
0xcc, 0xd6, 0x1a, 0x87, 0x45, 0xf6, 0xd3, 0x09, 0x5c, 0x46, 0xd1, 0x00, 0x2c, 0xaf, 0x66, 0x0e,
|
||||||
0x20, 0x4f, 0x6c, 0xb7, 0x5d, 0x18, 0xfd, 0x85, 0xdd, 0xca, 0x67, 0x0a, 0x61, 0x77, 0xc9, 0x9b,
|
0x81, 0x70, 0xa9, 0xbc, 0x18, 0xa7, 0x28, 0xf6, 0x07, 0x53, 0x65, 0x84, 0xdd, 0x9e, 0x36, 0x0b,
|
||||||
0xc1, 0x0b, 0x98, 0xb6, 0x8b, 0xd3, 0x38, 0x52, 0x4b, 0x89, 0x28, 0x5b, 0xea, 0xb7, 0xcc, 0x6b,
|
0x90, 0x76, 0x1b, 0x67, 0x15, 0xd2, 0xee, 0x9a, 0x21, 0xc2, 0x6b, 0x58, 0xf5, 0xf4, 0x56, 0x1d,
|
||||||
0xd9, 0xc4, 0x49, 0x76, 0x30, 0x46, 0x69, 0xfd, 0x2f, 0x8e, 0xe7, 0x86, 0x51, 0xb6, 0x24, 0x8e,
|
0x99, 0x57, 0xc9, 0x28, 0x7b, 0x36, 0x89, 0xcd, 0x8b, 0xed, 0xd2, 0x55, 0xb9, 0x83, 0x46, 0xf9,
|
||||||
0x9c, 0x1b, 0x66, 0xe5, 0x23, 0x17, 0xc7, 0x6c, 0xf9, 0xc8, 0xaa, 0x29, 0x78, 0x0f, 0xa6, 0x9c,
|
0x03, 0xa5, 0xf7, 0xf1, 0xb6, 0x5d, 0xc7, 0x92, 0x47, 0xae, 0x74, 0xc0, 0xea, 0x91, 0xf5, 0x7e,
|
||||||
0xfc, 0x1c, 0x89, 0x16, 0x12, 0x19, 0xd5, 0x4c, 0x6b, 0x2c, 0x96, 0x2f, 0xc6, 0x49, 0x2d, 0x92,
|
0x5c, 0x3d, 0xb2, 0xa9, 0x75, 0x3e, 0x85, 0x15, 0xbf, 0xda, 0x88, 0xa2, 0x8d, 0x6c, 0x8d, 0xa9,
|
||||||
0x53, 0x24, 0xb5, 0x3c, 0x17, 0x89, 0xa4, 0xce, 0x8e, 0x27, 0x85, 0xdb, 0x8c, 0xa0, 0x79, 0xc9,
|
0x29, 0xb6, 0x37, 0xeb, 0x99, 0x22, 0xa9, 0x65, 0x72, 0xca, 0xa4, 0x56, 0x9b, 0x2f, 0x99, 0xd4,
|
||||||
0x6d, 0x26, 0xa3, 0x44, 0xc9, 0x6d, 0x0a, 0x4c, 0xff, 0x18, 0xc6, 0xdb, 0x12, 0x9c, 0x16, 0x39,
|
0xe5, 0x7e, 0x48, 0xbb, 0xcd, 0xb4, 0x2f, 0xa8, 0xb9, 0xcd, 0xac, 0x77, 0xa9, 0xb9, 0x4d, 0xd9,
|
||||||
0x9e, 0x03, 0xe4, 0x22, 0xc7, 0xf3, 0xd8, 0x3b, 0xba, 0xb8, 0x4e, 0x16, 0xa4, 0x8a, 0x8b, 0x2b,
|
0x50, 0x7c, 0x0e, 0x8b, 0x43, 0x05, 0xd7, 0xcb, 0x1c, 0xaf, 0x74, 0x06, 0x32, 0xc7, 0xab, 0x4d,
|
||||||
0x42, 0x61, 0x71, 0x71, 0x0a, 0x5c, 0x8b, 0x5e, 0x43, 0xad, 0xa5, 0x02, 0xbd, 0x68, 0x39, 0xad,
|
0x40, 0x7a, 0x71, 0xa3, 0x32, 0x5a, 0x96, 0x17, 0xa7, 0x63, 0x72, 0x79, 0x71, 0x06, 0x80, 0x8d,
|
||||||
0xa9, 0x25, 0x00, 0xdb, 0x58, 0xe9, 0xcf, 0x10, 0x7b, 0x5c, 0x58, 0x29, 0x3c, 0x2e, 0x83, 0x60,
|
0xbe, 0x83, 0xf6, 0xc0, 0x84, 0xbe, 0xd1, 0x56, 0x5e, 0x53, 0x6b, 0x90, 0xbe, 0xbd, 0x3d, 0x59,
|
||||||
0xe1, 0xf1, 0x0c, 0xd2, 0x8d, 0x4e, 0x97, 0xb3, 0x49, 0x9c, 0xae, 0x08, 0xa4, 0xc5, 0xe9, 0x14,
|
0x40, 0x78, 0x5c, 0x5a, 0x29, 0x3d, 0xae, 0xa2, 0x71, 0xe9, 0xf1, 0x12, 0xe4, 0x4e, 0x4f, 0x57,
|
||||||
0x98, 0x39, 0xa9, 0x85, 0x2a, 0xf4, 0x2b, 0xd7, 0xc2, 0x12, 0x4c, 0x2d, 0xd7, 0xc2, 0x52, 0x00,
|
0xb1, 0x49, 0x9e, 0x4e, 0x47, 0xf4, 0xf2, 0x74, 0x06, 0xf0, 0x9e, 0xd5, 0x42, 0x13, 0x0c, 0x57,
|
||||||
0x1d, 0x47, 0x47, 0x0e, 0xd5, 0xca, 0xd1, 0x51, 0x44, 0xc9, 0x72, 0x74, 0xa8, 0xe0, 0xf0, 0x01,
|
0x6b, 0x61, 0x0d, 0xb8, 0x57, 0x6b, 0x61, 0x2d, 0x92, 0x17, 0xd1, 0x51, 0x81, 0xda, 0x6a, 0x74,
|
||||||
0x20, 0x56, 0xc4, 0xb3, 0x8b, 0xe5, 0xc0, 0x4c, 0xda, 0x52, 0x8d, 0xcb, 0xd0, 0xbf, 0x61, 0xc6,
|
0xe8, 0xd0, 0x5d, 0x8d, 0x0e, 0x13, 0x46, 0x3f, 0x07, 0xc4, 0x74, 0xc0, 0xbd, 0x59, 0x8f, 0x1c,
|
||||||
0x56, 0x00, 0x1a, 0x94, 0x2f, 0x10, 0x39, 0xd0, 0x66, 0x2c, 0xf7, 0x5d, 0x8f, 0xc3, 0xc7, 0x56,
|
0x95, 0x2d, 0xcd, 0xc0, 0x11, 0xfd, 0x11, 0xd6, 0x3c, 0x03, 0xe2, 0x42, 0xd5, 0x02, 0x51, 0x41,
|
||||||
0x61, 0x0e, 0xb4, 0x9c, 0xad, 0xf0, 0x05, 0x84, 0x23, 0xc2, 0xa7, 0x1c, 0xb2, 0x48, 0x46, 0xcb,
|
0x95, 0xf6, 0xd6, 0x44, 0xbe, 0x08, 0x1f, 0xcf, 0x04, 0x8a, 0xd0, 0x56, 0xb9, 0xc2, 0x6b, 0x10,
|
||||||
0xd8, 0x01, 0xa9, 0xab, 0x9a, 0x40, 0x23, 0x05, 0xa3, 0xf3, 0xc0, 0xe3, 0xe9, 0xf2, 0xeb, 0x5b,
|
0x4c, 0x86, 0x4f, 0x3d, 0xa6, 0x52, 0x8c, 0x56, 0x81, 0x0e, 0x32, 0x57, 0x35, 0x09, 0x9d, 0x34,
|
||||||
0xfb, 0x94, 0x78, 0x87, 0x3b, 0x0d, 0xe9, 0xbf, 0x48, 0x2e, 0xf3, 0x57, 0xfe, 0x7b, 0x34, 0xc2,
|
0xa3, 0x35, 0x94, 0xf4, 0x7d, 0x15, 0x76, 0x49, 0xcc, 0xa2, 0xbd, 0x90, 0x3a, 0x56, 0xd2, 0x5e,
|
||||||
0x49, 0x1b, 0xbf, 0x04, 0x00, 0x00, 0xff, 0xff, 0x19, 0x28, 0x60, 0x4b, 0xfe, 0x1c, 0x00, 0x00,
|
0x48, 0x03, 0xec, 0xf9, 0x62, 0xeb, 0xbb, 0xa7, 0x67, 0x94, 0x84, 0x7f, 0x3e, 0xee, 0x29, 0x7f,
|
||||||
|
0x48, 0xf2, 0x65, 0xbf, 0xe6, 0xbf, 0x17, 0xf3, 0x9c, 0x74, 0xf0, 0xff, 0x00, 0x00, 0x00, 0xff,
|
||||||
|
0xff, 0x9c, 0xc0, 0xab, 0xba, 0x02, 0x1d, 0x00, 0x00,
|
||||||
}
|
}
|
||||||
|
@ -279,7 +279,7 @@ message GetUserInGroupMembersReq {
|
|||||||
repeated string groupIDs = 2;
|
repeated string groupIDs = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message getUserInGroupMembersResp{
|
message GetUserInGroupMembersResp{
|
||||||
repeated sdkws.GroupMemberFullInfo members = 1;
|
repeated sdkws.GroupMemberFullInfo members = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -291,7 +291,14 @@ message GetGroupMemberUserIDResp{
|
|||||||
repeated string userIDs = 1;
|
repeated string userIDs = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
message GetGroupMemberRoleLevelReq{
|
||||||
|
string groupID = 1;
|
||||||
|
repeated int32 roleLevels = 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
message GetGroupMemberRoleLevelResp {
|
||||||
|
repeated sdkws.GroupMemberFullInfo members = 1;
|
||||||
|
}
|
||||||
|
|
||||||
service group{
|
service group{
|
||||||
//创建群
|
//创建群
|
||||||
@ -350,6 +357,8 @@ service group{
|
|||||||
rpc getUserInGroupMembers(GetUserInGroupMembersReq) returns (GetUserInGroupMembersResp);
|
rpc getUserInGroupMembers(GetUserInGroupMembersReq) returns (GetUserInGroupMembersResp);
|
||||||
//获取群成员用户ID
|
//获取群成员用户ID
|
||||||
rpc getGroupMemberUserID(GetGroupMemberUserIDReq) returns (GetGroupMemberUserIDResp);
|
rpc getGroupMemberUserID(GetGroupMemberUserIDReq) returns (GetGroupMemberUserIDResp);
|
||||||
|
//查询群组中对应级别的成员
|
||||||
|
rpc GetGroupMemberRoleLevel(GetGroupMemberRoleLevelReq)returns (GetGroupMemberRoleLevelResp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@ func (m *MsgDataToMQ) Reset() { *m = MsgDataToMQ{} }
|
|||||||
func (m *MsgDataToMQ) String() string { return proto.CompactTextString(m) }
|
func (m *MsgDataToMQ) String() string { return proto.CompactTextString(m) }
|
||||||
func (*MsgDataToMQ) ProtoMessage() {}
|
func (*MsgDataToMQ) ProtoMessage() {}
|
||||||
func (*MsgDataToMQ) Descriptor() ([]byte, []int) {
|
func (*MsgDataToMQ) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{0}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{0}
|
||||||
}
|
}
|
||||||
func (m *MsgDataToMQ) XXX_Unmarshal(b []byte) error {
|
func (m *MsgDataToMQ) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_MsgDataToMQ.Unmarshal(m, b)
|
return xxx_messageInfo_MsgDataToMQ.Unmarshal(m, b)
|
||||||
@ -91,7 +91,7 @@ func (m *MsgDataToDB) Reset() { *m = MsgDataToDB{} }
|
|||||||
func (m *MsgDataToDB) String() string { return proto.CompactTextString(m) }
|
func (m *MsgDataToDB) String() string { return proto.CompactTextString(m) }
|
||||||
func (*MsgDataToDB) ProtoMessage() {}
|
func (*MsgDataToDB) ProtoMessage() {}
|
||||||
func (*MsgDataToDB) Descriptor() ([]byte, []int) {
|
func (*MsgDataToDB) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{1}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{1}
|
||||||
}
|
}
|
||||||
func (m *MsgDataToDB) XXX_Unmarshal(b []byte) error {
|
func (m *MsgDataToDB) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_MsgDataToDB.Unmarshal(m, b)
|
return xxx_messageInfo_MsgDataToDB.Unmarshal(m, b)
|
||||||
@ -138,7 +138,7 @@ func (m *PushMsgDataToMQ) Reset() { *m = PushMsgDataToMQ{} }
|
|||||||
func (m *PushMsgDataToMQ) String() string { return proto.CompactTextString(m) }
|
func (m *PushMsgDataToMQ) String() string { return proto.CompactTextString(m) }
|
||||||
func (*PushMsgDataToMQ) ProtoMessage() {}
|
func (*PushMsgDataToMQ) ProtoMessage() {}
|
||||||
func (*PushMsgDataToMQ) Descriptor() ([]byte, []int) {
|
func (*PushMsgDataToMQ) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{2}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{2}
|
||||||
}
|
}
|
||||||
func (m *PushMsgDataToMQ) XXX_Unmarshal(b []byte) error {
|
func (m *PushMsgDataToMQ) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_PushMsgDataToMQ.Unmarshal(m, b)
|
return xxx_messageInfo_PushMsgDataToMQ.Unmarshal(m, b)
|
||||||
@ -193,7 +193,7 @@ func (m *MsgDataToMongoByMQ) Reset() { *m = MsgDataToMongoByMQ{} }
|
|||||||
func (m *MsgDataToMongoByMQ) String() string { return proto.CompactTextString(m) }
|
func (m *MsgDataToMongoByMQ) String() string { return proto.CompactTextString(m) }
|
||||||
func (*MsgDataToMongoByMQ) ProtoMessage() {}
|
func (*MsgDataToMongoByMQ) ProtoMessage() {}
|
||||||
func (*MsgDataToMongoByMQ) Descriptor() ([]byte, []int) {
|
func (*MsgDataToMongoByMQ) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{3}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{3}
|
||||||
}
|
}
|
||||||
func (m *MsgDataToMongoByMQ) XXX_Unmarshal(b []byte) error {
|
func (m *MsgDataToMongoByMQ) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_MsgDataToMongoByMQ.Unmarshal(m, b)
|
return xxx_messageInfo_MsgDataToMongoByMQ.Unmarshal(m, b)
|
||||||
@ -241,26 +241,6 @@ func (m *MsgDataToMongoByMQ) GetTriggerID() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
// message PullMessageReq {
|
|
||||||
// string UserID = 1;
|
|
||||||
// int64 SeqBegin = 2;
|
|
||||||
// int64 SeqEnd = 3;
|
|
||||||
// string OperationID = 4;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// message PullMessageResp {
|
|
||||||
// int32 ErrCode = 1;
|
|
||||||
// string ErrMsg = 2;
|
|
||||||
// int64 MaxSeq = 3;
|
|
||||||
// int64 MinSeq = 4;
|
|
||||||
// repeated GatherFormat SingleUserMsg = 5;
|
|
||||||
// repeated GatherFormat GroupUserMsg = 6;
|
|
||||||
// }
|
|
||||||
// message PullMessageBySeqListReq{
|
|
||||||
// string UserID = 1;
|
|
||||||
// string OperationID = 2;
|
|
||||||
// repeated int64 seqList =3;
|
|
||||||
// }
|
|
||||||
type GetMaxAndMinSeqReq struct {
|
type GetMaxAndMinSeqReq struct {
|
||||||
UserID string `protobuf:"bytes,1,opt,name=UserID" json:"UserID,omitempty"`
|
UserID string `protobuf:"bytes,1,opt,name=UserID" json:"UserID,omitempty"`
|
||||||
OperationID string `protobuf:"bytes,2,opt,name=OperationID" json:"OperationID,omitempty"`
|
OperationID string `protobuf:"bytes,2,opt,name=OperationID" json:"OperationID,omitempty"`
|
||||||
@ -273,7 +253,7 @@ func (m *GetMaxAndMinSeqReq) Reset() { *m = GetMaxAndMinSeqReq{} }
|
|||||||
func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetMaxAndMinSeqReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetMaxAndMinSeqReq) ProtoMessage() {}
|
func (*GetMaxAndMinSeqReq) ProtoMessage() {}
|
||||||
func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) {
|
func (*GetMaxAndMinSeqReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{4}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{4}
|
||||||
}
|
}
|
||||||
func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetMaxAndMinSeqReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetMaxAndMinSeqReq.Unmarshal(m, b)
|
||||||
@ -321,7 +301,7 @@ func (m *GetMaxAndMinSeqResp) Reset() { *m = GetMaxAndMinSeqResp{} }
|
|||||||
func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetMaxAndMinSeqResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetMaxAndMinSeqResp) ProtoMessage() {}
|
func (*GetMaxAndMinSeqResp) ProtoMessage() {}
|
||||||
func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) {
|
func (*GetMaxAndMinSeqResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{5}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{5}
|
||||||
}
|
}
|
||||||
func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetMaxAndMinSeqResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetMaxAndMinSeqResp.Unmarshal(m, b)
|
||||||
@ -370,8 +350,6 @@ func (m *GetMaxAndMinSeqResp) GetMinSeq() uint32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type SendMsgReq struct {
|
type SendMsgReq struct {
|
||||||
Token string `protobuf:"bytes,1,opt,name=token" json:"token,omitempty"`
|
|
||||||
OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"`
|
|
||||||
MsgData *sdkws.MsgData `protobuf:"bytes,3,opt,name=msgData" json:"msgData,omitempty"`
|
MsgData *sdkws.MsgData `protobuf:"bytes,3,opt,name=msgData" json:"msgData,omitempty"`
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
@ -382,7 +360,7 @@ func (m *SendMsgReq) Reset() { *m = SendMsgReq{} }
|
|||||||
func (m *SendMsgReq) String() string { return proto.CompactTextString(m) }
|
func (m *SendMsgReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SendMsgReq) ProtoMessage() {}
|
func (*SendMsgReq) ProtoMessage() {}
|
||||||
func (*SendMsgReq) Descriptor() ([]byte, []int) {
|
func (*SendMsgReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{6}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{6}
|
||||||
}
|
}
|
||||||
func (m *SendMsgReq) XXX_Unmarshal(b []byte) error {
|
func (m *SendMsgReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_SendMsgReq.Unmarshal(m, b)
|
return xxx_messageInfo_SendMsgReq.Unmarshal(m, b)
|
||||||
@ -402,20 +380,6 @@ func (m *SendMsgReq) XXX_DiscardUnknown() {
|
|||||||
|
|
||||||
var xxx_messageInfo_SendMsgReq proto.InternalMessageInfo
|
var xxx_messageInfo_SendMsgReq proto.InternalMessageInfo
|
||||||
|
|
||||||
func (m *SendMsgReq) GetToken() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.Token
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *SendMsgReq) GetOperationID() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.OperationID
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *SendMsgReq) GetMsgData() *sdkws.MsgData {
|
func (m *SendMsgReq) GetMsgData() *sdkws.MsgData {
|
||||||
if m != nil {
|
if m != nil {
|
||||||
return m.MsgData
|
return m.MsgData
|
||||||
@ -424,8 +388,6 @@ func (m *SendMsgReq) GetMsgData() *sdkws.MsgData {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type SendMsgResp struct {
|
type SendMsgResp struct {
|
||||||
ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"`
|
|
||||||
ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"`
|
|
||||||
ServerMsgID string `protobuf:"bytes,4,opt,name=serverMsgID" json:"serverMsgID,omitempty"`
|
ServerMsgID string `protobuf:"bytes,4,opt,name=serverMsgID" json:"serverMsgID,omitempty"`
|
||||||
ClientMsgID string `protobuf:"bytes,5,opt,name=clientMsgID" json:"clientMsgID,omitempty"`
|
ClientMsgID string `protobuf:"bytes,5,opt,name=clientMsgID" json:"clientMsgID,omitempty"`
|
||||||
SendTime int64 `protobuf:"varint,6,opt,name=sendTime" json:"sendTime,omitempty"`
|
SendTime int64 `protobuf:"varint,6,opt,name=sendTime" json:"sendTime,omitempty"`
|
||||||
@ -438,7 +400,7 @@ func (m *SendMsgResp) Reset() { *m = SendMsgResp{} }
|
|||||||
func (m *SendMsgResp) String() string { return proto.CompactTextString(m) }
|
func (m *SendMsgResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SendMsgResp) ProtoMessage() {}
|
func (*SendMsgResp) ProtoMessage() {}
|
||||||
func (*SendMsgResp) Descriptor() ([]byte, []int) {
|
func (*SendMsgResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{7}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{7}
|
||||||
}
|
}
|
||||||
func (m *SendMsgResp) XXX_Unmarshal(b []byte) error {
|
func (m *SendMsgResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_SendMsgResp.Unmarshal(m, b)
|
return xxx_messageInfo_SendMsgResp.Unmarshal(m, b)
|
||||||
@ -458,20 +420,6 @@ func (m *SendMsgResp) XXX_DiscardUnknown() {
|
|||||||
|
|
||||||
var xxx_messageInfo_SendMsgResp proto.InternalMessageInfo
|
var xxx_messageInfo_SendMsgResp proto.InternalMessageInfo
|
||||||
|
|
||||||
func (m *SendMsgResp) GetErrCode() int32 {
|
|
||||||
if m != nil {
|
|
||||||
return m.ErrCode
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *SendMsgResp) GetErrMsg() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.ErrMsg
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *SendMsgResp) GetServerMsgID() string {
|
func (m *SendMsgResp) GetServerMsgID() string {
|
||||||
if m != nil {
|
if m != nil {
|
||||||
return m.ServerMsgID
|
return m.ServerMsgID
|
||||||
@ -495,8 +443,6 @@ func (m *SendMsgResp) GetSendTime() int64 {
|
|||||||
|
|
||||||
type ClearMsgReq struct {
|
type ClearMsgReq struct {
|
||||||
UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"`
|
UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"`
|
||||||
OpUserID string `protobuf:"bytes,2,opt,name=opUserID" json:"opUserID,omitempty"`
|
|
||||||
OperationID string `protobuf:"bytes,3,opt,name=operationID" json:"operationID,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
XXX_sizecache int32 `json:"-"`
|
XXX_sizecache int32 `json:"-"`
|
||||||
@ -506,7 +452,7 @@ func (m *ClearMsgReq) Reset() { *m = ClearMsgReq{} }
|
|||||||
func (m *ClearMsgReq) String() string { return proto.CompactTextString(m) }
|
func (m *ClearMsgReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*ClearMsgReq) ProtoMessage() {}
|
func (*ClearMsgReq) ProtoMessage() {}
|
||||||
func (*ClearMsgReq) Descriptor() ([]byte, []int) {
|
func (*ClearMsgReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{8}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{8}
|
||||||
}
|
}
|
||||||
func (m *ClearMsgReq) XXX_Unmarshal(b []byte) error {
|
func (m *ClearMsgReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_ClearMsgReq.Unmarshal(m, b)
|
return xxx_messageInfo_ClearMsgReq.Unmarshal(m, b)
|
||||||
@ -533,23 +479,7 @@ func (m *ClearMsgReq) GetUserID() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *ClearMsgReq) GetOpUserID() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.OpUserID
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ClearMsgReq) GetOperationID() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.OperationID
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
type ClearMsgResp struct {
|
type ClearMsgResp struct {
|
||||||
ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"`
|
|
||||||
ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
XXX_sizecache int32 `json:"-"`
|
XXX_sizecache int32 `json:"-"`
|
||||||
@ -559,7 +489,7 @@ func (m *ClearMsgResp) Reset() { *m = ClearMsgResp{} }
|
|||||||
func (m *ClearMsgResp) String() string { return proto.CompactTextString(m) }
|
func (m *ClearMsgResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*ClearMsgResp) ProtoMessage() {}
|
func (*ClearMsgResp) ProtoMessage() {}
|
||||||
func (*ClearMsgResp) Descriptor() ([]byte, []int) {
|
func (*ClearMsgResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{9}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{9}
|
||||||
}
|
}
|
||||||
func (m *ClearMsgResp) XXX_Unmarshal(b []byte) error {
|
func (m *ClearMsgResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_ClearMsgResp.Unmarshal(m, b)
|
return xxx_messageInfo_ClearMsgResp.Unmarshal(m, b)
|
||||||
@ -579,26 +509,10 @@ func (m *ClearMsgResp) XXX_DiscardUnknown() {
|
|||||||
|
|
||||||
var xxx_messageInfo_ClearMsgResp proto.InternalMessageInfo
|
var xxx_messageInfo_ClearMsgResp proto.InternalMessageInfo
|
||||||
|
|
||||||
func (m *ClearMsgResp) GetErrCode() int32 {
|
|
||||||
if m != nil {
|
|
||||||
return m.ErrCode
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *ClearMsgResp) GetErrMsg() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.ErrMsg
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
type SetMsgMinSeqReq struct {
|
type SetMsgMinSeqReq struct {
|
||||||
UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"`
|
UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"`
|
||||||
GroupID string `protobuf:"bytes,2,opt,name=groupID" json:"groupID,omitempty"`
|
GroupID string `protobuf:"bytes,2,opt,name=groupID" json:"groupID,omitempty"`
|
||||||
MinSeq uint32 `protobuf:"varint,3,opt,name=minSeq" json:"minSeq,omitempty"`
|
MinSeq uint32 `protobuf:"varint,3,opt,name=minSeq" json:"minSeq,omitempty"`
|
||||||
OperationID string `protobuf:"bytes,4,opt,name=operationID" json:"operationID,omitempty"`
|
|
||||||
OpUserID string `protobuf:"bytes,5,opt,name=opUserID" json:"opUserID,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
XXX_sizecache int32 `json:"-"`
|
XXX_sizecache int32 `json:"-"`
|
||||||
@ -608,7 +522,7 @@ func (m *SetMsgMinSeqReq) Reset() { *m = SetMsgMinSeqReq{} }
|
|||||||
func (m *SetMsgMinSeqReq) String() string { return proto.CompactTextString(m) }
|
func (m *SetMsgMinSeqReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SetMsgMinSeqReq) ProtoMessage() {}
|
func (*SetMsgMinSeqReq) ProtoMessage() {}
|
||||||
func (*SetMsgMinSeqReq) Descriptor() ([]byte, []int) {
|
func (*SetMsgMinSeqReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{10}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{10}
|
||||||
}
|
}
|
||||||
func (m *SetMsgMinSeqReq) XXX_Unmarshal(b []byte) error {
|
func (m *SetMsgMinSeqReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_SetMsgMinSeqReq.Unmarshal(m, b)
|
return xxx_messageInfo_SetMsgMinSeqReq.Unmarshal(m, b)
|
||||||
@ -649,23 +563,7 @@ func (m *SetMsgMinSeqReq) GetMinSeq() uint32 {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *SetMsgMinSeqReq) GetOperationID() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.OperationID
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *SetMsgMinSeqReq) GetOpUserID() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.OpUserID
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
type SetMsgMinSeqResp struct {
|
type SetMsgMinSeqResp struct {
|
||||||
ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"`
|
|
||||||
ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
XXX_sizecache int32 `json:"-"`
|
XXX_sizecache int32 `json:"-"`
|
||||||
@ -675,7 +573,7 @@ func (m *SetMsgMinSeqResp) Reset() { *m = SetMsgMinSeqResp{} }
|
|||||||
func (m *SetMsgMinSeqResp) String() string { return proto.CompactTextString(m) }
|
func (m *SetMsgMinSeqResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SetMsgMinSeqResp) ProtoMessage() {}
|
func (*SetMsgMinSeqResp) ProtoMessage() {}
|
||||||
func (*SetMsgMinSeqResp) Descriptor() ([]byte, []int) {
|
func (*SetMsgMinSeqResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{11}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{11}
|
||||||
}
|
}
|
||||||
func (m *SetMsgMinSeqResp) XXX_Unmarshal(b []byte) error {
|
func (m *SetMsgMinSeqResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_SetMsgMinSeqResp.Unmarshal(m, b)
|
return xxx_messageInfo_SetMsgMinSeqResp.Unmarshal(m, b)
|
||||||
@ -695,22 +593,7 @@ func (m *SetMsgMinSeqResp) XXX_DiscardUnknown() {
|
|||||||
|
|
||||||
var xxx_messageInfo_SetMsgMinSeqResp proto.InternalMessageInfo
|
var xxx_messageInfo_SetMsgMinSeqResp proto.InternalMessageInfo
|
||||||
|
|
||||||
func (m *SetMsgMinSeqResp) GetErrCode() int32 {
|
|
||||||
if m != nil {
|
|
||||||
return m.ErrCode
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *SetMsgMinSeqResp) GetErrMsg() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.ErrMsg
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
type SetSendMsgStatusReq struct {
|
type SetSendMsgStatusReq struct {
|
||||||
OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"`
|
|
||||||
Status int32 `protobuf:"varint,2,opt,name=status" json:"status,omitempty"`
|
Status int32 `protobuf:"varint,2,opt,name=status" json:"status,omitempty"`
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
@ -721,7 +604,7 @@ func (m *SetSendMsgStatusReq) Reset() { *m = SetSendMsgStatusReq{} }
|
|||||||
func (m *SetSendMsgStatusReq) String() string { return proto.CompactTextString(m) }
|
func (m *SetSendMsgStatusReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SetSendMsgStatusReq) ProtoMessage() {}
|
func (*SetSendMsgStatusReq) ProtoMessage() {}
|
||||||
func (*SetSendMsgStatusReq) Descriptor() ([]byte, []int) {
|
func (*SetSendMsgStatusReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{12}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{12}
|
||||||
}
|
}
|
||||||
func (m *SetSendMsgStatusReq) XXX_Unmarshal(b []byte) error {
|
func (m *SetSendMsgStatusReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_SetSendMsgStatusReq.Unmarshal(m, b)
|
return xxx_messageInfo_SetSendMsgStatusReq.Unmarshal(m, b)
|
||||||
@ -741,13 +624,6 @@ func (m *SetSendMsgStatusReq) XXX_DiscardUnknown() {
|
|||||||
|
|
||||||
var xxx_messageInfo_SetSendMsgStatusReq proto.InternalMessageInfo
|
var xxx_messageInfo_SetSendMsgStatusReq proto.InternalMessageInfo
|
||||||
|
|
||||||
func (m *SetSendMsgStatusReq) GetOperationID() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.OperationID
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *SetSendMsgStatusReq) GetStatus() int32 {
|
func (m *SetSendMsgStatusReq) GetStatus() int32 {
|
||||||
if m != nil {
|
if m != nil {
|
||||||
return m.Status
|
return m.Status
|
||||||
@ -756,8 +632,6 @@ func (m *SetSendMsgStatusReq) GetStatus() int32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type SetSendMsgStatusResp struct {
|
type SetSendMsgStatusResp struct {
|
||||||
ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"`
|
|
||||||
ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
XXX_sizecache int32 `json:"-"`
|
XXX_sizecache int32 `json:"-"`
|
||||||
@ -767,7 +641,7 @@ func (m *SetSendMsgStatusResp) Reset() { *m = SetSendMsgStatusResp{} }
|
|||||||
func (m *SetSendMsgStatusResp) String() string { return proto.CompactTextString(m) }
|
func (m *SetSendMsgStatusResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SetSendMsgStatusResp) ProtoMessage() {}
|
func (*SetSendMsgStatusResp) ProtoMessage() {}
|
||||||
func (*SetSendMsgStatusResp) Descriptor() ([]byte, []int) {
|
func (*SetSendMsgStatusResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{13}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{13}
|
||||||
}
|
}
|
||||||
func (m *SetSendMsgStatusResp) XXX_Unmarshal(b []byte) error {
|
func (m *SetSendMsgStatusResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_SetSendMsgStatusResp.Unmarshal(m, b)
|
return xxx_messageInfo_SetSendMsgStatusResp.Unmarshal(m, b)
|
||||||
@ -787,20 +661,6 @@ func (m *SetSendMsgStatusResp) XXX_DiscardUnknown() {
|
|||||||
|
|
||||||
var xxx_messageInfo_SetSendMsgStatusResp proto.InternalMessageInfo
|
var xxx_messageInfo_SetSendMsgStatusResp proto.InternalMessageInfo
|
||||||
|
|
||||||
func (m *SetSendMsgStatusResp) GetErrCode() int32 {
|
|
||||||
if m != nil {
|
|
||||||
return m.ErrCode
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *SetSendMsgStatusResp) GetErrMsg() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.ErrMsg
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
type GetSendMsgStatusReq struct {
|
type GetSendMsgStatusReq struct {
|
||||||
OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"`
|
OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"`
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
@ -812,7 +672,7 @@ func (m *GetSendMsgStatusReq) Reset() { *m = GetSendMsgStatusReq{} }
|
|||||||
func (m *GetSendMsgStatusReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetSendMsgStatusReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetSendMsgStatusReq) ProtoMessage() {}
|
func (*GetSendMsgStatusReq) ProtoMessage() {}
|
||||||
func (*GetSendMsgStatusReq) Descriptor() ([]byte, []int) {
|
func (*GetSendMsgStatusReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{14}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{14}
|
||||||
}
|
}
|
||||||
func (m *GetSendMsgStatusReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetSendMsgStatusReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetSendMsgStatusReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetSendMsgStatusReq.Unmarshal(m, b)
|
||||||
@ -852,7 +712,7 @@ func (m *GetSendMsgStatusResp) Reset() { *m = GetSendMsgStatusResp{} }
|
|||||||
func (m *GetSendMsgStatusResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetSendMsgStatusResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetSendMsgStatusResp) ProtoMessage() {}
|
func (*GetSendMsgStatusResp) ProtoMessage() {}
|
||||||
func (*GetSendMsgStatusResp) Descriptor() ([]byte, []int) {
|
func (*GetSendMsgStatusResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{15}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{15}
|
||||||
}
|
}
|
||||||
func (m *GetSendMsgStatusResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetSendMsgStatusResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetSendMsgStatusResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetSendMsgStatusResp.Unmarshal(m, b)
|
||||||
@ -894,10 +754,8 @@ func (m *GetSendMsgStatusResp) GetStatus() int32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type DelSuperGroupMsgReq struct {
|
type DelSuperGroupMsgReq struct {
|
||||||
OpUserID string `protobuf:"bytes,1,opt,name=opUserID" json:"opUserID,omitempty"`
|
|
||||||
UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"`
|
UserID string `protobuf:"bytes,2,opt,name=userID" json:"userID,omitempty"`
|
||||||
GroupID string `protobuf:"bytes,3,opt,name=groupID" json:"groupID,omitempty"`
|
GroupID string `protobuf:"bytes,3,opt,name=groupID" json:"groupID,omitempty"`
|
||||||
OperationID string `protobuf:"bytes,4,opt,name=operationID" json:"operationID,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
XXX_sizecache int32 `json:"-"`
|
XXX_sizecache int32 `json:"-"`
|
||||||
@ -907,7 +765,7 @@ func (m *DelSuperGroupMsgReq) Reset() { *m = DelSuperGroupMsgReq{} }
|
|||||||
func (m *DelSuperGroupMsgReq) String() string { return proto.CompactTextString(m) }
|
func (m *DelSuperGroupMsgReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*DelSuperGroupMsgReq) ProtoMessage() {}
|
func (*DelSuperGroupMsgReq) ProtoMessage() {}
|
||||||
func (*DelSuperGroupMsgReq) Descriptor() ([]byte, []int) {
|
func (*DelSuperGroupMsgReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{16}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{16}
|
||||||
}
|
}
|
||||||
func (m *DelSuperGroupMsgReq) XXX_Unmarshal(b []byte) error {
|
func (m *DelSuperGroupMsgReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_DelSuperGroupMsgReq.Unmarshal(m, b)
|
return xxx_messageInfo_DelSuperGroupMsgReq.Unmarshal(m, b)
|
||||||
@ -927,13 +785,6 @@ func (m *DelSuperGroupMsgReq) XXX_DiscardUnknown() {
|
|||||||
|
|
||||||
var xxx_messageInfo_DelSuperGroupMsgReq proto.InternalMessageInfo
|
var xxx_messageInfo_DelSuperGroupMsgReq proto.InternalMessageInfo
|
||||||
|
|
||||||
func (m *DelSuperGroupMsgReq) GetOpUserID() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.OpUserID
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *DelSuperGroupMsgReq) GetUserID() string {
|
func (m *DelSuperGroupMsgReq) GetUserID() string {
|
||||||
if m != nil {
|
if m != nil {
|
||||||
return m.UserID
|
return m.UserID
|
||||||
@ -948,16 +799,7 @@ func (m *DelSuperGroupMsgReq) GetGroupID() string {
|
|||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *DelSuperGroupMsgReq) GetOperationID() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.OperationID
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
type DelSuperGroupMsgResp struct {
|
type DelSuperGroupMsgResp struct {
|
||||||
ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"`
|
|
||||||
ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"`
|
|
||||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||||
XXX_unrecognized []byte `json:"-"`
|
XXX_unrecognized []byte `json:"-"`
|
||||||
XXX_sizecache int32 `json:"-"`
|
XXX_sizecache int32 `json:"-"`
|
||||||
@ -967,7 +809,7 @@ func (m *DelSuperGroupMsgResp) Reset() { *m = DelSuperGroupMsgResp{} }
|
|||||||
func (m *DelSuperGroupMsgResp) String() string { return proto.CompactTextString(m) }
|
func (m *DelSuperGroupMsgResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*DelSuperGroupMsgResp) ProtoMessage() {}
|
func (*DelSuperGroupMsgResp) ProtoMessage() {}
|
||||||
func (*DelSuperGroupMsgResp) Descriptor() ([]byte, []int) {
|
func (*DelSuperGroupMsgResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{17}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{17}
|
||||||
}
|
}
|
||||||
func (m *DelSuperGroupMsgResp) XXX_Unmarshal(b []byte) error {
|
func (m *DelSuperGroupMsgResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_DelSuperGroupMsgResp.Unmarshal(m, b)
|
return xxx_messageInfo_DelSuperGroupMsgResp.Unmarshal(m, b)
|
||||||
@ -987,20 +829,6 @@ func (m *DelSuperGroupMsgResp) XXX_DiscardUnknown() {
|
|||||||
|
|
||||||
var xxx_messageInfo_DelSuperGroupMsgResp proto.InternalMessageInfo
|
var xxx_messageInfo_DelSuperGroupMsgResp proto.InternalMessageInfo
|
||||||
|
|
||||||
func (m *DelSuperGroupMsgResp) GetErrCode() int32 {
|
|
||||||
if m != nil {
|
|
||||||
return m.ErrCode
|
|
||||||
}
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
func (m *DelSuperGroupMsgResp) GetErrMsg() string {
|
|
||||||
if m != nil {
|
|
||||||
return m.ErrMsg
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
type GetSuperGroupMsgReq struct {
|
type GetSuperGroupMsgReq struct {
|
||||||
OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"`
|
OperationID string `protobuf:"bytes,1,opt,name=operationID" json:"operationID,omitempty"`
|
||||||
Seq uint32 `protobuf:"varint,2,opt,name=Seq" json:"Seq,omitempty"`
|
Seq uint32 `protobuf:"varint,2,opt,name=Seq" json:"Seq,omitempty"`
|
||||||
@ -1014,7 +842,7 @@ func (m *GetSuperGroupMsgReq) Reset() { *m = GetSuperGroupMsgReq{} }
|
|||||||
func (m *GetSuperGroupMsgReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetSuperGroupMsgReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetSuperGroupMsgReq) ProtoMessage() {}
|
func (*GetSuperGroupMsgReq) ProtoMessage() {}
|
||||||
func (*GetSuperGroupMsgReq) Descriptor() ([]byte, []int) {
|
func (*GetSuperGroupMsgReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{18}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{18}
|
||||||
}
|
}
|
||||||
func (m *GetSuperGroupMsgReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetSuperGroupMsgReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetSuperGroupMsgReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetSuperGroupMsgReq.Unmarshal(m, b)
|
||||||
@ -1068,7 +896,7 @@ func (m *GetSuperGroupMsgResp) Reset() { *m = GetSuperGroupMsgResp{} }
|
|||||||
func (m *GetSuperGroupMsgResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetSuperGroupMsgResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetSuperGroupMsgResp) ProtoMessage() {}
|
func (*GetSuperGroupMsgResp) ProtoMessage() {}
|
||||||
func (*GetSuperGroupMsgResp) Descriptor() ([]byte, []int) {
|
func (*GetSuperGroupMsgResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{19}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{19}
|
||||||
}
|
}
|
||||||
func (m *GetSuperGroupMsgResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetSuperGroupMsgResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetSuperGroupMsgResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetSuperGroupMsgResp.Unmarshal(m, b)
|
||||||
@ -1121,7 +949,7 @@ func (m *GetWriteDiffMsgReq) Reset() { *m = GetWriteDiffMsgReq{} }
|
|||||||
func (m *GetWriteDiffMsgReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetWriteDiffMsgReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetWriteDiffMsgReq) ProtoMessage() {}
|
func (*GetWriteDiffMsgReq) ProtoMessage() {}
|
||||||
func (*GetWriteDiffMsgReq) Descriptor() ([]byte, []int) {
|
func (*GetWriteDiffMsgReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{20}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{20}
|
||||||
}
|
}
|
||||||
func (m *GetWriteDiffMsgReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetWriteDiffMsgReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetWriteDiffMsgReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetWriteDiffMsgReq.Unmarshal(m, b)
|
||||||
@ -1168,7 +996,7 @@ func (m *GetWriteDiffMsgResp) Reset() { *m = GetWriteDiffMsgResp{} }
|
|||||||
func (m *GetWriteDiffMsgResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetWriteDiffMsgResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetWriteDiffMsgResp) ProtoMessage() {}
|
func (*GetWriteDiffMsgResp) ProtoMessage() {}
|
||||||
func (*GetWriteDiffMsgResp) Descriptor() ([]byte, []int) {
|
func (*GetWriteDiffMsgResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{21}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{21}
|
||||||
}
|
}
|
||||||
func (m *GetWriteDiffMsgResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetWriteDiffMsgResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetWriteDiffMsgResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetWriteDiffMsgResp.Unmarshal(m, b)
|
||||||
@ -1230,7 +1058,7 @@ func (m *ModifyMessageReactionExtensionsReq) Reset() { *m = ModifyMessag
|
|||||||
func (m *ModifyMessageReactionExtensionsReq) String() string { return proto.CompactTextString(m) }
|
func (m *ModifyMessageReactionExtensionsReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*ModifyMessageReactionExtensionsReq) ProtoMessage() {}
|
func (*ModifyMessageReactionExtensionsReq) ProtoMessage() {}
|
||||||
func (*ModifyMessageReactionExtensionsReq) Descriptor() ([]byte, []int) {
|
func (*ModifyMessageReactionExtensionsReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{22}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{22}
|
||||||
}
|
}
|
||||||
func (m *ModifyMessageReactionExtensionsReq) XXX_Unmarshal(b []byte) error {
|
func (m *ModifyMessageReactionExtensionsReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_ModifyMessageReactionExtensionsReq.Unmarshal(m, b)
|
return xxx_messageInfo_ModifyMessageReactionExtensionsReq.Unmarshal(m, b)
|
||||||
@ -1348,7 +1176,7 @@ func (m *SetMessageReactionExtensionsReq) Reset() { *m = SetMessageReact
|
|||||||
func (m *SetMessageReactionExtensionsReq) String() string { return proto.CompactTextString(m) }
|
func (m *SetMessageReactionExtensionsReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SetMessageReactionExtensionsReq) ProtoMessage() {}
|
func (*SetMessageReactionExtensionsReq) ProtoMessage() {}
|
||||||
func (*SetMessageReactionExtensionsReq) Descriptor() ([]byte, []int) {
|
func (*SetMessageReactionExtensionsReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{23}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{23}
|
||||||
}
|
}
|
||||||
func (m *SetMessageReactionExtensionsReq) XXX_Unmarshal(b []byte) error {
|
func (m *SetMessageReactionExtensionsReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_SetMessageReactionExtensionsReq.Unmarshal(m, b)
|
return xxx_messageInfo_SetMessageReactionExtensionsReq.Unmarshal(m, b)
|
||||||
@ -1461,7 +1289,7 @@ func (m *SetMessageReactionExtensionsResp) Reset() { *m = SetMessageReac
|
|||||||
func (m *SetMessageReactionExtensionsResp) String() string { return proto.CompactTextString(m) }
|
func (m *SetMessageReactionExtensionsResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SetMessageReactionExtensionsResp) ProtoMessage() {}
|
func (*SetMessageReactionExtensionsResp) ProtoMessage() {}
|
||||||
func (*SetMessageReactionExtensionsResp) Descriptor() ([]byte, []int) {
|
func (*SetMessageReactionExtensionsResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{24}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{24}
|
||||||
}
|
}
|
||||||
func (m *SetMessageReactionExtensionsResp) XXX_Unmarshal(b []byte) error {
|
func (m *SetMessageReactionExtensionsResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_SetMessageReactionExtensionsResp.Unmarshal(m, b)
|
return xxx_messageInfo_SetMessageReactionExtensionsResp.Unmarshal(m, b)
|
||||||
@ -1538,7 +1366,7 @@ func (m *GetMessageListReactionExtensionsReq) Reset() { *m = GetMessageL
|
|||||||
func (m *GetMessageListReactionExtensionsReq) String() string { return proto.CompactTextString(m) }
|
func (m *GetMessageListReactionExtensionsReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetMessageListReactionExtensionsReq) ProtoMessage() {}
|
func (*GetMessageListReactionExtensionsReq) ProtoMessage() {}
|
||||||
func (*GetMessageListReactionExtensionsReq) Descriptor() ([]byte, []int) {
|
func (*GetMessageListReactionExtensionsReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{25}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{25}
|
||||||
}
|
}
|
||||||
func (m *GetMessageListReactionExtensionsReq) XXX_Unmarshal(b []byte) error {
|
func (m *GetMessageListReactionExtensionsReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetMessageListReactionExtensionsReq.Unmarshal(m, b)
|
return xxx_messageInfo_GetMessageListReactionExtensionsReq.Unmarshal(m, b)
|
||||||
@ -1609,7 +1437,7 @@ func (m *GetMessageListReactionExtensionsReq_MessageReactionKey) String() string
|
|||||||
}
|
}
|
||||||
func (*GetMessageListReactionExtensionsReq_MessageReactionKey) ProtoMessage() {}
|
func (*GetMessageListReactionExtensionsReq_MessageReactionKey) ProtoMessage() {}
|
||||||
func (*GetMessageListReactionExtensionsReq_MessageReactionKey) Descriptor() ([]byte, []int) {
|
func (*GetMessageListReactionExtensionsReq_MessageReactionKey) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{25, 0}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{25, 0}
|
||||||
}
|
}
|
||||||
func (m *GetMessageListReactionExtensionsReq_MessageReactionKey) XXX_Unmarshal(b []byte) error {
|
func (m *GetMessageListReactionExtensionsReq_MessageReactionKey) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetMessageListReactionExtensionsReq_MessageReactionKey.Unmarshal(m, b)
|
return xxx_messageInfo_GetMessageListReactionExtensionsReq_MessageReactionKey.Unmarshal(m, b)
|
||||||
@ -1656,7 +1484,7 @@ func (m *GetMessageListReactionExtensionsResp) Reset() { *m = GetMessage
|
|||||||
func (m *GetMessageListReactionExtensionsResp) String() string { return proto.CompactTextString(m) }
|
func (m *GetMessageListReactionExtensionsResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*GetMessageListReactionExtensionsResp) ProtoMessage() {}
|
func (*GetMessageListReactionExtensionsResp) ProtoMessage() {}
|
||||||
func (*GetMessageListReactionExtensionsResp) Descriptor() ([]byte, []int) {
|
func (*GetMessageListReactionExtensionsResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{26}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{26}
|
||||||
}
|
}
|
||||||
func (m *GetMessageListReactionExtensionsResp) XXX_Unmarshal(b []byte) error {
|
func (m *GetMessageListReactionExtensionsResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_GetMessageListReactionExtensionsResp.Unmarshal(m, b)
|
return xxx_messageInfo_GetMessageListReactionExtensionsResp.Unmarshal(m, b)
|
||||||
@ -1711,7 +1539,7 @@ func (m *SingleMessageExtensionResult) Reset() { *m = SingleMessageExten
|
|||||||
func (m *SingleMessageExtensionResult) String() string { return proto.CompactTextString(m) }
|
func (m *SingleMessageExtensionResult) String() string { return proto.CompactTextString(m) }
|
||||||
func (*SingleMessageExtensionResult) ProtoMessage() {}
|
func (*SingleMessageExtensionResult) ProtoMessage() {}
|
||||||
func (*SingleMessageExtensionResult) Descriptor() ([]byte, []int) {
|
func (*SingleMessageExtensionResult) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{27}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{27}
|
||||||
}
|
}
|
||||||
func (m *SingleMessageExtensionResult) XXX_Unmarshal(b []byte) error {
|
func (m *SingleMessageExtensionResult) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_SingleMessageExtensionResult.Unmarshal(m, b)
|
return xxx_messageInfo_SingleMessageExtensionResult.Unmarshal(m, b)
|
||||||
@ -1773,7 +1601,7 @@ func (m *ModifyMessageReactionExtensionsResp) Reset() { *m = ModifyMessa
|
|||||||
func (m *ModifyMessageReactionExtensionsResp) String() string { return proto.CompactTextString(m) }
|
func (m *ModifyMessageReactionExtensionsResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*ModifyMessageReactionExtensionsResp) ProtoMessage() {}
|
func (*ModifyMessageReactionExtensionsResp) ProtoMessage() {}
|
||||||
func (*ModifyMessageReactionExtensionsResp) Descriptor() ([]byte, []int) {
|
func (*ModifyMessageReactionExtensionsResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{28}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{28}
|
||||||
}
|
}
|
||||||
func (m *ModifyMessageReactionExtensionsResp) XXX_Unmarshal(b []byte) error {
|
func (m *ModifyMessageReactionExtensionsResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_ModifyMessageReactionExtensionsResp.Unmarshal(m, b)
|
return xxx_messageInfo_ModifyMessageReactionExtensionsResp.Unmarshal(m, b)
|
||||||
@ -1841,7 +1669,7 @@ func (m *DeleteMessageListReactionExtensionsReq) Reset() {
|
|||||||
func (m *DeleteMessageListReactionExtensionsReq) String() string { return proto.CompactTextString(m) }
|
func (m *DeleteMessageListReactionExtensionsReq) String() string { return proto.CompactTextString(m) }
|
||||||
func (*DeleteMessageListReactionExtensionsReq) ProtoMessage() {}
|
func (*DeleteMessageListReactionExtensionsReq) ProtoMessage() {}
|
||||||
func (*DeleteMessageListReactionExtensionsReq) Descriptor() ([]byte, []int) {
|
func (*DeleteMessageListReactionExtensionsReq) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{29}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{29}
|
||||||
}
|
}
|
||||||
func (m *DeleteMessageListReactionExtensionsReq) XXX_Unmarshal(b []byte) error {
|
func (m *DeleteMessageListReactionExtensionsReq) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_DeleteMessageListReactionExtensionsReq.Unmarshal(m, b)
|
return xxx_messageInfo_DeleteMessageListReactionExtensionsReq.Unmarshal(m, b)
|
||||||
@ -1932,7 +1760,7 @@ func (m *DeleteMessageListReactionExtensionsResp) Reset() {
|
|||||||
func (m *DeleteMessageListReactionExtensionsResp) String() string { return proto.CompactTextString(m) }
|
func (m *DeleteMessageListReactionExtensionsResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*DeleteMessageListReactionExtensionsResp) ProtoMessage() {}
|
func (*DeleteMessageListReactionExtensionsResp) ProtoMessage() {}
|
||||||
func (*DeleteMessageListReactionExtensionsResp) Descriptor() ([]byte, []int) {
|
func (*DeleteMessageListReactionExtensionsResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{30}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{30}
|
||||||
}
|
}
|
||||||
func (m *DeleteMessageListReactionExtensionsResp) XXX_Unmarshal(b []byte) error {
|
func (m *DeleteMessageListReactionExtensionsResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_DeleteMessageListReactionExtensionsResp.Unmarshal(m, b)
|
return xxx_messageInfo_DeleteMessageListReactionExtensionsResp.Unmarshal(m, b)
|
||||||
@ -1986,7 +1814,7 @@ func (m *ExtendMsgResp) Reset() { *m = ExtendMsgResp{} }
|
|||||||
func (m *ExtendMsgResp) String() string { return proto.CompactTextString(m) }
|
func (m *ExtendMsgResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*ExtendMsgResp) ProtoMessage() {}
|
func (*ExtendMsgResp) ProtoMessage() {}
|
||||||
func (*ExtendMsgResp) Descriptor() ([]byte, []int) {
|
func (*ExtendMsgResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{31}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{31}
|
||||||
}
|
}
|
||||||
func (m *ExtendMsgResp) XXX_Unmarshal(b []byte) error {
|
func (m *ExtendMsgResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_ExtendMsgResp.Unmarshal(m, b)
|
return xxx_messageInfo_ExtendMsgResp.Unmarshal(m, b)
|
||||||
@ -2042,7 +1870,7 @@ func (m *ExtendMsg) Reset() { *m = ExtendMsg{} }
|
|||||||
func (m *ExtendMsg) String() string { return proto.CompactTextString(m) }
|
func (m *ExtendMsg) String() string { return proto.CompactTextString(m) }
|
||||||
func (*ExtendMsg) ProtoMessage() {}
|
func (*ExtendMsg) ProtoMessage() {}
|
||||||
func (*ExtendMsg) Descriptor() ([]byte, []int) {
|
func (*ExtendMsg) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{32}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{32}
|
||||||
}
|
}
|
||||||
func (m *ExtendMsg) XXX_Unmarshal(b []byte) error {
|
func (m *ExtendMsg) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_ExtendMsg.Unmarshal(m, b)
|
return xxx_messageInfo_ExtendMsg.Unmarshal(m, b)
|
||||||
@ -2110,7 +1938,7 @@ func (m *KeyValueResp) Reset() { *m = KeyValueResp{} }
|
|||||||
func (m *KeyValueResp) String() string { return proto.CompactTextString(m) }
|
func (m *KeyValueResp) String() string { return proto.CompactTextString(m) }
|
||||||
func (*KeyValueResp) ProtoMessage() {}
|
func (*KeyValueResp) ProtoMessage() {}
|
||||||
func (*KeyValueResp) Descriptor() ([]byte, []int) {
|
func (*KeyValueResp) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{33}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{33}
|
||||||
}
|
}
|
||||||
func (m *KeyValueResp) XXX_Unmarshal(b []byte) error {
|
func (m *KeyValueResp) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_KeyValueResp.Unmarshal(m, b)
|
return xxx_messageInfo_KeyValueResp.Unmarshal(m, b)
|
||||||
@ -2164,7 +1992,7 @@ func (m *MsgDataToModifyByMQ) Reset() { *m = MsgDataToModifyByMQ{} }
|
|||||||
func (m *MsgDataToModifyByMQ) String() string { return proto.CompactTextString(m) }
|
func (m *MsgDataToModifyByMQ) String() string { return proto.CompactTextString(m) }
|
||||||
func (*MsgDataToModifyByMQ) ProtoMessage() {}
|
func (*MsgDataToModifyByMQ) ProtoMessage() {}
|
||||||
func (*MsgDataToModifyByMQ) Descriptor() ([]byte, []int) {
|
func (*MsgDataToModifyByMQ) Descriptor() ([]byte, []int) {
|
||||||
return fileDescriptor_msg_4f5a59ae8be91efc, []int{34}
|
return fileDescriptor_msg_9bd9d9abca588885, []int{34}
|
||||||
}
|
}
|
||||||
func (m *MsgDataToModifyByMQ) XXX_Unmarshal(b []byte) error {
|
func (m *MsgDataToModifyByMQ) XXX_Unmarshal(b []byte) error {
|
||||||
return xxx_messageInfo_MsgDataToModifyByMQ.Unmarshal(m, b)
|
return xxx_messageInfo_MsgDataToModifyByMQ.Unmarshal(m, b)
|
||||||
@ -2259,18 +2087,23 @@ const _ = grpc.SupportPackageIsVersion4
|
|||||||
// Client API for Msg service
|
// Client API for Msg service
|
||||||
|
|
||||||
type MsgClient interface {
|
type MsgClient interface {
|
||||||
|
// 获取最小最大seq(包括用户的,以及指定群组的)
|
||||||
GetMaxAndMinSeq(ctx context.Context, in *sdkws.GetMaxAndMinSeqReq, opts ...grpc.CallOption) (*sdkws.GetMaxAndMinSeqResp, error)
|
GetMaxAndMinSeq(ctx context.Context, in *sdkws.GetMaxAndMinSeqReq, opts ...grpc.CallOption) (*sdkws.GetMaxAndMinSeqResp, error)
|
||||||
|
// 拉取历史消息(包括用户的,以及指定群组的)
|
||||||
PullMessageBySeqList(ctx context.Context, in *sdkws.PullMessageBySeqListReq, opts ...grpc.CallOption) (*sdkws.PullMessageBySeqListResp, error)
|
PullMessageBySeqList(ctx context.Context, in *sdkws.PullMessageBySeqListReq, opts ...grpc.CallOption) (*sdkws.PullMessageBySeqListResp, error)
|
||||||
|
// 发送消息
|
||||||
SendMsg(ctx context.Context, in *SendMsgReq, opts ...grpc.CallOption) (*SendMsgResp, error)
|
SendMsg(ctx context.Context, in *SendMsgReq, opts ...grpc.CallOption) (*SendMsgResp, error)
|
||||||
|
// 删除某人消息
|
||||||
DelMsgList(ctx context.Context, in *sdkws.DelMsgListReq, opts ...grpc.CallOption) (*sdkws.DelMsgListResp, error)
|
DelMsgList(ctx context.Context, in *sdkws.DelMsgListReq, opts ...grpc.CallOption) (*sdkws.DelMsgListResp, error)
|
||||||
|
// 删除某个用户某个大群消息
|
||||||
DelSuperGroupMsg(ctx context.Context, in *DelSuperGroupMsgReq, opts ...grpc.CallOption) (*DelSuperGroupMsgResp, error)
|
DelSuperGroupMsg(ctx context.Context, in *DelSuperGroupMsgReq, opts ...grpc.CallOption) (*DelSuperGroupMsgResp, error)
|
||||||
|
// 清空某人所有消息
|
||||||
ClearMsg(ctx context.Context, in *ClearMsgReq, opts ...grpc.CallOption) (*ClearMsgResp, error)
|
ClearMsg(ctx context.Context, in *ClearMsgReq, opts ...grpc.CallOption) (*ClearMsgResp, error)
|
||||||
SetMsgMinSeq(ctx context.Context, in *SetMsgMinSeqReq, opts ...grpc.CallOption) (*SetMsgMinSeqResp, error)
|
// 设置消息是否发送成功-针对api发送的消息
|
||||||
SetSendMsgStatus(ctx context.Context, in *SetSendMsgStatusReq, opts ...grpc.CallOption) (*SetSendMsgStatusResp, error)
|
SetSendMsgStatus(ctx context.Context, in *SetSendMsgStatusReq, opts ...grpc.CallOption) (*SetSendMsgStatusResp, error)
|
||||||
|
// 获取消息发送状态
|
||||||
GetSendMsgStatus(ctx context.Context, in *GetSendMsgStatusReq, opts ...grpc.CallOption) (*GetSendMsgStatusResp, error)
|
GetSendMsgStatus(ctx context.Context, in *GetSendMsgStatusReq, opts ...grpc.CallOption) (*GetSendMsgStatusResp, error)
|
||||||
GetSuperGroupMsg(ctx context.Context, in *GetSuperGroupMsgReq, opts ...grpc.CallOption) (*GetSuperGroupMsgResp, error)
|
// 修改消息
|
||||||
GetWriteDiffMsg(ctx context.Context, in *GetWriteDiffMsgReq, opts ...grpc.CallOption) (*GetWriteDiffMsgResp, error)
|
|
||||||
// modify msg
|
|
||||||
SetMessageReactionExtensions(ctx context.Context, in *SetMessageReactionExtensionsReq, opts ...grpc.CallOption) (*SetMessageReactionExtensionsResp, error)
|
SetMessageReactionExtensions(ctx context.Context, in *SetMessageReactionExtensionsReq, opts ...grpc.CallOption) (*SetMessageReactionExtensionsResp, error)
|
||||||
GetMessageListReactionExtensions(ctx context.Context, in *GetMessageListReactionExtensionsReq, opts ...grpc.CallOption) (*GetMessageListReactionExtensionsResp, error)
|
GetMessageListReactionExtensions(ctx context.Context, in *GetMessageListReactionExtensionsReq, opts ...grpc.CallOption) (*GetMessageListReactionExtensionsResp, error)
|
||||||
AddMessageReactionExtensions(ctx context.Context, in *ModifyMessageReactionExtensionsReq, opts ...grpc.CallOption) (*ModifyMessageReactionExtensionsResp, error)
|
AddMessageReactionExtensions(ctx context.Context, in *ModifyMessageReactionExtensionsReq, opts ...grpc.CallOption) (*ModifyMessageReactionExtensionsResp, error)
|
||||||
@ -2339,15 +2172,6 @@ func (c *msgClient) ClearMsg(ctx context.Context, in *ClearMsgReq, opts ...grpc.
|
|||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *msgClient) SetMsgMinSeq(ctx context.Context, in *SetMsgMinSeqReq, opts ...grpc.CallOption) (*SetMsgMinSeqResp, error) {
|
|
||||||
out := new(SetMsgMinSeqResp)
|
|
||||||
err := grpc.Invoke(ctx, "/msg.msg/SetMsgMinSeq", in, out, c.cc, opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *msgClient) SetSendMsgStatus(ctx context.Context, in *SetSendMsgStatusReq, opts ...grpc.CallOption) (*SetSendMsgStatusResp, error) {
|
func (c *msgClient) SetSendMsgStatus(ctx context.Context, in *SetSendMsgStatusReq, opts ...grpc.CallOption) (*SetSendMsgStatusResp, error) {
|
||||||
out := new(SetSendMsgStatusResp)
|
out := new(SetSendMsgStatusResp)
|
||||||
err := grpc.Invoke(ctx, "/msg.msg/SetSendMsgStatus", in, out, c.cc, opts...)
|
err := grpc.Invoke(ctx, "/msg.msg/SetSendMsgStatus", in, out, c.cc, opts...)
|
||||||
@ -2366,24 +2190,6 @@ func (c *msgClient) GetSendMsgStatus(ctx context.Context, in *GetSendMsgStatusRe
|
|||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *msgClient) GetSuperGroupMsg(ctx context.Context, in *GetSuperGroupMsgReq, opts ...grpc.CallOption) (*GetSuperGroupMsgResp, error) {
|
|
||||||
out := new(GetSuperGroupMsgResp)
|
|
||||||
err := grpc.Invoke(ctx, "/msg.msg/GetSuperGroupMsg", in, out, c.cc, opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *msgClient) GetWriteDiffMsg(ctx context.Context, in *GetWriteDiffMsgReq, opts ...grpc.CallOption) (*GetWriteDiffMsgResp, error) {
|
|
||||||
out := new(GetWriteDiffMsgResp)
|
|
||||||
err := grpc.Invoke(ctx, "/msg.msg/GetWriteDiffMsg", in, out, c.cc, opts...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return out, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *msgClient) SetMessageReactionExtensions(ctx context.Context, in *SetMessageReactionExtensionsReq, opts ...grpc.CallOption) (*SetMessageReactionExtensionsResp, error) {
|
func (c *msgClient) SetMessageReactionExtensions(ctx context.Context, in *SetMessageReactionExtensionsReq, opts ...grpc.CallOption) (*SetMessageReactionExtensionsResp, error) {
|
||||||
out := new(SetMessageReactionExtensionsResp)
|
out := new(SetMessageReactionExtensionsResp)
|
||||||
err := grpc.Invoke(ctx, "/msg.msg/SetMessageReactionExtensions", in, out, c.cc, opts...)
|
err := grpc.Invoke(ctx, "/msg.msg/SetMessageReactionExtensions", in, out, c.cc, opts...)
|
||||||
@ -2423,18 +2229,23 @@ func (c *msgClient) DeleteMessageReactionExtensions(ctx context.Context, in *Del
|
|||||||
// Server API for Msg service
|
// Server API for Msg service
|
||||||
|
|
||||||
type MsgServer interface {
|
type MsgServer interface {
|
||||||
|
// 获取最小最大seq(包括用户的,以及指定群组的)
|
||||||
GetMaxAndMinSeq(context.Context, *sdkws.GetMaxAndMinSeqReq) (*sdkws.GetMaxAndMinSeqResp, error)
|
GetMaxAndMinSeq(context.Context, *sdkws.GetMaxAndMinSeqReq) (*sdkws.GetMaxAndMinSeqResp, error)
|
||||||
|
// 拉取历史消息(包括用户的,以及指定群组的)
|
||||||
PullMessageBySeqList(context.Context, *sdkws.PullMessageBySeqListReq) (*sdkws.PullMessageBySeqListResp, error)
|
PullMessageBySeqList(context.Context, *sdkws.PullMessageBySeqListReq) (*sdkws.PullMessageBySeqListResp, error)
|
||||||
|
// 发送消息
|
||||||
SendMsg(context.Context, *SendMsgReq) (*SendMsgResp, error)
|
SendMsg(context.Context, *SendMsgReq) (*SendMsgResp, error)
|
||||||
|
// 删除某人消息
|
||||||
DelMsgList(context.Context, *sdkws.DelMsgListReq) (*sdkws.DelMsgListResp, error)
|
DelMsgList(context.Context, *sdkws.DelMsgListReq) (*sdkws.DelMsgListResp, error)
|
||||||
|
// 删除某个用户某个大群消息
|
||||||
DelSuperGroupMsg(context.Context, *DelSuperGroupMsgReq) (*DelSuperGroupMsgResp, error)
|
DelSuperGroupMsg(context.Context, *DelSuperGroupMsgReq) (*DelSuperGroupMsgResp, error)
|
||||||
|
// 清空某人所有消息
|
||||||
ClearMsg(context.Context, *ClearMsgReq) (*ClearMsgResp, error)
|
ClearMsg(context.Context, *ClearMsgReq) (*ClearMsgResp, error)
|
||||||
SetMsgMinSeq(context.Context, *SetMsgMinSeqReq) (*SetMsgMinSeqResp, error)
|
// 设置消息是否发送成功-针对api发送的消息
|
||||||
SetSendMsgStatus(context.Context, *SetSendMsgStatusReq) (*SetSendMsgStatusResp, error)
|
SetSendMsgStatus(context.Context, *SetSendMsgStatusReq) (*SetSendMsgStatusResp, error)
|
||||||
|
// 获取消息发送状态
|
||||||
GetSendMsgStatus(context.Context, *GetSendMsgStatusReq) (*GetSendMsgStatusResp, error)
|
GetSendMsgStatus(context.Context, *GetSendMsgStatusReq) (*GetSendMsgStatusResp, error)
|
||||||
GetSuperGroupMsg(context.Context, *GetSuperGroupMsgReq) (*GetSuperGroupMsgResp, error)
|
// 修改消息
|
||||||
GetWriteDiffMsg(context.Context, *GetWriteDiffMsgReq) (*GetWriteDiffMsgResp, error)
|
|
||||||
// modify msg
|
|
||||||
SetMessageReactionExtensions(context.Context, *SetMessageReactionExtensionsReq) (*SetMessageReactionExtensionsResp, error)
|
SetMessageReactionExtensions(context.Context, *SetMessageReactionExtensionsReq) (*SetMessageReactionExtensionsResp, error)
|
||||||
GetMessageListReactionExtensions(context.Context, *GetMessageListReactionExtensionsReq) (*GetMessageListReactionExtensionsResp, error)
|
GetMessageListReactionExtensions(context.Context, *GetMessageListReactionExtensionsReq) (*GetMessageListReactionExtensionsResp, error)
|
||||||
AddMessageReactionExtensions(context.Context, *ModifyMessageReactionExtensionsReq) (*ModifyMessageReactionExtensionsResp, error)
|
AddMessageReactionExtensions(context.Context, *ModifyMessageReactionExtensionsReq) (*ModifyMessageReactionExtensionsResp, error)
|
||||||
@ -2553,24 +2364,6 @@ func _Msg_ClearMsg_Handler(srv interface{}, ctx context.Context, dec func(interf
|
|||||||
return interceptor(ctx, in, info, handler)
|
return interceptor(ctx, in, info, handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
func _Msg_SetMsgMinSeq_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
|
||||||
in := new(SetMsgMinSeqReq)
|
|
||||||
if err := dec(in); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if interceptor == nil {
|
|
||||||
return srv.(MsgServer).SetMsgMinSeq(ctx, in)
|
|
||||||
}
|
|
||||||
info := &grpc.UnaryServerInfo{
|
|
||||||
Server: srv,
|
|
||||||
FullMethod: "/msg.msg/SetMsgMinSeq",
|
|
||||||
}
|
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
||||||
return srv.(MsgServer).SetMsgMinSeq(ctx, req.(*SetMsgMinSeqReq))
|
|
||||||
}
|
|
||||||
return interceptor(ctx, in, info, handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
func _Msg_SetSendMsgStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
func _Msg_SetSendMsgStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
in := new(SetSendMsgStatusReq)
|
in := new(SetSendMsgStatusReq)
|
||||||
if err := dec(in); err != nil {
|
if err := dec(in); err != nil {
|
||||||
@ -2607,42 +2400,6 @@ func _Msg_GetSendMsgStatus_Handler(srv interface{}, ctx context.Context, dec fun
|
|||||||
return interceptor(ctx, in, info, handler)
|
return interceptor(ctx, in, info, handler)
|
||||||
}
|
}
|
||||||
|
|
||||||
func _Msg_GetSuperGroupMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
|
||||||
in := new(GetSuperGroupMsgReq)
|
|
||||||
if err := dec(in); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if interceptor == nil {
|
|
||||||
return srv.(MsgServer).GetSuperGroupMsg(ctx, in)
|
|
||||||
}
|
|
||||||
info := &grpc.UnaryServerInfo{
|
|
||||||
Server: srv,
|
|
||||||
FullMethod: "/msg.msg/GetSuperGroupMsg",
|
|
||||||
}
|
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
||||||
return srv.(MsgServer).GetSuperGroupMsg(ctx, req.(*GetSuperGroupMsgReq))
|
|
||||||
}
|
|
||||||
return interceptor(ctx, in, info, handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
func _Msg_GetWriteDiffMsg_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
|
||||||
in := new(GetWriteDiffMsgReq)
|
|
||||||
if err := dec(in); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if interceptor == nil {
|
|
||||||
return srv.(MsgServer).GetWriteDiffMsg(ctx, in)
|
|
||||||
}
|
|
||||||
info := &grpc.UnaryServerInfo{
|
|
||||||
Server: srv,
|
|
||||||
FullMethod: "/msg.msg/GetWriteDiffMsg",
|
|
||||||
}
|
|
||||||
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
|
|
||||||
return srv.(MsgServer).GetWriteDiffMsg(ctx, req.(*GetWriteDiffMsgReq))
|
|
||||||
}
|
|
||||||
return interceptor(ctx, in, info, handler)
|
|
||||||
}
|
|
||||||
|
|
||||||
func _Msg_SetMessageReactionExtensions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
func _Msg_SetMessageReactionExtensions_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
|
||||||
in := new(SetMessageReactionExtensionsReq)
|
in := new(SetMessageReactionExtensionsReq)
|
||||||
if err := dec(in); err != nil {
|
if err := dec(in); err != nil {
|
||||||
@ -2743,10 +2500,6 @@ var _Msg_serviceDesc = grpc.ServiceDesc{
|
|||||||
MethodName: "ClearMsg",
|
MethodName: "ClearMsg",
|
||||||
Handler: _Msg_ClearMsg_Handler,
|
Handler: _Msg_ClearMsg_Handler,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
MethodName: "SetMsgMinSeq",
|
|
||||||
Handler: _Msg_SetMsgMinSeq_Handler,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
MethodName: "SetSendMsgStatus",
|
MethodName: "SetSendMsgStatus",
|
||||||
Handler: _Msg_SetSendMsgStatus_Handler,
|
Handler: _Msg_SetSendMsgStatus_Handler,
|
||||||
@ -2755,14 +2508,6 @@ var _Msg_serviceDesc = grpc.ServiceDesc{
|
|||||||
MethodName: "GetSendMsgStatus",
|
MethodName: "GetSendMsgStatus",
|
||||||
Handler: _Msg_GetSendMsgStatus_Handler,
|
Handler: _Msg_GetSendMsgStatus_Handler,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
MethodName: "GetSuperGroupMsg",
|
|
||||||
Handler: _Msg_GetSuperGroupMsg_Handler,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
MethodName: "GetWriteDiffMsg",
|
|
||||||
Handler: _Msg_GetWriteDiffMsg_Handler,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
MethodName: "SetMessageReactionExtensions",
|
MethodName: "SetMessageReactionExtensions",
|
||||||
Handler: _Msg_SetMessageReactionExtensions_Handler,
|
Handler: _Msg_SetMessageReactionExtensions_Handler,
|
||||||
@ -2784,113 +2529,107 @@ var _Msg_serviceDesc = grpc.ServiceDesc{
|
|||||||
Metadata: "msg/msg.proto",
|
Metadata: "msg/msg.proto",
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() { proto.RegisterFile("msg/msg.proto", fileDescriptor_msg_4f5a59ae8be91efc) }
|
func init() { proto.RegisterFile("msg/msg.proto", fileDescriptor_msg_9bd9d9abca588885) }
|
||||||
|
|
||||||
var fileDescriptor_msg_4f5a59ae8be91efc = []byte{
|
var fileDescriptor_msg_9bd9d9abca588885 = []byte{
|
||||||
// 1672 bytes of a gzipped FileDescriptorProto
|
// 1569 bytes of a gzipped FileDescriptorProto
|
||||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x6e, 0xdb, 0xc6,
|
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x59, 0xcd, 0x6e, 0xdb, 0x46,
|
||||||
0x16, 0x06, 0x49, 0x4b, 0xb6, 0x8f, 0xec, 0xd8, 0x19, 0x3b, 0xbe, 0x0a, 0x63, 0x20, 0x0a, 0xf3,
|
0x10, 0x06, 0x49, 0x4b, 0xb6, 0x47, 0x76, 0xec, 0xac, 0x1d, 0x43, 0x61, 0x8d, 0x46, 0x65, 0x92,
|
||||||
0xa7, 0xdc, 0x24, 0x32, 0xae, 0xef, 0x05, 0x72, 0xd1, 0x14, 0x68, 0xe2, 0xc8, 0x55, 0x8c, 0x94,
|
0x5a, 0x41, 0x62, 0x19, 0x70, 0x8b, 0xfe, 0xa5, 0x40, 0x1b, 0x47, 0xae, 0x62, 0xa4, 0x6c, 0x12,
|
||||||
0x75, 0x4c, 0xb9, 0x2d, 0xd0, 0x2e, 0x1c, 0x46, 0x1a, 0x33, 0x84, 0x25, 0x92, 0xe6, 0x50, 0xb1,
|
0xca, 0x6d, 0x90, 0xe6, 0x90, 0x32, 0xd6, 0x9a, 0x21, 0xcc, 0x3f, 0x73, 0xa9, 0x58, 0x02, 0x7a,
|
||||||
0xd5, 0xbf, 0x5d, 0x8b, 0x02, 0x45, 0x16, 0x5d, 0x76, 0xd5, 0x5d, 0x77, 0x7d, 0x88, 0x3e, 0x40,
|
0xe9, 0xa1, 0xbd, 0xf5, 0x35, 0x7a, 0xeb, 0x43, 0xe4, 0x09, 0xfa, 0x20, 0x3d, 0x15, 0xe8, 0xb9,
|
||||||
0xd1, 0x07, 0xe9, 0x33, 0xb4, 0x28, 0x66, 0x86, 0x92, 0x86, 0x7f, 0x16, 0x2d, 0x17, 0x41, 0x0a,
|
0x2d, 0x76, 0xb9, 0xa2, 0xf8, 0x2b, 0xd1, 0x0a, 0x02, 0xe4, 0xd0, 0x9b, 0x67, 0x76, 0x76, 0x7e,
|
||||||
0x74, 0xa7, 0x99, 0x39, 0x73, 0xe6, 0xfb, 0xce, 0xf9, 0xe6, 0x87, 0x47, 0x30, 0xdf, 0x25, 0xd6,
|
0xbf, 0x19, 0x2d, 0xc7, 0xb0, 0x6c, 0x13, 0x63, 0xc7, 0x26, 0x46, 0xcb, 0xf3, 0xdd, 0xc0, 0x45,
|
||||||
0x5a, 0x97, 0x58, 0x35, 0xcf, 0x77, 0x03, 0x17, 0x29, 0x5d, 0x62, 0xa9, 0xd5, 0x6d, 0x0f, 0x3b,
|
0x92, 0x4d, 0x0c, 0x79, 0xeb, 0x81, 0x87, 0x9d, 0xed, 0x03, 0x75, 0xbb, 0x8b, 0xfd, 0x97, 0xd8,
|
||||||
0x77, 0xb7, 0xf4, 0xbb, 0x4d, 0xec, 0xbf, 0xc4, 0xfe, 0x9a, 0x77, 0x60, 0xad, 0xb1, 0xe1, 0x35,
|
0xdf, 0xf1, 0x4e, 0x8c, 0x1d, 0x76, 0xbc, 0x43, 0x7a, 0x27, 0x67, 0x64, 0xe7, 0x8c, 0x84, 0xd2,
|
||||||
0xd2, 0x3e, 0xd8, 0x3b, 0x22, 0x6b, 0x47, 0x84, 0x9b, 0xab, 0xb5, 0xb1, 0x96, 0xbe, 0xe9, 0x79,
|
0xf2, 0xf6, 0x34, 0x41, 0x5f, 0xf7, 0x3c, 0xec, 0x73, 0x71, 0xc5, 0x85, 0x9a, 0x4a, 0x8c, 0xb6,
|
||||||
0xd8, 0x0f, 0xed, 0xb5, 0xcf, 0xa0, 0xa4, 0x13, 0xab, 0x6e, 0x06, 0xe6, 0xae, 0xab, 0xef, 0xa0,
|
0x1e, 0xe8, 0x87, 0xae, 0xfa, 0x08, 0xad, 0x43, 0x25, 0x70, 0x4f, 0xb0, 0x53, 0x17, 0x1a, 0x42,
|
||||||
0x65, 0x28, 0x04, 0xee, 0x01, 0x76, 0xca, 0x52, 0x45, 0xaa, 0xce, 0x1a, 0xbc, 0x81, 0x2a, 0x50,
|
0x73, 0x51, 0x0b, 0x09, 0xd4, 0x80, 0x9a, 0xeb, 0x61, 0x5f, 0x0f, 0x4c, 0xd7, 0x39, 0x68, 0xd7,
|
||||||
0x72, 0x3d, 0xec, 0x9b, 0x81, 0xed, 0x3a, 0x5b, 0xf5, 0xb2, 0xcc, 0xc6, 0xc4, 0x2e, 0xf4, 0x3f,
|
0x45, 0x76, 0x16, 0x67, 0xa1, 0x26, 0xcc, 0xdb, 0xa1, 0x9a, 0xba, 0xd4, 0x10, 0x9a, 0xb5, 0xdd,
|
||||||
0x98, 0xee, 0x72, 0x37, 0x65, 0xa5, 0x22, 0x55, 0x4b, 0xeb, 0x6a, 0x8d, 0x30, 0x00, 0x7b, 0xa6,
|
0x0b, 0x2d, 0x66, 0xae, 0xc5, 0x95, 0x6b, 0xa3, 0x63, 0xe5, 0x49, 0xcc, 0x60, 0x7b, 0x2f, 0x7e,
|
||||||
0x67, 0xef, 0x79, 0xa6, 0x6f, 0x76, 0x49, 0x2d, 0x5c, 0xc8, 0x18, 0x98, 0x6a, 0x58, 0x58, 0xbc,
|
0x51, 0x98, 0x78, 0x71, 0xba, 0x13, 0xca, 0x4f, 0x02, 0xac, 0x3c, 0xec, 0x93, 0x17, 0xf1, 0x80,
|
||||||
0xbe, 0x21, 0x3a, 0x91, 0x72, 0x3b, 0x19, 0x0f, 0x4e, 0x7b, 0x25, 0xc1, 0xc2, 0xd3, 0x1e, 0x79,
|
0x1a, 0x50, 0x7b, 0x10, 0xbb, 0x15, 0x86, 0x15, 0x67, 0xc5, 0x3d, 0x10, 0x27, 0x7b, 0xa0, 0xc0,
|
||||||
0x21, 0x12, 0xad, 0x40, 0x69, 0x5b, 0x98, 0xc5, 0xe9, 0x8a, 0x5d, 0x22, 0x1a, 0x39, 0x3f, 0x1a,
|
0x92, 0xd7, 0x27, 0x2f, 0x0e, 0xdd, 0x6f, 0x09, 0xf6, 0x0f, 0xda, 0x2c, 0xd2, 0x45, 0x2d, 0xc1,
|
||||||
0x0d, 0xe6, 0xbc, 0x1e, 0x79, 0xb1, 0xeb, 0x7e, 0x40, 0xb0, 0xbf, 0x55, 0x67, 0xd1, 0x98, 0x35,
|
0x53, 0x7e, 0x13, 0x00, 0x8d, 0xed, 0xbb, 0x8e, 0xe1, 0xee, 0x0d, 0xd5, 0x47, 0xa8, 0x0e, 0xf3,
|
||||||
0x22, 0x7d, 0xda, 0x8f, 0x12, 0xa0, 0x11, 0x16, 0xd7, 0xb1, 0xdc, 0x8d, 0xbe, 0xbe, 0x83, 0xca,
|
0x96, 0x4e, 0x82, 0x2e, 0x3e, 0x65, 0x2e, 0xcc, 0x69, 0x23, 0x12, 0x5d, 0x83, 0x65, 0xdd, 0x30,
|
||||||
0x30, 0xdd, 0x31, 0x49, 0xd0, 0xc4, 0x87, 0x0c, 0xce, 0x94, 0x31, 0x68, 0xa2, 0x6b, 0x30, 0x6f,
|
0x7c, 0x6c, 0x24, 0x03, 0x4b, 0x32, 0xd1, 0x2e, 0xd4, 0x6c, 0x4c, 0x88, 0x6e, 0xe0, 0xaf, 0x4d,
|
||||||
0x5a, 0x96, 0x8f, 0xad, 0x28, 0xc9, 0x68, 0x27, 0x5a, 0x87, 0x52, 0x17, 0x13, 0x62, 0x5a, 0xf8,
|
0x12, 0xd4, 0xa5, 0x86, 0xd4, 0xac, 0xed, 0xae, 0xb6, 0x28, 0x48, 0x62, 0xd1, 0x6a, 0x71, 0x21,
|
||||||
0x3d, 0x9b, 0x04, 0x65, 0xa5, 0xa2, 0x54, 0x4b, 0xeb, 0x8b, 0x35, 0x2a, 0x25, 0x81, 0xb9, 0x21,
|
0xb4, 0x09, 0x8b, 0x81, 0x6f, 0x1a, 0x06, 0xf3, 0x75, 0x8e, 0x69, 0x1d, 0x33, 0x94, 0x6f, 0x00,
|
||||||
0x1a, 0xa1, 0x55, 0x98, 0x0d, 0x7c, 0xdb, 0xb2, 0x18, 0xd6, 0x29, 0xe6, 0x75, 0xd4, 0xa1, 0xbd,
|
0x75, 0x70, 0xa0, 0xea, 0x83, 0x3b, 0x4e, 0x4f, 0x35, 0x9d, 0x2e, 0x3e, 0xd5, 0xf0, 0x29, 0xda,
|
||||||
0x0f, 0xa8, 0x81, 0x03, 0xdd, 0x3c, 0x7e, 0xe8, 0xb4, 0x75, 0xdb, 0x69, 0xe2, 0x43, 0x03, 0x1f,
|
0x80, 0x2a, 0x0f, 0x2e, 0xcc, 0x14, 0xa7, 0xd2, 0x69, 0x14, 0x33, 0x69, 0x54, 0xce, 0x60, 0x2d,
|
||||||
0xa2, 0x15, 0x28, 0x86, 0xe4, 0x78, 0xd4, 0xc2, 0x56, 0x3c, 0xa4, 0x72, 0x22, 0xa4, 0xda, 0x11,
|
0xa3, 0x8f, 0x78, 0x34, 0xf0, 0x7d, 0xdf, 0xbf, 0xeb, 0xf6, 0x30, 0xd3, 0x58, 0xd1, 0x46, 0x24,
|
||||||
0x2c, 0x25, 0xfc, 0x11, 0x8f, 0x12, 0xdf, 0xf4, 0xfd, 0x47, 0x6e, 0x1b, 0x33, 0x8f, 0x05, 0x63,
|
0x35, 0xb5, 0xef, 0xfb, 0x2a, 0x31, 0xb8, 0x36, 0x4e, 0x51, 0xbe, 0xaa, 0x0f, 0x68, 0xa6, 0x68,
|
||||||
0xd0, 0xa4, 0x4b, 0x6d, 0xfa, 0xbe, 0x4e, 0xac, 0xd0, 0x5b, 0xd8, 0xa2, 0xfd, 0xba, 0x79, 0x4c,
|
0x7e, 0x97, 0x35, 0x4e, 0x31, 0x3e, 0xd3, 0xcb, 0x62, 0xa1, 0x7c, 0x46, 0x29, 0x1f, 0x01, 0x74,
|
||||||
0x23, 0x45, 0xe3, 0x3b, 0x6f, 0x84, 0x2d, 0xd6, 0xcf, 0xfc, 0x32, 0x2e, 0xb4, 0x9f, 0xb5, 0xb4,
|
0xb1, 0xd3, 0x53, 0x89, 0x41, 0x03, 0x28, 0x0f, 0x44, 0x1b, 0x6a, 0xd1, 0x3d, 0xe2, 0xd1, 0x08,
|
||||||
0x4f, 0x01, 0x9a, 0xd8, 0x69, 0xeb, 0xc4, 0xa2, 0x04, 0x5e, 0xaf, 0xc8, 0x7f, 0x90, 0xa0, 0x34,
|
0x09, 0xeb, 0x18, 0x95, 0x18, 0x51, 0xbe, 0xe2, 0x2c, 0x2a, 0x71, 0x64, 0x99, 0xd8, 0x09, 0x42,
|
||||||
0x5c, 0x9c, 0xb3, 0xc5, 0x51, 0xb6, 0x78, 0xc4, 0x16, 0x47, 0xd8, 0xf2, 0x16, 0x45, 0xc6, 0xd7,
|
0x89, 0x4a, 0x28, 0x11, 0x63, 0x21, 0x19, 0x16, 0x08, 0x76, 0x7a, 0x87, 0xa6, 0x8d, 0xeb, 0xd5,
|
||||||
0xd1, 0x89, 0x35, 0x4c, 0x93, 0xd8, 0x45, 0x2d, 0x5a, 0x1d, 0x1b, 0x3b, 0x01, 0xb7, 0x28, 0x70,
|
0x86, 0xd0, 0x94, 0xb4, 0x88, 0x56, 0xae, 0x43, 0xed, 0xae, 0x85, 0x75, 0x9f, 0xfb, 0xb9, 0x01,
|
||||||
0x0b, 0xa1, 0x0b, 0xa9, 0x30, 0x43, 0xb0, 0xd3, 0xde, 0xb5, 0xbb, 0xb8, 0x5c, 0xac, 0x48, 0x55,
|
0xd5, 0x7e, 0x22, 0xd1, 0x21, 0xa5, 0x5c, 0x80, 0xa5, 0xb1, 0x18, 0xf1, 0x94, 0xa7, 0xb0, 0xd2,
|
||||||
0xc5, 0x18, 0xb6, 0xb5, 0x16, 0x94, 0x1e, 0x75, 0xb0, 0xe9, 0x87, 0xe1, 0x59, 0x81, 0x62, 0x2f,
|
0xc5, 0x54, 0x7d, 0xa2, 0x46, 0x79, 0x57, 0x69, 0xaa, 0x0d, 0xdf, 0xed, 0x7b, 0x51, 0x7d, 0x46,
|
||||||
0x92, 0x5f, 0xde, 0xa2, 0x2e, 0x5c, 0x2f, 0xcc, 0x3c, 0x07, 0x38, 0x6c, 0xc7, 0x83, 0xa7, 0x24,
|
0x24, 0xbd, 0x61, 0x87, 0xa9, 0xe3, 0x29, 0x0d, 0x29, 0x05, 0xc1, 0x6a, 0x52, 0x39, 0xf1, 0x94,
|
||||||
0x37, 0xe1, 0x03, 0x98, 0x1b, 0x2d, 0x32, 0x49, 0x18, 0xb4, 0xef, 0x25, 0x58, 0x68, 0x62, 0xca,
|
0x6d, 0x58, 0xeb, 0xe2, 0x80, 0x67, 0xa6, 0x1b, 0xe8, 0x41, 0x9f, 0x70, 0xa3, 0x84, 0x11, 0x4c,
|
||||||
0x27, 0xa2, 0xc5, 0x54, 0xac, 0x65, 0x98, 0xb6, 0x7c, 0xb7, 0xe7, 0x0d, 0xa1, 0x0e, 0x9a, 0x74,
|
0x77, 0x45, 0xe3, 0x94, 0xb2, 0x01, 0xeb, 0x59, 0x71, 0xe2, 0x29, 0x1f, 0x33, 0x38, 0x64, 0xd4,
|
||||||
0x46, 0x97, 0x4b, 0x24, 0x94, 0x0e, 0x6f, 0xc5, 0x19, 0x4c, 0x25, 0xd3, 0x2f, 0xf2, 0x2f, 0x44,
|
0xa4, 0x9a, 0x58, 0xc8, 0x36, 0xf1, 0x0f, 0xb0, 0xde, 0xc9, 0x51, 0x48, 0xa3, 0xc3, 0x49, 0x20,
|
||||||
0xf9, 0x6b, 0x75, 0x58, 0x8c, 0x42, 0x9b, 0x88, 0xe1, 0x36, 0x2c, 0x35, 0x71, 0x10, 0x8a, 0xa5,
|
0xe1, 0x31, 0x90, 0x70, 0x02, 0x48, 0x38, 0x02, 0x12, 0x77, 0x59, 0x4a, 0xb8, 0xdc, 0x81, 0xb5,
|
||||||
0x19, 0x98, 0x41, 0x8f, 0x18, 0x49, 0x68, 0x52, 0x12, 0xda, 0x0a, 0x14, 0x09, 0x33, 0x67, 0x0e,
|
0x36, 0xb6, 0xba, 0x7d, 0x0f, 0xfb, 0x1d, 0x9a, 0xa0, 0x4c, 0x45, 0xc4, 0xa2, 0xb4, 0x4a, 0x89,
|
||||||
0x0b, 0x46, 0xd8, 0xd2, 0x1e, 0xc3, 0x72, 0xd2, 0xe1, 0x44, 0xd0, 0xee, 0xb1, 0xad, 0x7b, 0x7a,
|
0xb4, 0xd2, 0xd8, 0xb3, 0x8a, 0x88, 0xa7, 0x1c, 0x85, 0xb1, 0xa7, 0x0d, 0x4c, 0x8d, 0x1d, 0xad,
|
||||||
0x68, 0xda, 0x33, 0x58, 0x6e, 0xfc, 0x25, 0x10, 0x04, 0x92, 0x4a, 0x84, 0xe4, 0x57, 0x12, 0x2c,
|
0x82, 0x44, 0x8b, 0x24, 0xb2, 0x22, 0xd1, 0x3f, 0x27, 0x18, 0xf7, 0xc3, 0x3c, 0xa5, 0x8d, 0xcf,
|
||||||
0xd5, 0x71, 0xa7, 0xd9, 0xf3, 0xb0, 0xdf, 0xa0, 0x59, 0x0e, 0x75, 0x2c, 0xe6, 0x4b, 0x8a, 0xe9,
|
0x90, 0xa7, 0xf2, 0x2d, 0x73, 0x8f, 0xcd, 0x8c, 0xc7, 0xbe, 0x19, 0xe0, 0xb6, 0x79, 0x7c, 0x3c,
|
||||||
0x75, 0xa4, 0x1b, 0x39, 0x4b, 0x37, 0x4a, 0x54, 0x37, 0x63, 0xf5, 0x41, 0x83, 0x9d, 0x84, 0x31,
|
0x7b, 0x5c, 0xca, 0x29, 0x4b, 0x51, 0x52, 0xd3, 0x1b, 0x76, 0xfe, 0xe7, 0x0a, 0x28, 0xaa, 0xdb,
|
||||||
0x51, 0xb0, 0x5b, 0x3c, 0xd8, 0x71, 0x42, 0xe3, 0x75, 0xb0, 0x08, 0x0a, 0x55, 0xb6, 0xcc, 0x94,
|
0x33, 0x8f, 0x87, 0x6a, 0x38, 0x24, 0x35, 0xac, 0x1f, 0x51, 0x07, 0xf7, 0x07, 0x01, 0x76, 0x88,
|
||||||
0x4d, 0x7f, 0x66, 0x13, 0xd2, 0xbe, 0xe4, 0x89, 0x39, 0x3b, 0xdc, 0x09, 0xcf, 0xc5, 0xc7, 0xec,
|
0xe9, 0x3a, 0xe5, 0x10, 0xca, 0xba, 0xdc, 0xed, 0xfb, 0x47, 0x38, 0x82, 0x4a, 0x44, 0xd3, 0x33,
|
||||||
0x72, 0xf9, 0xc8, 0xb7, 0x03, 0x5c, 0xb7, 0xf7, 0xf7, 0x27, 0xe7, 0xa8, 0x7d, 0xc1, 0xc2, 0x15,
|
0xd7, 0x4b, 0xfc, 0x3c, 0x44, 0x74, 0x38, 0x61, 0x08, 0x35, 0x74, 0x38, 0xf4, 0x30, 0x9b, 0x30,
|
||||||
0xf5, 0xf4, 0x1a, 0x89, 0x7c, 0x57, 0x00, 0x4d, 0x77, 0xdb, 0xf6, 0x7e, 0x5f, 0xe7, 0x37, 0xab,
|
0x15, 0x2d, 0xce, 0x42, 0x03, 0xb8, 0xe4, 0xa7, 0x9d, 0x62, 0xf3, 0xbe, 0xc2, 0xe6, 0xfd, 0x5e,
|
||||||
0x81, 0xcd, 0x16, 0x05, 0xbb, 0x79, 0x1c, 0x60, 0x87, 0xd8, 0xae, 0x93, 0x73, 0x17, 0xd3, 0x33,
|
0x38, 0xef, 0xa7, 0xc6, 0xd0, 0xd2, 0xf2, 0x94, 0xec, 0x3b, 0x81, 0x3f, 0xd4, 0xf2, 0x0d, 0xa4,
|
||||||
0xda, 0xed, 0xf9, 0x2d, 0x3c, 0x3a, 0x60, 0x07, 0xed, 0x88, 0x98, 0x95, 0xe4, 0xe1, 0x4b, 0x30,
|
0x67, 0x5b, 0x35, 0x3b, 0xdb, 0x6e, 0x81, 0x88, 0x07, 0xf5, 0x79, 0x96, 0xe3, 0xcd, 0x96, 0xe1,
|
||||||
0xa1, 0x0b, 0xed, 0xf6, 0x3d, 0xcc, 0xa4, 0x59, 0x30, 0xc4, 0x2e, 0x74, 0x0c, 0x17, 0xfc, 0x38,
|
0xba, 0x86, 0x85, 0xc3, 0x37, 0xc4, 0xf3, 0xfe, 0x71, 0xab, 0x1b, 0xf8, 0xa6, 0x63, 0x7c, 0xa7,
|
||||||
0x28, 0xf6, 0x48, 0x28, 0xb0, 0x47, 0xc2, 0x06, 0x7f, 0x24, 0x8c, 0xe5, 0x50, 0x33, 0xd2, 0x9c,
|
0x5b, 0x7d, 0xac, 0x89, 0x78, 0x80, 0xbe, 0x84, 0x25, 0x3d, 0x08, 0xf4, 0xa3, 0x17, 0xb8, 0x77,
|
||||||
0x6c, 0x3a, 0x81, 0xdf, 0x37, 0xd2, 0x17, 0x88, 0xdf, 0x4c, 0xc5, 0xe4, 0xcd, 0x74, 0x07, 0x64,
|
0xe0, 0x1c, 0xbb, 0xf5, 0x85, 0x12, 0xf7, 0x12, 0x37, 0x28, 0x14, 0x4c, 0xc2, 0x02, 0xa9, 0x2f,
|
||||||
0x7c, 0x5c, 0x9e, 0x66, 0xf1, 0x5e, 0xad, 0x59, 0xae, 0x6b, 0x75, 0x30, 0x7f, 0x9c, 0x3e, 0xef,
|
0x36, 0x84, 0xe6, 0x82, 0x36, 0x22, 0xd1, 0x2e, 0xac, 0x9b, 0x84, 0xba, 0xef, 0x3b, 0xba, 0x35,
|
||||||
0xed, 0xd7, 0x9a, 0x81, 0x6f, 0x3b, 0xd6, 0x87, 0x66, 0xa7, 0x87, 0x0d, 0x19, 0x1f, 0xa3, 0x07,
|
0x0e, 0xbc, 0x0e, 0x4c, 0x2c, 0xf7, 0x0c, 0xb5, 0x00, 0xd9, 0xc4, 0xf8, 0xca, 0xf4, 0x49, 0x10,
|
||||||
0x30, 0x67, 0x06, 0x81, 0xd9, 0x7a, 0x81, 0xdb, 0x5b, 0xce, 0xbe, 0x5b, 0x9e, 0xc9, 0x31, 0x2f,
|
0xe6, 0x8f, 0xcd, 0xe8, 0x1a, 0x9b, 0xd1, 0x39, 0x27, 0xf2, 0x13, 0x90, 0x8b, 0x93, 0x48, 0xf1,
|
||||||
0x32, 0x83, 0xca, 0xc2, 0x26, 0x8c, 0x48, 0x79, 0xb6, 0x22, 0x55, 0x67, 0x8c, 0x41, 0x13, 0xad,
|
0x7c, 0x82, 0x87, 0x1c, 0x1b, 0xf4, 0x4f, 0x74, 0x1d, 0x2a, 0x2f, 0x69, 0x10, 0xfc, 0x09, 0xb1,
|
||||||
0xc3, 0xb2, 0x4d, 0x28, 0x7c, 0xdf, 0x31, 0x3b, 0x23, 0xe2, 0x65, 0x60, 0x66, 0xa9, 0x63, 0xa8,
|
0xc2, 0x41, 0x78, 0x1f, 0x0f, 0xc3, 0xd8, 0xc2, 0xd3, 0xcf, 0xc4, 0x4f, 0x04, 0xe5, 0xdf, 0x39,
|
||||||
0x06, 0xa8, 0x4b, 0xac, 0x77, 0x6d, 0x9f, 0x04, 0x3c, 0x7e, 0xec, 0x86, 0x2d, 0xb1, 0x1b, 0x36,
|
0xb8, 0x42, 0xa7, 0xee, 0xdb, 0x0a, 0xc2, 0xfe, 0x64, 0x10, 0x7e, 0xc1, 0x40, 0x38, 0x25, 0x80,
|
||||||
0x65, 0x44, 0xc5, 0xa0, 0x66, 0x07, 0x91, 0x6a, 0xfb, 0x00, 0xf7, 0x43, 0x6d, 0xd0, 0x9f, 0xe8,
|
0xff, 0x11, 0xf8, 0x36, 0x23, 0xf0, 0x4f, 0x01, 0x1a, 0x93, 0x0b, 0x38, 0xd3, 0x28, 0x4e, 0x55,
|
||||||
0x3f, 0x50, 0x78, 0x49, 0x49, 0x84, 0x6f, 0xd0, 0x4b, 0x29, 0x82, 0x7c, 0x82, 0xfb, 0x9c, 0x27,
|
0x50, 0xca, 0x56, 0x30, 0x3f, 0x07, 0x73, 0x45, 0x39, 0x88, 0x57, 0xa0, 0x92, 0xac, 0xc0, 0x0d,
|
||||||
0xb7, 0x7c, 0x4b, 0xfe, 0xbf, 0xa4, 0x7d, 0x5b, 0x80, 0xcb, 0xf4, 0x42, 0x7a, 0x53, 0x05, 0xd9,
|
0xa8, 0xfa, 0x98, 0xf4, 0xad, 0xa0, 0x5e, 0x65, 0xa8, 0xbc, 0xc8, 0x50, 0x19, 0x05, 0x8b, 0x89,
|
||||||
0x3b, 0x59, 0x90, 0xef, 0x30, 0x41, 0x8e, 0x21, 0xf0, 0x8f, 0x1a, 0xff, 0x2e, 0x6a, 0xfc, 0x4d,
|
0xa7, 0x71, 0x01, 0xe5, 0x1f, 0x11, 0xae, 0x76, 0xa2, 0x68, 0x69, 0x0a, 0x5f, 0xa3, 0xe7, 0xa2,
|
||||||
0x82, 0xca, 0xc9, 0xc9, 0x9c, 0xf4, 0x5d, 0x2c, 0x66, 0x53, 0x49, 0x66, 0x33, 0x3d, 0x1e, 0x53,
|
0xbe, 0x12, 0x53, 0x7d, 0x15, 0xef, 0x47, 0x29, 0xd5, 0x8f, 0xd3, 0x7b, 0x8e, 0xc0, 0x86, 0x9d,
|
||||||
0x59, 0xf1, 0x10, 0xb3, 0x51, 0x88, 0x66, 0xe3, 0x16, 0x14, 0x7d, 0x4c, 0x7a, 0x9d, 0xa0, 0x5c,
|
0xac, 0xc6, 0x7d, 0x3c, 0x8c, 0x35, 0xdd, 0x6d, 0x16, 0x5e, 0x89, 0x28, 0x5a, 0x6a, 0x46, 0x8d,
|
||||||
0x64, 0x0a, 0x3d, 0xcf, 0x14, 0x3a, 0x24, 0x8b, 0x89, 0x67, 0x84, 0x06, 0xda, 0x1f, 0x32, 0x5c,
|
0x56, 0xa0, 0x5a, 0x3e, 0x06, 0x94, 0x95, 0x4e, 0x57, 0x51, 0x28, 0x5b, 0x45, 0xb1, 0xa8, 0x8a,
|
||||||
0x6d, 0x0c, 0xd9, 0xd2, 0x70, 0x9e, 0x61, 0xff, 0x65, 0xbe, 0xb8, 0xc5, 0xbd, 0xa9, 0xc4, 0xf6,
|
0xca, 0xef, 0x02, 0x5c, 0x9b, 0xee, 0xfa, 0x4c, 0x90, 0xeb, 0xc2, 0x1a, 0x31, 0x1d, 0xc3, 0xc2,
|
||||||
0xe6, 0xf8, 0xfd, 0x47, 0x60, 0xa5, 0x1b, 0xcd, 0xc6, 0x13, 0xdc, 0x17, 0x36, 0xe0, 0x7d, 0x46,
|
0x51, 0x20, 0x0c, 0x13, 0xe1, 0xe7, 0xd1, 0x7b, 0xe1, 0xa4, 0x8a, 0x9f, 0x47, 0x06, 0x43, 0x41,
|
||||||
0x2f, 0x07, 0x8b, 0x9a, 0x9e, 0x70, 0x63, 0x64, 0xb8, 0x56, 0xf7, 0x01, 0x25, 0xad, 0xe3, 0x59,
|
0x2d, 0xef, 0xb6, 0xf2, 0x4a, 0x84, 0xcd, 0x49, 0xb7, 0x66, 0xf0, 0xd3, 0x2f, 0x9a, 0xa9, 0xa1,
|
||||||
0x94, 0xf2, 0x66, 0x51, 0xce, 0xca, 0xa2, 0xf6, 0x93, 0x04, 0xd7, 0xc6, 0x43, 0x9f, 0x48, 0x72,
|
0xa7, 0x9f, 0x4f, 0xf5, 0xf4, 0xf5, 0x07, 0xea, 0x5c, 0xa6, 0x90, 0x6f, 0x72, 0xc4, 0xbc, 0x12,
|
||||||
0x4d, 0x58, 0x22, 0xb6, 0x63, 0x75, 0xf0, 0x90, 0x08, 0xd3, 0x04, 0xff, 0xd6, 0xbe, 0xc2, 0x4f,
|
0xe0, 0xea, 0xd4, 0x87, 0xca, 0x4c, 0x25, 0xff, 0x10, 0x6a, 0xa4, 0x7f, 0x74, 0x84, 0x09, 0x89,
|
||||||
0x2d, 0x71, 0x7c, 0xb8, 0x20, 0x37, 0x34, 0xd2, 0x66, 0x6b, 0xbf, 0xc8, 0xb0, 0x7a, 0xd2, 0xac,
|
0x25, 0x10, 0xb1, 0x04, 0x32, 0xdd, 0xa3, 0x0f, 0x3a, 0x2d, 0x2e, 0x86, 0x76, 0x01, 0x8e, 0x75,
|
||||||
0x09, 0x70, 0xfa, 0x59, 0xe7, 0x2b, 0x47, 0xfa, 0xf6, 0x58, 0xa4, 0x67, 0x3f, 0x5c, 0xa7, 0x12,
|
0xd3, 0xc2, 0x3d, 0x76, 0x69, 0xae, 0xf0, 0x52, 0x4c, 0x4a, 0xf9, 0x4b, 0x84, 0xf7, 0xdb, 0xd8,
|
||||||
0x89, 0x7c, 0x5d, 0xc7, 0xcd, 0xcf, 0x12, 0x5c, 0x1d, 0xfb, 0x98, 0x99, 0xf0, 0x81, 0x58, 0x22,
|
0xc2, 0x01, 0x7e, 0xab, 0x67, 0xc7, 0xf4, 0xcf, 0xd2, 0xa2, 0x9f, 0xab, 0xea, 0xb9, 0x7f, 0xae,
|
||||||
0xbd, 0x56, 0x0b, 0x13, 0x22, 0x04, 0x13, 0xb1, 0x60, 0x32, 0xdf, 0x83, 0x8f, 0x7c, 0x43, 0x34,
|
0xe6, 0x0b, 0x47, 0xf5, 0x7e, 0x11, 0xc2, 0x17, 0x58, 0xae, 0x33, 0x58, 0xc9, 0x97, 0x56, 0x7e,
|
||||||
0x43, 0xeb, 0x00, 0xfb, 0xa6, 0xdd, 0xc1, 0x6d, 0x36, 0x69, 0x2a, 0x73, 0x92, 0x60, 0xa5, 0xfd,
|
0x11, 0x60, 0xab, 0x54, 0xce, 0x67, 0xc2, 0xce, 0x39, 0x7e, 0x35, 0x5c, 0x58, 0x4e, 0x20, 0x03,
|
||||||
0x2e, 0xc3, 0x8d, 0x3a, 0xee, 0xe0, 0x00, 0xbf, 0xd1, 0xe7, 0xc8, 0xf8, 0xc2, 0x43, 0xd6, 0x35,
|
0xdd, 0x82, 0x45, 0x3c, 0x62, 0x44, 0xab, 0xaa, 0x24, 0x80, 0xc6, 0x02, 0x71, 0xdf, 0xc4, 0x22,
|
||||||
0x56, 0x3c, 0xf5, 0x35, 0x36, 0x9d, 0x79, 0x6c, 0xef, 0x64, 0xa9, 0x7d, 0x86, 0xc5, 0xfa, 0x44,
|
0xdf, 0xa4, 0xb8, 0x6f, 0xca, 0x1f, 0x22, 0x2c, 0x46, 0xaa, 0xd0, 0xb3, 0xa2, 0x74, 0x0a, 0xcc,
|
||||||
0xdd, 0xa4, 0xcf, 0xd4, 0xbe, 0x96, 0xe0, 0x66, 0xae, 0xf8, 0x4f, 0xa4, 0xa3, 0x53, 0xdc, 0x26,
|
0xf1, 0x1b, 0x49, 0xcb, 0xaf, 0x3f, 0x1d, 0xc4, 0xb2, 0x63, 0x5e, 0x2a, 0x44, 0x80, 0x92, 0x7a,
|
||||||
0x2e, 0xcc, 0x47, 0x54, 0x82, 0xee, 0xc0, 0x2c, 0x1e, 0x74, 0x84, 0x75, 0xd2, 0x73, 0x31, 0x31,
|
0x70, 0x85, 0x03, 0x27, 0xf9, 0xa4, 0xba, 0xc0, 0x9e, 0x70, 0x21, 0x44, 0x45, 0x3c, 0x90, 0x9f,
|
||||||
0x8d, 0x0c, 0x44, 0x6c, 0x72, 0x16, 0x36, 0x25, 0xf2, 0xf1, 0xf9, 0xab, 0x0c, 0xb3, 0x43, 0x57,
|
0x9e, 0x73, 0x02, 0x6d, 0x25, 0x27, 0x50, 0x4e, 0xfd, 0x62, 0x33, 0xc8, 0x86, 0xa5, 0xf8, 0x11,
|
||||||
0x68, 0x2f, 0x2b, 0xb4, 0x12, 0x03, 0x7e, 0x2b, 0xba, 0xf2, 0xd9, 0x4f, 0x0d, 0x39, 0xef, 0xf1,
|
0xba, 0x09, 0x0b, 0x27, 0x9c, 0xe6, 0x05, 0xcc, 0xa0, 0x32, 0x12, 0x98, 0xa1, 0x80, 0xbf, 0x0a,
|
||||||
0xaf, 0x64, 0xaa, 0x41, 0x8b, 0x3d, 0xca, 0xf8, 0x41, 0x14, 0x7d, 0x76, 0x9d, 0x63, 0xcf, 0x3c,
|
0xb0, 0x16, 0xdb, 0xfc, 0xd1, 0xbc, 0xb0, 0xd5, 0x5f, 0x66, 0xc1, 0x27, 0x94, 0x58, 0xf0, 0x89,
|
||||||
0x2e, 0x57, 0x19, 0x1f, 0xab, 0x9f, 0x9c, 0xf2, 0x64, 0xba, 0x19, 0x3d, 0x99, 0x52, 0xf2, 0x27,
|
0xe7, 0x5e, 0xf0, 0x49, 0xa9, 0x05, 0xdf, 0xee, 0xdf, 0xf3, 0x20, 0xd9, 0xc4, 0x40, 0xf7, 0x60,
|
||||||
0x9c, 0x47, 0x7d, 0x98, 0x13, 0x87, 0xd0, 0x3d, 0x98, 0x39, 0x08, 0xdb, 0x61, 0x02, 0x4f, 0x54,
|
0x25, 0xb5, 0x98, 0x43, 0x97, 0x79, 0xdc, 0xd9, 0x05, 0xa0, 0x2c, 0x17, 0x1d, 0x11, 0x0f, 0x3d,
|
||||||
0xe8, 0xd0, 0x78, 0x82, 0x64, 0xbe, 0x92, 0x60, 0x49, 0x28, 0x35, 0xd3, 0x18, 0xb1, 0x5a, 0x73,
|
0x86, 0xf5, 0x87, 0x7d, 0xcb, 0xe2, 0x9d, 0xb9, 0x37, 0xec, 0xe2, 0x53, 0xe6, 0xc7, 0xbb, 0xfc,
|
||||||
0xa2, 0xa2, 0x2c, 0xe5, 0xa8, 0x28, 0xcb, 0xa7, 0xae, 0x28, 0x2b, 0xb1, 0x8a, 0xf2, 0xfa, 0x37,
|
0x4e, 0xde, 0x21, 0xd5, 0x79, 0x65, 0xe2, 0x39, 0xeb, 0xad, 0x79, 0xbe, 0xf0, 0x41, 0x2b, 0xfc,
|
||||||
0x00, 0x4a, 0x97, 0x58, 0xe8, 0x19, 0x2c, 0xc4, 0x2a, 0xc1, 0xe8, 0x7a, 0x4a, 0x0c, 0x92, 0xd5,
|
0xf3, 0x62, 0xb4, 0xd0, 0x93, 0x57, 0x93, 0x0c, 0xe2, 0xa1, 0x4f, 0x01, 0xda, 0xd8, 0x52, 0x89,
|
||||||
0x67, 0xf5, 0x46, 0x1e, 0x33, 0xe2, 0x21, 0x17, 0x96, 0x9f, 0xf6, 0x3a, 0x9d, 0x70, 0xf7, 0x6e,
|
0xc1, 0x8c, 0xaf, 0x73, 0xe5, 0x63, 0x16, 0xbd, 0x75, 0x29, 0x87, 0x4b, 0x3c, 0xd4, 0x81, 0xd5,
|
||||||
0xf4, 0x9b, 0xf8, 0x90, 0xe1, 0xfb, 0x77, 0xca, 0xfc, 0x34, 0x43, 0xba, 0xd6, 0xed, 0xdc, 0xb6,
|
0xf4, 0xc6, 0x06, 0xd5, 0x99, 0x81, 0x9c, 0x8d, 0x90, 0x7c, 0xb9, 0xe0, 0x84, 0x78, 0x68, 0x07,
|
||||||
0x6c, 0x5f, 0x4e, 0x87, 0x55, 0x2e, 0xb4, 0x10, 0x7e, 0xbe, 0x0c, 0x2a, 0xce, 0xea, 0x62, 0xb4,
|
0x16, 0x46, 0x6b, 0x3a, 0x14, 0x7a, 0x18, 0x5b, 0xee, 0xc9, 0x17, 0x53, 0x9c, 0xd0, 0x72, 0x7a,
|
||||||
0x83, 0x78, 0x68, 0x07, 0xa0, 0x8e, 0x3b, 0x3a, 0xb1, 0xf8, 0x26, 0x48, 0x59, 0x68, 0x34, 0x4c,
|
0x4f, 0xc6, 0x2d, 0xe7, 0x6c, 0xdb, 0xb8, 0xe5, 0xbc, 0xc5, 0x1a, 0x55, 0xd4, 0xc9, 0x57, 0xd4,
|
||||||
0x3d, 0x5c, 0x19, 0x63, 0x41, 0x3c, 0xd4, 0x80, 0xc5, 0x78, 0xfd, 0x09, 0x95, 0xd9, 0xc2, 0x29,
|
0x29, 0x54, 0x94, 0xbb, 0x50, 0x3b, 0x81, 0xcd, 0x49, 0x1f, 0x01, 0xe8, 0x5a, 0x99, 0x0f, 0x3d,
|
||||||
0xd5, 0x31, 0xf5, 0x62, 0xc6, 0x08, 0xf1, 0xd0, 0x1a, 0xcc, 0x0c, 0x4a, 0xb5, 0x88, 0x23, 0x17,
|
0xf9, 0x7a, 0x09, 0x29, 0xe2, 0xa1, 0x33, 0x68, 0x4c, 0x7b, 0x02, 0xa2, 0x66, 0xd9, 0x47, 0xae,
|
||||||
0xca, 0xc3, 0xea, 0xf9, 0x58, 0x0f, 0xf1, 0xd0, 0x7d, 0x98, 0x13, 0xab, 0x9f, 0x68, 0x79, 0xf8,
|
0x7c, 0xa3, 0xa4, 0x24, 0xf1, 0xd0, 0x29, 0x6c, 0xde, 0xe9, 0xf5, 0x8a, 0xa3, 0xdc, 0x2a, 0xb9,
|
||||||
0xf9, 0x26, 0xd4, 0x6a, 0xd5, 0x0b, 0x29, 0xbd, 0x1c, 0x76, 0xbc, 0x46, 0x19, 0xc2, 0x4e, 0xa9,
|
0x53, 0x91, 0x9b, 0xe5, 0x04, 0x89, 0x87, 0x7e, 0x84, 0x2b, 0x89, 0x9f, 0xb0, 0x1c, 0xab, 0x37,
|
||||||
0x85, 0x86, 0xb0, 0x53, 0x8b, 0x9a, 0x0d, 0x58, 0x6c, 0xa4, 0x3b, 0x6a, 0x64, 0x3a, 0x6a, 0x9c,
|
0x47, 0xc8, 0x2a, 0xf1, 0xb8, 0x90, 0x6f, 0x95, 0x17, 0x26, 0xde, 0xde, 0x3b, 0xdf, 0x5f, 0x7e,
|
||||||
0xe0, 0x28, 0x25, 0x90, 0x29, 0x55, 0x39, 0xc1, 0x51, 0x22, 0x90, 0x75, 0xa6, 0x72, 0xb1, 0x30,
|
0xe0, 0x61, 0xe7, 0xd9, 0x81, 0x1a, 0xfb, 0xd7, 0x8f, 0x4d, 0x8c, 0xdb, 0x36, 0x31, 0x9e, 0x57,
|
||||||
0x85, 0xfe, 0x35, 0xb0, 0x8e, 0x15, 0xbe, 0xd4, 0x72, 0xfa, 0x00, 0xf1, 0xd0, 0x01, 0xac, 0x9e,
|
0x19, 0xf9, 0xc1, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xb1, 0x5e, 0x2e, 0xb4, 0x62, 0x1a, 0x00,
|
||||||
0xf4, 0xf1, 0x84, 0xae, 0xe5, 0xf9, 0x58, 0x56, 0xaf, 0xe7, 0xb0, 0x22, 0x1e, 0x3a, 0x82, 0xca,
|
0x00,
|
||||||
0xb8, 0xa7, 0x33, 0xaa, 0xe6, 0xfd, 0x38, 0x50, 0x6f, 0xe5, 0xb4, 0x24, 0x1e, 0x3a, 0x84, 0xd5,
|
|
||||||
0x87, 0xed, 0x76, 0x36, 0xcb, 0x9b, 0x39, 0x6b, 0x54, 0x6a, 0x35, 0x9f, 0x21, 0xf1, 0xd0, 0xe7,
|
|
||||||
0x70, 0x39, 0x72, 0xc5, 0xa7, 0xac, 0x7a, 0x7b, 0xb0, 0x4b, 0x72, 0x3c, 0xc4, 0xd4, 0x3b, 0xf9,
|
|
||||||
0x8d, 0x89, 0xb7, 0x71, 0xe9, 0xe3, 0x8b, 0xdb, 0x1e, 0x76, 0xf6, 0xb6, 0x74, 0xe1, 0x4f, 0xda,
|
|
||||||
0x2e, 0xb1, 0xee, 0x77, 0x89, 0xf5, 0xbc, 0xc8, 0x9a, 0xff, 0xfd, 0x33, 0x00, 0x00, 0xff, 0xff,
|
|
||||||
0xd4, 0xae, 0xa9, 0xee, 0x0d, 0x1e, 0x00, 0x00,
|
|
||||||
}
|
}
|
||||||
|
@ -30,26 +30,6 @@ message MsgDataToMongoByMQ{
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//message PullMessageReq {
|
|
||||||
// string UserID = 1;
|
|
||||||
// int64 SeqBegin = 2;
|
|
||||||
// int64 SeqEnd = 3;
|
|
||||||
// string OperationID = 4;
|
|
||||||
//}
|
|
||||||
//
|
|
||||||
//message PullMessageResp {
|
|
||||||
// int32 ErrCode = 1;
|
|
||||||
// string ErrMsg = 2;
|
|
||||||
// int64 MaxSeq = 3;
|
|
||||||
// int64 MinSeq = 4;
|
|
||||||
// repeated GatherFormat SingleUserMsg = 5;
|
|
||||||
// repeated GatherFormat GroupUserMsg = 6;
|
|
||||||
//}
|
|
||||||
//message PullMessageBySeqListReq{
|
|
||||||
// string UserID = 1;
|
|
||||||
// string OperationID = 2;
|
|
||||||
// repeated int64 seqList =3;
|
|
||||||
//}
|
|
||||||
message GetMaxAndMinSeqReq {
|
message GetMaxAndMinSeqReq {
|
||||||
string UserID = 1;
|
string UserID = 1;
|
||||||
string OperationID = 2;
|
string OperationID = 2;
|
||||||
@ -62,17 +42,10 @@ message GetMaxAndMinSeqResp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
message SendMsgReq {
|
message SendMsgReq {
|
||||||
|
sdkws.MsgData msgData = 3;
|
||||||
string token =1;
|
|
||||||
string operationID = 2;
|
|
||||||
sdkws.MsgData msgData = 3;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message SendMsgResp {
|
message SendMsgResp {
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
string serverMsgID = 4;
|
string serverMsgID = 4;
|
||||||
string clientMsgID = 5;
|
string clientMsgID = 5;
|
||||||
int64 sendTime = 6;
|
int64 sendTime = 6;
|
||||||
@ -81,36 +54,25 @@ message SendMsgResp {
|
|||||||
|
|
||||||
message ClearMsgReq{
|
message ClearMsgReq{
|
||||||
string userID = 1;
|
string userID = 1;
|
||||||
string opUserID = 2;
|
|
||||||
string operationID = 3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
message ClearMsgResp{
|
message ClearMsgResp{
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message SetMsgMinSeqReq{
|
message SetMsgMinSeqReq{
|
||||||
string userID = 1;
|
string userID = 1;
|
||||||
string groupID = 2;
|
string groupID = 2;
|
||||||
uint32 minSeq = 3;
|
uint32 minSeq = 3;
|
||||||
string operationID = 4;
|
|
||||||
string opUserID = 5;
|
|
||||||
}
|
}
|
||||||
message SetMsgMinSeqResp{
|
message SetMsgMinSeqResp{
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message SetSendMsgStatusReq{
|
message SetSendMsgStatusReq{
|
||||||
string operationID = 1;
|
|
||||||
int32 status = 2;
|
int32 status = 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
message SetSendMsgStatusResp{
|
message SetSendMsgStatusResp{
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message GetSendMsgStatusReq{
|
message GetSendMsgStatusReq{
|
||||||
@ -123,14 +85,10 @@ message GetSendMsgStatusResp{
|
|||||||
int32 status = 3;
|
int32 status = 3;
|
||||||
}
|
}
|
||||||
message DelSuperGroupMsgReq{
|
message DelSuperGroupMsgReq{
|
||||||
string opUserID = 1;
|
|
||||||
string userID = 2;
|
string userID = 2;
|
||||||
string groupID = 3;
|
string groupID = 3;
|
||||||
string operationID = 4;
|
|
||||||
}
|
}
|
||||||
message DelSuperGroupMsgResp{
|
message DelSuperGroupMsgResp{
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
}
|
}
|
||||||
message GetSuperGroupMsgReq{
|
message GetSuperGroupMsgReq{
|
||||||
string operationID = 1;
|
string operationID = 1;
|
||||||
@ -267,19 +225,27 @@ message MsgDataToModifyByMQ{
|
|||||||
|
|
||||||
|
|
||||||
service msg {
|
service msg {
|
||||||
|
//获取最小最大seq(包括用户的,以及指定群组的)
|
||||||
rpc GetMaxAndMinSeq(sdkws.GetMaxAndMinSeqReq) returns(sdkws.GetMaxAndMinSeqResp);
|
rpc GetMaxAndMinSeq(sdkws.GetMaxAndMinSeqReq) returns(sdkws.GetMaxAndMinSeqResp);
|
||||||
|
//拉取历史消息(包括用户的,以及指定群组的)
|
||||||
rpc PullMessageBySeqList(sdkws.PullMessageBySeqListReq) returns(sdkws.PullMessageBySeqListResp);
|
rpc PullMessageBySeqList(sdkws.PullMessageBySeqListReq) returns(sdkws.PullMessageBySeqListResp);
|
||||||
|
//发送消息
|
||||||
rpc SendMsg(SendMsgReq) returns(SendMsgResp);
|
rpc SendMsg(SendMsgReq) returns(SendMsgResp);
|
||||||
|
//删除某人消息
|
||||||
rpc DelMsgList(sdkws.DelMsgListReq) returns(sdkws.DelMsgListResp);
|
rpc DelMsgList(sdkws.DelMsgListReq) returns(sdkws.DelMsgListResp);
|
||||||
|
//删除某个用户某个大群消息
|
||||||
rpc DelSuperGroupMsg(DelSuperGroupMsgReq) returns(DelSuperGroupMsgResp);
|
rpc DelSuperGroupMsg(DelSuperGroupMsgReq) returns(DelSuperGroupMsgResp);
|
||||||
|
//清空某人所有消息
|
||||||
rpc ClearMsg(ClearMsgReq) returns(ClearMsgResp);
|
rpc ClearMsg(ClearMsgReq) returns(ClearMsgResp);
|
||||||
rpc SetMsgMinSeq(SetMsgMinSeqReq) returns(SetMsgMinSeqResp);
|
|
||||||
rpc SetSendMsgStatus(SetSendMsgStatusReq) returns(SetSendMsgStatusResp);
|
|
||||||
rpc GetSendMsgStatus(GetSendMsgStatusReq) returns(GetSendMsgStatusResp);
|
|
||||||
rpc GetSuperGroupMsg(GetSuperGroupMsgReq) returns(GetSuperGroupMsgResp);
|
|
||||||
rpc GetWriteDiffMsg(GetWriteDiffMsgReq) returns(GetWriteDiffMsgResp);
|
|
||||||
|
|
||||||
// modify msg
|
//设置消息是否发送成功-针对api发送的消息
|
||||||
|
rpc SetSendMsgStatus(SetSendMsgStatusReq) returns(SetSendMsgStatusResp);
|
||||||
|
//获取消息发送状态
|
||||||
|
rpc GetSendMsgStatus(GetSendMsgStatusReq) returns(GetSendMsgStatusResp);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 修改消息
|
||||||
rpc SetMessageReactionExtensions(SetMessageReactionExtensionsReq) returns(SetMessageReactionExtensionsResp);
|
rpc SetMessageReactionExtensions(SetMessageReactionExtensionsReq) returns(SetMessageReactionExtensionsResp);
|
||||||
rpc GetMessageListReactionExtensions(GetMessageListReactionExtensionsReq) returns(GetMessageListReactionExtensionsResp);
|
rpc GetMessageListReactionExtensions(GetMessageListReactionExtensionsReq) returns(GetMessageListReactionExtensionsResp);
|
||||||
rpc AddMessageReactionExtensions(ModifyMessageReactionExtensionsReq) returns(ModifyMessageReactionExtensionsResp);
|
rpc AddMessageReactionExtensions(ModifyMessageReactionExtensionsReq) returns(ModifyMessageReactionExtensionsResp);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -132,7 +132,6 @@ message FriendRequest{
|
|||||||
///////////////////////////////////base end/////////////////////////////////////
|
///////////////////////////////////base end/////////////////////////////////////
|
||||||
message PullMessageBySeqListReq{
|
message PullMessageBySeqListReq{
|
||||||
string userID = 1;
|
string userID = 1;
|
||||||
string operationID = 2;
|
|
||||||
repeated uint32 seqList = 3;
|
repeated uint32 seqList = 3;
|
||||||
map <string, seqList>groupSeqList = 4;
|
map <string, seqList>groupSeqList = 4;
|
||||||
}
|
}
|
||||||
@ -158,7 +157,6 @@ message PullMessageBySeqListResp {
|
|||||||
message GetMaxAndMinSeqReq {
|
message GetMaxAndMinSeqReq {
|
||||||
repeated string groupIDList = 1;
|
repeated string groupIDList = 1;
|
||||||
string userID = 2;
|
string userID = 2;
|
||||||
string operationID = 3;
|
|
||||||
}
|
}
|
||||||
message MaxAndMinSeq{
|
message MaxAndMinSeq{
|
||||||
uint32 maxSeq = 1;
|
uint32 maxSeq = 1;
|
||||||
@ -167,8 +165,6 @@ message MaxAndMinSeq{
|
|||||||
message GetMaxAndMinSeqResp {
|
message GetMaxAndMinSeqResp {
|
||||||
uint32 maxSeq = 1;
|
uint32 maxSeq = 1;
|
||||||
uint32 minSeq = 2;
|
uint32 minSeq = 2;
|
||||||
int32 errCode = 3;
|
|
||||||
string errMsg = 4;
|
|
||||||
map<string, MaxAndMinSeq> groupMaxAndMinSeq = 5;
|
map<string, MaxAndMinSeq> groupMaxAndMinSeq = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -606,15 +602,11 @@ message SignalGetTokenByRoomIDReply {
|
|||||||
|
|
||||||
|
|
||||||
message DelMsgListReq{
|
message DelMsgListReq{
|
||||||
string opUserID = 1;
|
|
||||||
string userID = 2;
|
string userID = 2;
|
||||||
repeated uint32 seqList = 3;
|
repeated uint32 seqList = 3;
|
||||||
string operationID = 4;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message DelMsgListResp{
|
message DelMsgListResp{
|
||||||
int32 errCode = 1;
|
|
||||||
string errMsg = 2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
message SetAppBackgroundStatusReq {
|
message SetAppBackgroundStatusReq {
|
||||||
|
@ -128,7 +128,13 @@ message userRegisterResp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
message getGlobalRecvMessageOptReq{
|
||||||
|
string userID = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
message getGlobalRecvMessageOptResp{
|
||||||
|
int32 globalRecvMsgOpt = 1;
|
||||||
|
}
|
||||||
|
|
||||||
service user {
|
service user {
|
||||||
//获取指定的用户信息 全字段
|
//获取指定的用户信息 全字段
|
||||||
@ -137,8 +143,10 @@ service user {
|
|||||||
rpc updateUserInfo(updateUserInfoReq) returns(updateUserInfoResp);
|
rpc updateUserInfo(updateUserInfoReq) returns(updateUserInfoResp);
|
||||||
//设置用户消息接收选项
|
//设置用户消息接收选项
|
||||||
rpc setGlobalRecvMessageOpt(setGlobalRecvMessageOptReq) returns(setGlobalRecvMessageOptResp);
|
rpc setGlobalRecvMessageOpt(setGlobalRecvMessageOptReq) returns(setGlobalRecvMessageOptResp);
|
||||||
|
//获取用户消息接收选项 没找到不返回错误
|
||||||
|
rpc getGlobalRecvMessageOpt(getGlobalRecvMessageOptReq) returns(getGlobalRecvMessageOptResp);
|
||||||
//检查userID是否存在
|
//检查userID是否存在
|
||||||
rpc accountCheck(accountCheckReq)returns(accountCheckResp);
|
rpc accountCheck(accountCheckReq) returns (accountCheckResp);
|
||||||
//翻页(或指定userID,昵称)拉取用户信息 全字段
|
//翻页(或指定userID,昵称)拉取用户信息 全字段
|
||||||
rpc getPaginationUsers(getPaginationUsersReq) returns (getPaginationUsersResp);
|
rpc getPaginationUsers(getPaginationUsersReq) returns (getPaginationUsersResp);
|
||||||
//用户注册
|
//用户注册
|
||||||
|
@ -412,3 +412,24 @@ func (o *sortSlice[E]) Swap(i, j int) {
|
|||||||
type Ordered interface {
|
type Ordered interface {
|
||||||
~int | ~int8 | ~int16 | ~int32 | ~int64 | ~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr | ~float32 | ~float64 | ~string
|
~int | ~int8 | ~int16 | ~int32 | ~int64 | ~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr | ~float32 | ~float64 | ~string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Unwrap(err error) error {
|
||||||
|
for err != nil {
|
||||||
|
unwrap, ok := err.(interface {
|
||||||
|
Unwrap() error
|
||||||
|
})
|
||||||
|
if !ok {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
err = unwrap.Unwrap()
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// NotNilReplace 当new_不为空时, 将old设置为new_
|
||||||
|
func NotNilReplace[T any](old, new_ *T) {
|
||||||
|
if old == nil || new_ == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
*old = *new_
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user