proto modify

This commit is contained in:
wangchuxiao 2023-03-02 12:00:31 +08:00
parent fc009c7c6c
commit d991947d4c
21 changed files with 344 additions and 3153 deletions

View File

@ -173,7 +173,7 @@ func (r *RPCServer) GetUsersOnlineStatus(_ context.Context, req *msggateway.GetU
func (r *RPCServer) SuperGroupOnlineBatchPushOneMsg(_ context.Context, req *msggateway.OnlineBatchPushOneMsgReq) (*msggateway.OnlineBatchPushOneMsgResp, error) { func (r *RPCServer) SuperGroupOnlineBatchPushOneMsg(_ context.Context, req *msggateway.OnlineBatchPushOneMsgReq) (*msggateway.OnlineBatchPushOneMsgResp, error) {
log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String())
var singleUserResult []*msggateway.SingelMsgToUserResultList var singleUserResult []*msggateway.SingleMsgToUserResultList
//r.GetBatchMsgForPush(req.OperationID,req.MsgData,req.PushToUserIDList,) //r.GetBatchMsgForPush(req.OperationID,req.MsgData,req.PushToUserIDList,)
msgBytes, _ := proto.Marshal(req.MsgData) msgBytes, _ := proto.Marshal(req.MsgData)
mReply := Resp{ mReply := Resp{
@ -189,7 +189,7 @@ func (r *RPCServer) SuperGroupOnlineBatchPushOneMsg(_ context.Context, req *msgg
} }
for _, v := range req.PushToUserIDList { for _, v := range req.PushToUserIDList {
var resp []*msggateway.SingleMsgToUserPlatform var resp []*msggateway.SingleMsgToUserPlatform
tempT := &msggateway.SingelMsgToUserResultList{ tempT := &msggateway.SingleMsgToUserResultList{
UserID: v, UserID: v,
} }
userConnMap := ws.getUserAllCons(v) userConnMap := ws.getUserAllCons(v)
@ -224,11 +224,11 @@ func (r *RPCServer) SuperGroupOnlineBatchPushOneMsg(_ context.Context, req *msgg
} }
func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *msggateway.OnlineBatchPushOneMsgReq) (*msggateway.OnlineBatchPushOneMsgResp, error) { func (r *RPCServer) OnlineBatchPushOneMsg(_ context.Context, req *msggateway.OnlineBatchPushOneMsgReq) (*msggateway.OnlineBatchPushOneMsgResp, error) {
log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String()) log.NewInfo(req.OperationID, "BatchPushMsgToUser is arriving", req.String())
var singleUserResult []*msggateway.SingelMsgToUserResultList var singleUserResult []*msggateway.SingleMsgToUserResultList
for _, v := range req.PushToUserIDList { for _, v := range req.PushToUserIDList {
var resp []*msggateway.SingleMsgToUserPlatform var resp []*msggateway.SingleMsgToUserPlatform
tempT := &msggateway.SingelMsgToUserResultList{ tempT := &msggateway.SingleMsgToUserResultList{
UserID: v, UserID: v,
} }
userConnMap := ws.getUserAllCons(v) userConnMap := ws.getUserAllCons(v)

View File

@ -4,9 +4,9 @@ import (
"OpenIM/pkg/common/config" "OpenIM/pkg/common/config"
"OpenIM/pkg/common/constant" "OpenIM/pkg/common/constant"
"OpenIM/pkg/common/log" "OpenIM/pkg/common/log"
prome "OpenIM/pkg/common/prome" "OpenIM/pkg/common/prome"
"OpenIM/pkg/common/tokenverify" "OpenIM/pkg/common/tokenverify"
msggateway "OpenIM/pkg/proto/relay" "OpenIM/pkg/proto/msggateway"
"OpenIM/pkg/utils" "OpenIM/pkg/utils"
"bytes" "bytes"
"compress/gzip" "compress/gzip"

View File

@ -242,10 +242,8 @@ func (och *OnlineHistoryRedisConsumerHandler) ConsumeClaim(sess sarama.ConsumerG
} }
func (och *OnlineHistoryRedisConsumerHandler) sendMessageToPushMQ(ctx context.Context, message *pbMsg.MsgDataToMQ, pushToUserID string) { func (och *OnlineHistoryRedisConsumerHandler) sendMessageToPushMQ(ctx context.Context, message *pbMsg.MsgDataToMQ, pushToUserID string) {
log.Info(message.OperationID, utils.GetSelfFuncName(), "msg ", message.String(), pushToUserID)
rpcPushMsg := pbPush.PushMsgReq{OperationID: message.OperationID, MsgData: message.MsgData, PushToUserID: pushToUserID}
mqPushMsg := pbMsg.PushMsgDataToMQ{OperationID: message.OperationID, MsgData: message.MsgData, PushToUserID: pushToUserID} mqPushMsg := pbMsg.PushMsgDataToMQ{OperationID: message.OperationID, MsgData: message.MsgData, PushToUserID: pushToUserID}
pid, offset, err := och.producerToPush.SendMessage(&mqPushMsg, mqPushMsg.PushToUserID, rpcPushMsg.OperationID) pid, offset, err := och.producerToPush.SendMessage(ctx, &mqPushMsg, mqPushMsg.PushToUserID)
if err != nil { if err != nil {
log.Error(mqPushMsg.OperationID, "kafka send failed", "send data", message.String(), "pid", pid, "offset", offset, "err", err.Error()) log.Error(mqPushMsg.OperationID, "kafka send failed", "send data", message.String(), "pid", pid, "offset", offset, "err", err.Error())
} }
@ -254,7 +252,7 @@ func (och *OnlineHistoryRedisConsumerHandler) sendMessageToPushMQ(ctx context.Co
func (och *OnlineHistoryRedisConsumerHandler) sendMessageToModifyMQ(ctx context.Context, aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ) { func (och *OnlineHistoryRedisConsumerHandler) sendMessageToModifyMQ(ctx context.Context, aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ) {
if len(messages) > 0 { if len(messages) > 0 {
pid, offset, err := och.producerToModify.SendMessage(&pbMsg.MsgDataToModifyByMQ{AggregationID: aggregationID, MessageList: messages, TriggerID: triggerID}, aggregationID, triggerID) pid, offset, err := och.producerToModify.SendMessage(ctx, &pbMsg.MsgDataToModifyByMQ{AggregationID: aggregationID, MessageList: messages, TriggerID: triggerID}, aggregationID)
if err != nil { if err != nil {
log.Error(triggerID, "kafka send failed", "send data", len(messages), "pid", pid, "offset", offset, "err", err.Error(), "key", aggregationID) log.Error(triggerID, "kafka send failed", "send data", len(messages), "pid", pid, "offset", offset, "err", err.Error(), "key", aggregationID)
} }
@ -263,7 +261,7 @@ func (och *OnlineHistoryRedisConsumerHandler) sendMessageToModifyMQ(ctx context.
func (och *OnlineHistoryRedisConsumerHandler) SendMessageToMongoCH(ctx context.Context, aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq int64) { func (och *OnlineHistoryRedisConsumerHandler) SendMessageToMongoCH(ctx context.Context, aggregationID string, triggerID string, messages []*pbMsg.MsgDataToMQ, lastSeq int64) {
if len(messages) > 0 { if len(messages) > 0 {
pid, offset, err := och.producerToMongo.SendMessage(&pbMsg.MsgDataToMongoByMQ{LastSeq: lastSeq, AggregationID: aggregationID, MessageList: messages, TriggerID: triggerID}, aggregationID, triggerID) pid, offset, err := och.producerToMongo.SendMessage(ctx, &pbMsg.MsgDataToMongoByMQ{LastSeq: lastSeq, AggregationID: aggregationID, MessageList: messages, TriggerID: triggerID}, aggregationID)
if err != nil { if err != nil {
log.Error(triggerID, "kafka send failed", "send data", len(messages), "pid", pid, "offset", offset, "err", err.Error(), "key", aggregationID) log.Error(triggerID, "kafka send failed", "send data", len(messages), "pid", pid, "offset", offset, "err", err.Error(), "key", aggregationID)
} }

View File

@ -19,18 +19,18 @@ import (
) )
type Push struct { type Push struct {
rpcServer RPCServer rpcServer PushServer
pushCh ConsumerHandler pushCh ConsumerHandler
offlinePusher OfflinePusher offlinePusher OfflinePusher
successCount uint64 successCount uint64
} }
func (p *Push) Init(rpcPort int) error { func (p *Push) Init(rpcPort int) error {
redisClient, err := cache.NewRedis() rdb, err := cache.NewRedis()
if err != nil { if err != nil {
return err return err
} }
var cacheInterface cache.Cache = redisClient var cacheInterface cache.Cache
p.rpcServer.Init(rpcPort, cacheInterface) p.rpcServer.Init(rpcPort, cacheInterface)
p.pushCh.Init() p.pushCh.Init()
statistics.NewStatistics(&p.successCount, config.Config.ModuleName.PushName, fmt.Sprintf("%d second push to msg_gateway count", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval) statistics.NewStatistics(&p.successCount, config.Config.ModuleName.PushName, fmt.Sprintf("%d second push to msg_gateway count", constant.StatisticsTimeInterval), constant.StatisticsTimeInterval)

View File

@ -4,90 +4,39 @@ import (
"OpenIM/pkg/common/config" "OpenIM/pkg/common/config"
"OpenIM/pkg/common/constant" "OpenIM/pkg/common/constant"
"OpenIM/pkg/common/db/cache" "OpenIM/pkg/common/db/cache"
"OpenIM/pkg/common/db/controller"
"OpenIM/pkg/common/log"
"OpenIM/pkg/common/prome"
pbPush "OpenIM/pkg/proto/push" pbPush "OpenIM/pkg/proto/push"
"OpenIM/pkg/utils"
"context" "context"
"net" "github.com/OpenIMSDK/openKeeper"
"strconv"
"strings"
grpcPrometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
"google.golang.org/grpc" "google.golang.org/grpc"
) )
type RPCServer struct { type pushServer struct {
rpcPort int pusher *Pusher
rpcRegisterName string
PushDatabase controller.PushDatabase
pusher Pusher
} }
func (r *RPCServer) Init(rpcPort int, cache cache.Cache) { func Start(client *openKeeper.ZkClient, server *grpc.Server) error {
r.rpcPort = rpcPort
r.rpcRegisterName = config.Config.RpcRegisterName.OpenImPushName pbPush.RegisterPushMsgServiceServer(server, &pushServer{
pusher: NewPusher(),
})
} }
func (r *RPCServer) run() { func (r *pushServer) PushMsg(ctx context.Context, pbData *pbPush.PushMsgReq) (resp *pbPush.PushMsgResp, err error) {
listenIP := ""
if config.Config.ListenIP == "" {
listenIP = "0.0.0.0"
} else {
listenIP = config.Config.ListenIP
}
address := listenIP + ":" + strconv.Itoa(r.rpcPort)
listener, err := net.Listen("tcp", address)
if err != nil {
panic("listening err:" + err.Error() + r.rpcRegisterName)
}
defer listener.Close()
var grpcOpts []grpc.ServerOption
if config.Config.Prometheus.Enable {
prome.NewGrpcRequestCounter()
prome.NewGrpcRequestFailedCounter()
prome.NewGrpcRequestSuccessCounter()
grpcOpts = append(grpcOpts, []grpc.ServerOption{
// grpc.UnaryInterceptor(prome.UnaryServerInterceptorProme),
grpc.StreamInterceptor(grpcPrometheus.StreamServerInterceptor),
grpc.UnaryInterceptor(grpcPrometheus.UnaryServerInterceptor),
}...)
}
srv := grpc.NewServer(grpcOpts...)
defer srv.GracefulStop()
pbPush.RegisterPushMsgServiceServer(srv, r)
rpcRegisterIP := config.Config.RpcRegisterIP
if config.Config.RpcRegisterIP == "" {
rpcRegisterIP, err = utils.GetLocalIP()
if err != nil {
log.Error("", "GetLocalIP failed ", err.Error())
}
}
err = rpc.RegisterEtcd(r.etcdSchema, strings.Join(r.etcdAddr, ","), rpcRegisterIP, r.rpcPort, r.rpcRegisterName, 10)
if err != nil {
log.Error("", "register push module rpc to etcd err", err.Error(), r.etcdSchema, strings.Join(r.etcdAddr, ","), rpcRegisterIP, r.rpcPort, r.rpcRegisterName)
panic(utils.Wrap(err, "register push module rpc to etcd err"))
}
err = srv.Serve(listener)
if err != nil {
log.Error("", "push module rpc start err", err.Error())
return
}
}
func (r *RPCServer) PushMsg(ctx context.Context, pbData *pbPush.PushMsgReq) (resp *pbPush.PushMsgResp, err error) {
switch pbData.MsgData.SessionType { switch pbData.MsgData.SessionType {
case constant.SuperGroupChatType: case constant.SuperGroupChatType:
err = r.pusher.MsgToSuperGroupUser(ctx, pbData.SourceID, pbData.MsgData) err = r.pusher.MsgToSuperGroupUser(ctx, pbData.SourceID, pbData.MsgData)
default: default:
err = r.pusher.MsgToUser(ctx, pbData.SourceID, pbData.MsgData) err = r.pusher.MsgToUser(ctx, pbData.SourceID, pbData.MsgData)
} }
return &pbPush.PushMsgResp{}, err if err != nil {
return nil, err
}
return &pbPush.PushMsgResp{}, nil
} }
func (r *RPCServer) DelUserPushToken(ctx context.Context, req *pbPush.DelUserPushTokenReq) (resp *pbPush.DelUserPushTokenResp, err error) { func (r *pushServer) DelUserPushToken(ctx context.Context, req *pbPush.DelUserPushTokenReq) (resp *pbPush.DelUserPushTokenResp, err error) {
return &pbPush.DelUserPushTokenResp{}, r.PushDatabase.DelFcmToken(ctx, req.UserID, int(req.PlatformID)) if err = r.pusher.database.DelFcmToken(ctx, req.UserID, int(req.PlatformID)); err != nil {
return nil, err
}
return &pbPush.DelUserPushTokenResp{}, nil
} }

View File

@ -9,14 +9,13 @@ package push
import ( import (
"OpenIM/pkg/common/config" "OpenIM/pkg/common/config"
"OpenIM/pkg/common/constant" "OpenIM/pkg/common/constant"
"OpenIM/pkg/common/db/cache" "OpenIM/pkg/common/db/controller"
"OpenIM/pkg/common/db/localcache" "OpenIM/pkg/common/db/localcache"
"OpenIM/pkg/common/log" "OpenIM/pkg/common/log"
"OpenIM/pkg/common/prome" "OpenIM/pkg/common/prome"
"OpenIM/pkg/common/tracelog" "OpenIM/pkg/common/tracelog"
"OpenIM/pkg/discoveryregistry" "OpenIM/pkg/discoveryregistry"
msggateway "OpenIM/pkg/proto/msggateway" "OpenIM/pkg/proto/msggateway"
pbRtc "OpenIM/pkg/proto/rtc"
"OpenIM/pkg/proto/sdkws" "OpenIM/pkg/proto/sdkws"
"OpenIM/pkg/utils" "OpenIM/pkg/utils"
"context" "context"
@ -25,7 +24,7 @@ import (
) )
type Pusher struct { type Pusher struct {
cache cache.Cache database controller.PushDatabase
client discoveryregistry.SvcDiscoveryRegistry client discoveryregistry.SvcDiscoveryRegistry
offlinePusher OfflinePusher offlinePusher OfflinePusher
groupLocalCache localcache.GroupLocalCache groupLocalCache localcache.GroupLocalCache
@ -33,11 +32,14 @@ type Pusher struct {
successCount int successCount int
} }
func NewPusher(cache cache.Cache, client discoveryregistry.SvcDiscoveryRegistry, offlinePusher OfflinePusher) *Pusher { func NewPusher(client discoveryregistry.SvcDiscoveryRegistry, offlinePusher OfflinePusher, database controller.PushDatabase,
groupLocalCache localcache.GroupLocalCache, conversationLocalCache localcache.ConversationLocalCache) *Pusher {
return &Pusher{ return &Pusher{
cache: cache, database: database,
client: client, client: client,
offlinePusher: offlinePusher, offlinePusher: offlinePusher,
groupLocalCache: groupLocalCache,
conversationLocalCache: conversationLocalCache,
} }
} }
@ -46,7 +48,7 @@ func (p *Pusher) MsgToUser(ctx context.Context, userID string, msg *sdkws.MsgDat
var userIDs = []string{userID} var userIDs = []string{userID}
log.Debug(operationID, "Get msg from msg_transfer And push msg", msg.String(), userID) log.Debug(operationID, "Get msg from msg_transfer And push msg", msg.String(), userID)
// callback // callback
if err := callbackOnlinePush(ctx, userIDs, msg); err != nil { if err := callbackOnlinePush(ctx, userIDs, msg); err != nil && err != constant.ErrCallbackContinue {
return err return err
} }
// push // push
@ -65,7 +67,7 @@ func (p *Pusher) MsgToUser(ctx context.Context, userID string, msg *sdkws.MsgDat
} }
} }
if msg.ContentType == constant.SignalingNotification { if msg.ContentType == constant.SignalingNotification {
isSend, err := p.cache.HandleSignalInfo(ctx, msg, userID) isSend, err := p.database.HandleSignalInvite(ctx, msg, userID)
if err != nil { if err != nil {
return err return err
} }
@ -77,7 +79,7 @@ func (p *Pusher) MsgToUser(ctx context.Context, userID string, msg *sdkws.MsgDat
if err := callbackOfflinePush(ctx, userIDs, msg, &[]string{}); err != nil { if err := callbackOfflinePush(ctx, userIDs, msg, &[]string{}); err != nil {
return err return err
} }
err = p.OfflinePushMsg(ctx, userID, msg, userIDs) err = p.offlinePushMsg(ctx, userID, msg, userIDs)
if err != nil { if err != nil {
return err return err
} }
@ -89,7 +91,7 @@ func (p *Pusher) MsgToSuperGroupUser(ctx context.Context, groupID string, msg *s
operationID := tracelog.GetOperationID(ctx) operationID := tracelog.GetOperationID(ctx)
log.Debug(operationID, "Get super group msg from msg_transfer And push msg", msg.String(), groupID) log.Debug(operationID, "Get super group msg from msg_transfer And push msg", msg.String(), groupID)
var pushToUserIDs []string var pushToUserIDs []string
if err := callbackBeforeSuperGroupOnlinePush(ctx, groupID, msg, &pushToUserIDs); err != nil { if err := callbackBeforeSuperGroupOnlinePush(ctx, groupID, msg, &pushToUserIDs); err != nil && err != constant.ErrCallbackContinue {
return err return err
} }
if len(pushToUserIDs) == 0 { if len(pushToUserIDs) == 0 {
@ -145,14 +147,14 @@ func (p *Pusher) MsgToSuperGroupUser(ctx context.Context, groupID string, msg *s
if len(offlinePushUserIDs) > 0 { if len(offlinePushUserIDs) > 0 {
needOfflinePushUserIDs = offlinePushUserIDs needOfflinePushUserIDs = offlinePushUserIDs
} }
err = p.OfflinePushMsg(ctx, groupID, msg, offlinePushUserIDs) err = p.offlinePushMsg(ctx, groupID, msg, offlinePushUserIDs)
if err != nil { if err != nil {
log.NewError(operationID, "OfflinePushMsg failed", groupID) log.NewError(operationID, "offlinePushMsg failed", groupID)
return err return err
} }
_, err := p.GetConnsAndOnlinePush(ctx, msg, utils.IntersectString(needOfflinePushUserIDs, WebAndPcBackgroundUserIDs)) _, err := p.GetConnsAndOnlinePush(ctx, msg, utils.IntersectString(needOfflinePushUserIDs, WebAndPcBackgroundUserIDs))
if err != nil { if err != nil {
log.NewError(operationID, "OfflinePushMsg failed", groupID) log.NewError(operationID, "offlinePushMsg failed", groupID)
return err return err
} }
} }
@ -160,14 +162,14 @@ func (p *Pusher) MsgToSuperGroupUser(ctx context.Context, groupID string, msg *s
return nil return nil
} }
func (p *Pusher) GetConnsAndOnlinePush(ctx context.Context, msg *sdkws.MsgData, pushToUserIDs []string) (wsResults []*msggateway.SingelMsgToUserResultList, err error) { func (p *Pusher) GetConnsAndOnlinePush(ctx context.Context, msg *sdkws.MsgData, pushToUserIDs []string) (wsResults []*msggateway.SingleMsgToUserResultList, err error) {
conns, err := p.client.GetConns(config.Config.RpcRegisterName.OpenImMessageGatewayName) conns, err := p.client.GetConns(config.Config.RpcRegisterName.OpenImMessageGatewayName)
if err != nil { if err != nil {
return nil, err return nil, err
} }
//Online push message //Online push message
for _, v := range conns { for _, v := range conns {
msgClient := msggateway.NewRelayClient(v) msgClient := msggateway.NewMsgGatewayClient(v)
reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(ctx, &msggateway.OnlineBatchPushOneMsgReq{OperationID: tracelog.GetOperationID(ctx), MsgData: msg, PushToUserIDList: pushToUserIDs}) reply, err := msgClient.SuperGroupOnlineBatchPushOneMsg(ctx, &msggateway.OnlineBatchPushOneMsgReq{OperationID: tracelog.GetOperationID(ctx), MsgData: msg, PushToUserIDList: pushToUserIDs})
if err != nil { if err != nil {
log.NewError(tracelog.GetOperationID(ctx), msg, len(pushToUserIDs), "err", err) log.NewError(tracelog.GetOperationID(ctx), msg, len(pushToUserIDs), "err", err)
@ -180,8 +182,8 @@ func (p *Pusher) GetConnsAndOnlinePush(ctx context.Context, msg *sdkws.MsgData,
return wsResults, nil return wsResults, nil
} }
func (p *Pusher) OfflinePushMsg(ctx context.Context, sourceID string, msg *sdkws.MsgData, offlinePushUserIDs []string) error { func (p *Pusher) offlinePushMsg(ctx context.Context, sourceID string, msg *sdkws.MsgData, offlinePushUserIDs []string) error {
title, content, opts, err := p.GetOfflinePushInfos(sourceID, msg) title, content, opts, err := p.getOfflinePushInfos(sourceID, msg)
if err != nil { if err != nil {
return err return err
} }
@ -197,12 +199,12 @@ func (p *Pusher) OfflinePushMsg(ctx context.Context, sourceID string, msg *sdkws
func (p *Pusher) GetOfflinePushOpts(msg *sdkws.MsgData) (opts *Opts, err error) { func (p *Pusher) GetOfflinePushOpts(msg *sdkws.MsgData) (opts *Opts, err error) {
opts = &Opts{} opts = &Opts{}
if msg.ContentType > constant.SignalingNotificationBegin && msg.ContentType < constant.SignalingNotificationEnd { if msg.ContentType > constant.SignalingNotificationBegin && msg.ContentType < constant.SignalingNotificationEnd {
req := &pbRtc.SignalReq{} req := &sdkws.SignalReq{}
if err := proto.Unmarshal(msg.Content, req); err != nil { if err := proto.Unmarshal(msg.Content, req); err != nil {
return nil, utils.Wrap(err, "") return nil, utils.Wrap(err, "")
} }
switch req.Payload.(type) { switch req.Payload.(type) {
case *pbRtc.SignalReq_Invite, *pbRtc.SignalReq_InviteInGroup: case *sdkws.SignalReq_Invite, *sdkws.SignalReq_InviteInGroup:
opts.Signal = &Signal{ClientMsgID: msg.ClientMsgID} opts.Signal = &Signal{ClientMsgID: msg.ClientMsgID}
} }
} }
@ -214,7 +216,7 @@ func (p *Pusher) GetOfflinePushOpts(msg *sdkws.MsgData) (opts *Opts, err error)
return opts, nil return opts, nil
} }
func (p *Pusher) GetOfflinePushInfos(sourceID string, msg *sdkws.MsgData) (title, content string, opts *Opts, err error) { func (p *Pusher) getOfflinePushInfos(sourceID string, msg *sdkws.MsgData) (title, content string, opts *Opts, err error) {
if p.offlinePusher == nil { if p.offlinePusher == nil {
err = errors.New("no offlinePusher is configured") err = errors.New("no offlinePusher is configured")
return return

View File

@ -16,7 +16,6 @@ import (
"OpenIM/pkg/proto/msggateway" "OpenIM/pkg/proto/msggateway"
"OpenIM/pkg/utils" "OpenIM/pkg/utils"
"context" "context"
"github.com/OpenIMSDK/openKeeper"
"google.golang.org/grpc" "google.golang.org/grpc"
) )
@ -26,7 +25,7 @@ type authServer struct {
RegisterCenter discoveryRegistry.SvcDiscoveryRegistry RegisterCenter discoveryRegistry.SvcDiscoveryRegistry
} }
func Start(client *openKeeper.ZkClient, server *grpc.Server) error { func Start(client discoveryRegistry.SvcDiscoveryRegistry, server *grpc.Server) error {
mysql, err := relation.NewGormDB() mysql, err := relation.NewGormDB()
if err != nil { if err != nil {
return err return err

View File

@ -27,7 +27,7 @@ type friendServer struct {
RegisterCenter registry.SvcDiscoveryRegistry RegisterCenter registry.SvcDiscoveryRegistry
} }
func Start(client *openKeeper.ZkClient, server *grpc.Server) error { func Start(client registry.SvcDiscoveryRegistry, server *grpc.Server) error {
db, err := relation.NewGormDB() db, err := relation.NewGormDB()
if err != nil { if err != nil {
return err return err

View File

@ -6,16 +6,14 @@ import (
"OpenIM/pkg/common/db/localcache" "OpenIM/pkg/common/db/localcache"
"OpenIM/pkg/common/db/relation" "OpenIM/pkg/common/db/relation"
relationTb "OpenIM/pkg/common/db/table/relation" relationTb "OpenIM/pkg/common/db/table/relation"
discoveryRegistry "OpenIM/pkg/discoveryregistry"
"github.com/OpenIMSDK/openKeeper"
"OpenIM/pkg/common/prome" "OpenIM/pkg/common/prome"
"OpenIM/pkg/discoveryregistry"
"OpenIM/pkg/proto/msg" "OpenIM/pkg/proto/msg"
"google.golang.org/grpc" "google.golang.org/grpc"
) )
type msgServer struct { type msgServer struct {
RegisterCenter discoveryRegistry.SvcDiscoveryRegistry RegisterCenter discoveryregistry.SvcDiscoveryRegistry
MsgDatabase controller.MsgDatabase MsgDatabase controller.MsgDatabase
Group *check.GroupChecker Group *check.GroupChecker
User *check.UserCheck User *check.UserCheck
@ -26,7 +24,7 @@ type msgServer struct {
MessageLocker MessageLocker MessageLocker MessageLocker
} }
func Start(client *openKeeper.ZkClient, server *grpc.Server) error { func Start(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error {
mysql, err := relation.NewGormDB() mysql, err := relation.NewGormDB()
if err != nil { if err != nil {
return err return err

View File

@ -57,7 +57,7 @@ func (t *thirdServer) GetSignalInvitationInfoStartApp(ctx context.Context, req *
} }
func (t *thirdServer) FcmUpdateToken(ctx context.Context, req *third.FcmUpdateTokenReq) (resp *third.FcmUpdateTokenResp, err error) { func (t *thirdServer) FcmUpdateToken(ctx context.Context, req *third.FcmUpdateTokenReq) (resp *third.FcmUpdateTokenResp, err error) {
err = t.thirdDatabase.FcmUpdateToken(ctx) err = t.thirdDatabase.FcmUpdateToken(ctx, req.Account, int(req.PlatformID), req.FcmToken, req.ExpireTime)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -65,7 +65,7 @@ func (t *thirdServer) FcmUpdateToken(ctx context.Context, req *third.FcmUpdateTo
} }
func (t *thirdServer) SetAppBadge(ctx context.Context, req *third.SetAppBadgeReq) (resp *third.SetAppBadgeResp, err error) { func (t *thirdServer) SetAppBadge(ctx context.Context, req *third.SetAppBadgeReq) (resp *third.SetAppBadgeResp, err error) {
err = t.thirdDatabase.SetAppBadge(ctx, req.UserID, req.AppUnreadCount) err = t.thirdDatabase.SetAppBadge(ctx, req.UserID, int(req.AppUnreadCount))
if err != nil { if err != nil {
return nil, err return nil, err
} }

View File

@ -29,7 +29,7 @@ type userServer struct {
friendCheck *check.FriendChecker friendCheck *check.FriendChecker
} }
func Start(client *openKeeper.ZkClient, server *grpc.Server) error { func Start(client registry.SvcDiscoveryRegistry, server *grpc.Server) error {
gormDB, err := relation.NewGormDB() gormDB, err := relation.NewGormDB()
if err != nil { if err != nil {
return err return err
@ -37,6 +37,13 @@ func Start(client *openKeeper.ZkClient, server *grpc.Server) error {
if err := gormDB.AutoMigrate(&tablerelation.UserModel{}); err != nil { if err := gormDB.AutoMigrate(&tablerelation.UserModel{}); err != nil {
return err return err
} }
users := make([]*tablerelation.UserModel, 0)
if len(config.Config.Manager.AppManagerUid) != len(config.Config.Manager.Nickname) {
return constant.ErrConfig.Wrap("len(config.Config.Manager.AppManagerUid) != len(config.Config.Manager.Nickname)")
}
for k, v := range config.Config.Manager.AppManagerUid {
users = append(users, &tablerelation.UserModel{UserID: v, Nickname: config.Config.Manager.Nickname[k]})
}
u := &userServer{ u := &userServer{
UserDatabase: controller.NewUserDatabase(relation.NewUserGorm(gormDB)), UserDatabase: controller.NewUserDatabase(relation.NewUserGorm(gormDB)),
notification: notification.NewCheck(client), notification: notification.NewCheck(client),
@ -44,13 +51,6 @@ func Start(client *openKeeper.ZkClient, server *grpc.Server) error {
RegisterCenter: client, RegisterCenter: client,
} }
pbuser.RegisterUserServer(server, u) pbuser.RegisterUserServer(server, u)
users := make([]*tablerelation.UserModel, 0)
if len(config.Config.Manager.AppManagerUid) != len(config.Config.Manager.Nickname) {
return constant.ErrConfig.Wrap("len(config.Config.Manager.AppManagerUid) != len(config.Config.Manager.Nickname)")
}
for k, v := range config.Config.Manager.AppManagerUid {
users = append(users, &tablerelation.UserModel{UserID: v, Nickname: config.Config.Manager.Nickname[k]})
}
u.UserDatabase.InitOnce(context.Background(), users) u.UserDatabase.InitOnce(context.Background(), users)
return nil return nil
} }

View File

@ -7,6 +7,7 @@ import (
"OpenIM/pkg/common/log" "OpenIM/pkg/common/log"
"OpenIM/pkg/common/middleware" "OpenIM/pkg/common/middleware"
"OpenIM/pkg/common/prome" "OpenIM/pkg/common/prome"
"OpenIM/pkg/discoveryregistry"
"flag" "flag"
"fmt" "fmt"
"github.com/OpenIMSDK/openKeeper" "github.com/OpenIMSDK/openKeeper"
@ -15,7 +16,7 @@ import (
"net" "net"
) )
func start(rpcPort int, rpcRegisterName string, prometheusPorts int, rpcFn func(client *openKeeper.ZkClient, server *grpc.Server) error, options []grpc.ServerOption) error { func start(rpcPort int, rpcRegisterName string, prometheusPorts int, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error, options []grpc.ServerOption) error {
flagRpcPort := flag.Int("port", rpcPort, "get RpcGroupPort from cmd,default 16000 as port") flagRpcPort := flag.Int("port", rpcPort, "get RpcGroupPort from cmd,default 16000 as port")
flagPrometheusPort := flag.Int("prometheus_port", prometheusPorts, "groupPrometheusPort default listen port") flagPrometheusPort := flag.Int("prometheus_port", prometheusPorts, "groupPrometheusPort default listen port")
flag.Parse() flag.Parse()
@ -61,6 +62,6 @@ func start(rpcPort int, rpcRegisterName string, prometheusPorts int, rpcFn func(
return rpcFn(zkClient, srv) return rpcFn(zkClient, srv)
} }
func Start(rpcPort int, rpcRegisterName string, prometheusPort int, rpcFn func(client *openKeeper.ZkClient, server *grpc.Server) error, options ...grpc.ServerOption) error { func Start(rpcPort int, rpcRegisterName string, prometheusPort int, rpcFn func(client discoveryregistry.SvcDiscoveryRegistry, server *grpc.Server) error, options ...grpc.ServerOption) error {
return start(rpcPort, rpcRegisterName, prometheusPort, rpcFn, options) return start(rpcPort, rpcRegisterName, prometheusPort, rpcFn, options)
} }

View File

@ -4,8 +4,7 @@ import (
"OpenIM/pkg/common/config" "OpenIM/pkg/common/config"
"OpenIM/pkg/common/constant" "OpenIM/pkg/common/constant"
"OpenIM/pkg/common/tracelog" "OpenIM/pkg/common/tracelog"
pbChat "OpenIM/pkg/proto/msg" pbMsg "OpenIM/pkg/proto/msg"
pbRtc "OpenIM/pkg/proto/rtc"
"OpenIM/pkg/proto/sdkws" "OpenIM/pkg/proto/sdkws"
"OpenIM/pkg/utils" "OpenIM/pkg/utils"
"context" "context"
@ -20,10 +19,9 @@ import (
) )
const ( const (
userIncrSeq = "REDIS_USER_INCR_SEQ:" // user incr seq userIncrSeq = "REDIS_USER_INCR_SEQ:" // user incr seq
appleDeviceToken = "DEVICE_TOKEN" appleDeviceToken = "DEVICE_TOKEN"
userMinSeq = "REDIS_USER_MIN_SEQ:" userMinSeq = "REDIS_USER_MIN_SEQ:"
getuiToken = "GETUI_TOKEN" getuiToken = "GETUI_TOKEN"
getuiTaskID = "GETUI_TASK_ID" getuiTaskID = "GETUI_TASK_ID"
messageCache = "MESSAGE_CACHE:" messageCache = "MESSAGE_CACHE:"
@ -36,12 +34,7 @@ const (
sendMsgFailedFlag = "SEND_MSG_FAILED_FLAG:" sendMsgFailedFlag = "SEND_MSG_FAILED_FLAG:"
userBadgeUnreadCountSum = "USER_BADGE_UNREAD_COUNT_SUM:" userBadgeUnreadCountSum = "USER_BADGE_UNREAD_COUNT_SUM:"
exTypeKeyLocker = "EX_LOCK:" exTypeKeyLocker = "EX_LOCK:"
uidPidToken = "UID_PID_TOKEN_STATUS:"
uidPidToken = "UID_PID_TOKEN_STATUS:"
SignalListCache = "SIGNAL_LIST_CACHE:"
SignalCache = "SIGNAL_CACHE:"
) )
type Cache interface { type Cache interface {
@ -62,10 +55,10 @@ type Cache interface {
SetTokenMapByUidPid(ctx context.Context, userID string, platform string, m map[string]int) error SetTokenMapByUidPid(ctx context.Context, userID string, platform string, m map[string]int) error
DeleteTokenByUidPid(ctx context.Context, userID string, platform string, fields []string) error DeleteTokenByUidPid(ctx context.Context, userID string, platform string, fields []string) error
GetMessagesBySeq(ctx context.Context, userID string, seqList []int64) (seqMsg []*sdkws.MsgData, failedSeqList []int64, err error) GetMessagesBySeq(ctx context.Context, userID string, seqList []int64) (seqMsg []*sdkws.MsgData, failedSeqList []int64, err error)
SetMessageToCache(ctx context.Context, userID string, msgList []*pbChat.MsgDataToMQ) (int, error) SetMessageToCache(ctx context.Context, userID string, msgList []*pbMsg.MsgDataToMQ) (int, error)
DeleteMessageFromCache(ctx context.Context, userID string, msgList []*pbChat.MsgDataToMQ) error DeleteMessageFromCache(ctx context.Context, userID string, msgList []*pbMsg.MsgDataToMQ) error
CleanUpOneUserAllMsg(ctx context.Context, userID string) error CleanUpOneUserAllMsg(ctx context.Context, userID string) error
HandleSignalInfo(ctx context.Context, msg *sdkws.MsgData, pushToUserID string) (isSend bool, err error) HandleSignalInvite(ctx context.Context, msg *sdkws.MsgData, pushToUserID string) (isSend bool, err error)
GetSignalInvitationInfoByClientMsgID(ctx context.Context, clientMsgID string) (invitationInfo *sdkws.SignalInviteReq, err error) GetSignalInvitationInfoByClientMsgID(ctx context.Context, clientMsgID string) (invitationInfo *sdkws.SignalInviteReq, err error)
GetAvailableSignalInvitationInfo(ctx context.Context, userID string) (invitationInfo *sdkws.SignalInviteReq, err error) GetAvailableSignalInvitationInfo(ctx context.Context, userID string) (invitationInfo *sdkws.SignalInviteReq, err error)
DelUserSignalList(ctx context.Context, userID string) error DelUserSignalList(ctx context.Context, userID string) error
@ -210,9 +203,9 @@ func (c *cache) GetMessagesBySeq(ctx context.Context, userID string, seqList []i
return seqMsg, failedSeqList, errResult return seqMsg, failedSeqList, errResult
} }
func (c *cache) SetMessageToCache(ctx context.Context, userID string, msgList []*pbChat.MsgDataToMQ) (int, error) { func (c *cache) SetMessageToCache(ctx context.Context, userID string, msgList []*pbMsg.MsgDataToMQ) (int, error) {
pipe := c.rdb.Pipeline() pipe := c.rdb.Pipeline()
var failedList []pbChat.MsgDataToMQ var failedList []pbMsg.MsgDataToMQ
for _, msg := range msgList { for _, msg := range msgList {
key := messageCache + userID + "_" + strconv.Itoa(int(msg.MsgData.Seq)) key := messageCache + userID + "_" + strconv.Itoa(int(msg.MsgData.Seq))
s, err := utils.Pb2String(msg.MsgData) s, err := utils.Pb2String(msg.MsgData)
@ -231,9 +224,9 @@ func (c *cache) SetMessageToCache(ctx context.Context, userID string, msgList []
return 0, err return 0, err
} }
func (c *cache) DeleteMessageFromCache(ctx context.Context, userID string, msgList []*pbChat.MsgDataToMQ) error { func (c *cache) DeleteMessageFromCache(ctx context.Context, userID string, msgList []*pbMsg.MsgDataToMQ) error {
for _, msg := range msgList { for _, v := range msgList {
if err := c.rdb.Del(ctx, messageCache+userID+"_"+strconv.Itoa(int(msg.MsgData.Seq))).Err(); err != nil { if err := c.rdb.Del(ctx, messageCache+userID+"_"+strconv.Itoa(int(v.MsgData.Seq))).Err(); err != nil {
return utils.Wrap1(err) return utils.Wrap1(err)
} }
} }
@ -257,35 +250,35 @@ func (c *cache) CleanUpOneUserAllMsg(ctx context.Context, userID string) error {
return nil return nil
} }
func (c *cache) HandleSignalInfo(ctx context.Context, msg *sdkws.MsgData, pushToUserID string) (isSend bool, err error) { func (c *cache) HandleSignalInvite(ctx context.Context, msg *sdkws.MsgData, pushToUserID string) (isSend bool, err error) {
req := &pbRtc.SignalReq{} req := &sdkws.SignalReq{}
if err := proto.Unmarshal(msg.Content, req); err != nil { if err := proto.Unmarshal(msg.Content, req); err != nil {
return false, utils.Wrap1(err) return false, utils.Wrap1(err)
} }
var inviteeUserIDList []string var inviteeUserIDs []string
var isInviteSignal bool var isInviteSignal bool
switch signalInfo := req.Payload.(type) { switch signalInfo := req.Payload.(type) {
case *pbRtc.SignalReq_Invite: case *sdkws.SignalReq_Invite:
inviteeUserIDList = signalInfo.Invite.Invitation.InviteeUserIDList inviteeUserIDs = signalInfo.Invite.Invitation.InviteeUserIDList
isInviteSignal = true isInviteSignal = true
case *pbRtc.SignalReq_InviteInGroup: case *sdkws.SignalReq_InviteInGroup:
inviteeUserIDList = signalInfo.InviteInGroup.Invitation.InviteeUserIDList inviteeUserIDs = signalInfo.InviteInGroup.Invitation.InviteeUserIDList
isInviteSignal = true isInviteSignal = true
if !utils.Contain(pushToUserID, inviteeUserIDList...) { if !utils.Contain(pushToUserID, inviteeUserIDs...) {
return false, nil return false, nil
} }
case *pbRtc.SignalReq_HungUp, *pbRtc.SignalReq_Cancel, *pbRtc.SignalReq_Reject, *pbRtc.SignalReq_Accept: case *sdkws.SignalReq_HungUp, *sdkws.SignalReq_Cancel, *sdkws.SignalReq_Reject, *sdkws.SignalReq_Accept:
return false, utils.Wrap1(errors.New("signalInfo do not need offlinePush")) return false, utils.Wrap1(errors.New("signalInfo do not need offlinePush"))
default: default:
return false, nil return false, nil
} }
if isInviteSignal { if isInviteSignal {
for _, userID := range inviteeUserIDList { for _, userID := range inviteeUserIDs {
timeout, err := strconv.Atoi(config.Config.Rtc.SignalTimeout) timeout, err := strconv.Atoi(config.Config.Rtc.SignalTimeout)
if err != nil { if err != nil {
return false, utils.Wrap1(err) return false, utils.Wrap1(err)
} }
keyList := SignalListCache + userID keyList := signalListCache + userID
err = c.rdb.LPush(ctx, keyList, msg.ClientMsgID).Err() err = c.rdb.LPush(ctx, keyList, msg.ClientMsgID).Err()
if err != nil { if err != nil {
return false, utils.Wrap1(err) return false, utils.Wrap1(err)
@ -294,7 +287,7 @@ func (c *cache) HandleSignalInfo(ctx context.Context, msg *sdkws.MsgData, pushTo
if err != nil { if err != nil {
return false, utils.Wrap1(err) return false, utils.Wrap1(err)
} }
key := SignalCache + msg.ClientMsgID key := signalCache + msg.ClientMsgID
err = c.rdb.Set(ctx, key, msg.Content, time.Duration(timeout)*time.Second).Err() err = c.rdb.Set(ctx, key, msg.Content, time.Duration(timeout)*time.Second).Err()
if err != nil { if err != nil {
return false, utils.Wrap1(err) return false, utils.Wrap1(err)
@ -304,29 +297,29 @@ func (c *cache) HandleSignalInfo(ctx context.Context, msg *sdkws.MsgData, pushTo
return true, nil return true, nil
} }
func (c *cache) GetSignalInvitationInfoByClientMsgID(ctx context.Context, clientMsgID string) (invitationInfo *sdkws.SignalInviteReq, err error) { func (c *cache) GetSignalInvitationInfoByClientMsgID(ctx context.Context, clientMsgID string) (signalInviteReq *sdkws.SignalInviteReq, err error) {
bytes, err := c.rdb.Get(ctx, SignalCache+clientMsgID).Bytes() bytes, err := c.rdb.Get(ctx, signalCache+clientMsgID).Bytes()
if err != nil { if err != nil {
return nil, utils.Wrap1(err) return nil, utils.Wrap1(err)
} }
req := &sdkws.SignalReq{} signalReq := &sdkws.SignalReq{}
if err = proto.Unmarshal(bytes, req); err != nil { if err = proto.Unmarshal(bytes, signalReq); err != nil {
return nil, utils.Wrap1(err) return nil, utils.Wrap1(err)
} }
invitationInfo = &sdkws.SignalInviteReq{} signalInviteReq = &sdkws.SignalInviteReq{}
switch req2 := req.Payload.(type) { switch req := signalReq.Payload.(type) {
case *pbRtc.SignalReq_Invite: case *sdkws.SignalReq_Invite:
invitationInfo.Invitation = req2.Invite.Invitation signalInviteReq.Invitation = req.Invite.Invitation
invitationInfo.OpUserID = req2.Invite.OpUserID signalInviteReq.OpUserID = req.Invite.OpUserID
case *pbRtc.SignalReq_InviteInGroup: case *sdkws.SignalReq_InviteInGroup:
invitationInfo.Invitation = req2.InviteInGroup.Invitation signalInviteReq.Invitation = req.InviteInGroup.Invitation
invitationInfo.OpUserID = req2.InviteInGroup.OpUserID signalInviteReq.OpUserID = req.InviteInGroup.OpUserID
} }
return invitationInfo, nil return signalInviteReq, nil
} }
func (c *cache) GetAvailableSignalInvitationInfo(ctx context.Context, userID string) (invitationInfo *sdkws.SignalInviteReq, err error) { func (c *cache) GetAvailableSignalInvitationInfo(ctx context.Context, userID string) (invitationInfo *sdkws.SignalInviteReq, err error) {
key, err := c.rdb.LPop(ctx, SignalListCache+userID).Result() key, err := c.rdb.LPop(ctx, signalListCache+userID).Result()
if err != nil { if err != nil {
return nil, utils.Wrap1(err) return nil, utils.Wrap1(err)
} }
@ -338,7 +331,7 @@ func (c *cache) GetAvailableSignalInvitationInfo(ctx context.Context, userID str
} }
func (c *cache) DelUserSignalList(ctx context.Context, userID string) error { func (c *cache) DelUserSignalList(ctx context.Context, userID string) error {
return utils.Wrap1(c.rdb.Del(ctx, SignalListCache+userID).Err()) return utils.Wrap1(c.rdb.Del(ctx, signalListCache+userID).Err())
} }
func (c *cache) DelMsgFromCache(ctx context.Context, userID string, seqList []int64) error { func (c *cache) DelMsgFromCache(ctx context.Context, userID string, seqList []int64) error {

View File

@ -7,21 +7,21 @@ import (
type ChatLogDatabase interface { type ChatLogDatabase interface {
CreateChatLog(msg pbMsg.MsgDataToMQ) error CreateChatLog(msg pbMsg.MsgDataToMQ) error
GetChatLog(chatLog *relationTb.ChatLogModel, pageNumber, showNumber int32, contentTypeList []int32) (int64, []relationTb.ChatLogModel, error) GetChatLog(chatLog *relationTb.ChatLogModel, pageNumber, showNumber int32, contentTypes []int32) (int64, []relationTb.ChatLogModel, error)
} }
func NewChatLogDatabase(chatLogModelInterface relationTb.ChatLogModelInterface) ChatLogDatabase { func NewChatLogDatabase(chatLogModelInterface relationTb.ChatLogModelInterface) ChatLogDatabase {
return &ChatLogDataBase{chatLogModel: chatLogModelInterface} return &chatLogDatabase{chatLogModel: chatLogModelInterface}
} }
type ChatLogDataBase struct { type chatLogDatabase struct {
chatLogModel relationTb.ChatLogModelInterface chatLogModel relationTb.ChatLogModelInterface
} }
func (c *ChatLogDataBase) CreateChatLog(msg pbMsg.MsgDataToMQ) error { func (c *chatLogDatabase) CreateChatLog(msg pbMsg.MsgDataToMQ) error {
return c.chatLogModel.Create(msg) return c.chatLogModel.Create(msg)
} }
func (c *ChatLogDataBase) GetChatLog(chatLog *relationTb.ChatLogModel, pageNumber, showNumber int32, contentTypeList []int32) (int64, []relationTb.ChatLogModel, error) { func (c *chatLogDatabase) GetChatLog(chatLog *relationTb.ChatLogModel, pageNumber, showNumber int32, contentTypes []int32) (int64, []relationTb.ChatLogModel, error) {
return c.chatLogModel.GetChatLog(chatLog, pageNumber, showNumber, contentTypeList) return c.chatLogModel.GetChatLog(chatLog, pageNumber, showNumber, contentTypes)
} }

View File

@ -2,11 +2,13 @@ package controller
import ( import (
"OpenIM/pkg/common/db/cache" "OpenIM/pkg/common/db/cache"
"OpenIM/pkg/proto/sdkws"
"context" "context"
) )
type PushDatabase interface { type PushDatabase interface {
DelFcmToken(ctx context.Context, userID string, platformID int) error DelFcmToken(ctx context.Context, userID string, platformID int) error
HandleSignalInvite(ctx context.Context, msg *sdkws.MsgData, pushToUserID string) (isSend bool, err error)
} }
type pushDataBase struct { type pushDataBase struct {
@ -20,3 +22,7 @@ func NewPushDatabase(cache cache.Cache) PushDatabase {
func (p *pushDataBase) DelFcmToken(ctx context.Context, userID string, platformID int) error { func (p *pushDataBase) DelFcmToken(ctx context.Context, userID string, platformID int) error {
return p.cache.DelFcmToken(ctx, userID, platformID) return p.cache.DelFcmToken(ctx, userID, platformID)
} }
func (p *pushDataBase) HandleSignalInvite(ctx context.Context, msg *sdkws.MsgData, pushToUserID string) (isSend bool, err error) {
return p.cache.HandleSignalInvite(ctx, msg, pushToUserID)
}

View File

@ -36,5 +36,5 @@ func (ChatLogModel) TableName() string {
type ChatLogModelInterface interface { type ChatLogModelInterface interface {
Create(msg pbMsg.MsgDataToMQ) error Create(msg pbMsg.MsgDataToMQ) error
GetChatLog(chatLog *ChatLogModel, pageNumber, showNumber int32, contentTypeList []int32) (int64, []ChatLogModel, error) GetChatLog(chatLog *ChatLogModel, pageNumber, showNumber int32, contentTypes []int32) (int64, []ChatLogModel, error)
} }

View File

@ -3,7 +3,9 @@ package kafka
import ( import (
"OpenIM/pkg/common/config" "OpenIM/pkg/common/config"
log "OpenIM/pkg/common/log" log "OpenIM/pkg/common/log"
"OpenIM/pkg/common/tracelog"
"OpenIM/pkg/utils" "OpenIM/pkg/utils"
"context"
"errors" "errors"
"github.com/Shopify/sarama" "github.com/Shopify/sarama"
@ -43,7 +45,8 @@ func NewKafkaProducer(addr []string, topic string) *Producer {
return &p return &p
} }
func (p *Producer) SendMessage(m proto.Message, key string, operationID string) (int32, int64, error) { func (p *Producer) SendMessage(ctx context.Context, m proto.Message, key string) (int32, int64, error) {
operationID := tracelog.GetOperationID(ctx)
log.Info(operationID, "SendMessage", "key ", key, m.String(), p.producer) log.Info(operationID, "SendMessage", "key ", key, m.String(), p.producer)
kMsg := &sarama.ProducerMessage{} kMsg := &sarama.ProducerMessage{}
kMsg.Topic = p.topic kMsg.Topic = p.topic
@ -63,6 +66,7 @@ func (p *Producer) SendMessage(m proto.Message, key string, operationID string)
log.Error(operationID, "kMsg.Key.Length() == 0 || kMsg.Value.Length() == 0 ", kMsg) log.Error(operationID, "kMsg.Key.Length() == 0 || kMsg.Value.Length() == 0 ", kMsg)
return -1, -1, errors.New("key or value == 0") return -1, -1, errors.New("key or value == 0")
} }
kMsg.Metadata = ctx
partition, offset, err := p.producer.SendMessage(kMsg) partition, offset, err := p.producer.SendMessage(kMsg)
log.Info(operationID, "ByteEncoder SendMessage end", "key ", kMsg.Key.Length(), kMsg.Value.Length(), p.producer) log.Info(operationID, "ByteEncoder SendMessage end", "key ", kMsg.Key.Length(), kMsg.Value.Length(), p.producer)
if err == nil { if err == nil {

View File

@ -5,40 +5,33 @@ option go_package = "OpenIM/pkg/proto/msg;msg";
package msg; package msg;
message MsgDataToMQ{ message MsgDataToMQ{
string token =1; string token = 1;
string operationID = 2; sdkws.MsgData msgData = 2;
sdkws.MsgData msgData = 3;
} }
message MsgDataToDB { message MsgDataToDB {
sdkws.MsgData msgData = 1; sdkws.MsgData msgData = 1;
string operationID = 2;
} }
message PushMsgDataToMQ{ message PushMsgDataToMQ{
string OperationID = 1; sdkws.MsgData msgData = 1;
sdkws.MsgData msgData = 2; string sourceID = 2;
string pushToUserID = 3;
} }
message MsgDataToMongoByMQ{ message MsgDataToMongoByMQ{
uint64 lastSeq =1; int64 lastSeq = 1;
string aggregationID = 2; string aggregationID = 2;
repeated MsgDataToMQ messageList = 3; repeated MsgDataToMQ messages = 3;
string triggerID = 4; string triggerID = 4;
} }
message GetMaxAndMinSeqReq { message GetMaxAndMinSeqReq {
string UserID = 1; string UserID = 1;
string OperationID = 2;
} }
message GetMaxAndMinSeqResp { message GetMaxAndMinSeqResp {
int32 ErrCode = 1; int64 MaxSeq = 1;
string ErrMsg = 2; int64 MinSeq = 2;
uint32 MaxSeq = 3;
uint32 MinSeq = 4;
} }
message SendMsgReq { message SendMsgReq {
@ -46,9 +39,9 @@ message SendMsgReq {
} }
message SendMsgResp { message SendMsgResp {
string serverMsgID = 4; string serverMsgID = 1;
string clientMsgID = 5; string clientMsgID = 2;
int64 sendTime = 6; int64 sendTime = 3;
} }
@ -69,119 +62,98 @@ message SetMsgMinSeqResp{
} }
message SetSendMsgStatusReq{ message SetSendMsgStatusReq{
int32 status = 2; int32 status = 1;
} }
message SetSendMsgStatusResp{ message SetSendMsgStatusResp{
} }
message GetSendMsgStatusReq{ message GetSendMsgStatusReq{
string operationID = 1;
} }
message GetSendMsgStatusResp{ message GetSendMsgStatusResp{
int32 errCode = 1; int32 status = 1;
string errMsg = 2;
int32 status = 3;
} }
message DelSuperGroupMsgReq{ message DelSuperGroupMsgReq{
string userID = 2; string userID = 1;
string groupID = 3; string groupID = 2;
} }
message DelSuperGroupMsgResp{ message DelSuperGroupMsgResp{
} }
message GetSuperGroupMsgReq{
string operationID = 1;
uint32 Seq = 2;
string groupID = 3;
message GetSuperGroupMsgReq{
int64 Seq = 1;
string groupID = 2;
} }
message GetSuperGroupMsgResp{ message GetSuperGroupMsgResp{
int32 errCode = 1; sdkws.MsgData msgData = 1;
string errMsg = 2;
sdkws.MsgData msgData = 3;
} }
message GetWriteDiffMsgReq{
string operationID = 1;
uint32 Seq = 2;
} message GetWriteDiffMsgReq{
int64 Seq = 1;
}
message GetWriteDiffMsgResp{ message GetWriteDiffMsgResp{
int32 errCode = 1; sdkws.MsgData msgData = 2;
string errMsg = 2;
sdkws.MsgData msgData = 3;
} }
message ModifyMessageReactionExtensionsReq { message ModifyMessageReactionExtensionsReq {
string operationID = 1; string sourceID = 1;
string sourceID = 2; int32 sessionType = 2;
string opUserID = 3; map <string, sdkws.KeyValue>reactionExtensions = 3;
int32 sessionType = 4; string clientMsgID = 4;
map <string, sdkws.KeyValue>reactionExtensionList = 5; google.protobuf.StringValue ex = 5;
string clientMsgID = 6; google.protobuf.StringValue attachedInfo = 6;
google.protobuf.StringValue ex = 7; bool isReact = 7;
google.protobuf.StringValue attachedInfo = 8; bool isExternalExtensions = 8;
bool isReact = 9; int64 msgFirstModifyTime = 9;
bool isExternalExtensions = 10;
int64 msgFirstModifyTime = 11;
} }
message SetMessageReactionExtensionsReq { message SetMessageReactionExtensionsReq {
string operationID = 1; string sourceID = 1;
string sourceID = 2; int32 sessionType = 2;
string opUserID = 3; map <string, sdkws.KeyValue>reactionExtensions = 3;
int32 sessionType = 4; string clientMsgID = 4;
map <string, sdkws.KeyValue>reactionExtensionList = 5; google.protobuf.StringValue ex = 5;
string clientMsgID = 6; google.protobuf.StringValue attachedInfo = 6;
google.protobuf.StringValue ex = 7; bool isReact = 7;
google.protobuf.StringValue attachedInfo = 8; bool isExternalExtensions = 8;
bool isReact = 9; int64 msgFirstModifyTime = 9;
bool isExternalExtensions = 10;
int64 msgFirstModifyTime = 11;
} }
message SetMessageReactionExtensionsResp { message SetMessageReactionExtensionsResp {
int32 errCode = 1; string clientMsgID = 1;
string errMsg = 2; int64 msgFirstModifyTime = 2;
string clientMsgID = 3; bool isReact = 3;
int64 msgFirstModifyTime = 4; repeated KeyValueResp result = 4;
bool isReact = 5;
repeated KeyValueResp result = 6;
} }
message GetMessageListReactionExtensionsReq { message GetMessagesReactionExtensionsReq {
string operationID = 1; string sourceID = 1;
string opUserID = 2; int32 sessionType = 2;
string sourceID = 3;
int32 sessionType = 4;
message MessageReactionKey { message MessageReactionKey {
string clientMsgID = 1; string clientMsgID = 1;
int64 msgFirstModifyTime = 2; int64 msgFirstModifyTime = 2;
} }
repeated MessageReactionKey messageReactionKeyList = 5; repeated MessageReactionKey messageReactionKeys = 3;
repeated string TypeKeyList = 6; repeated string TypeKeys = 4;
} }
message GetMessageListReactionExtensionsResp{ message GetMessagesReactionExtensionsResp{
int32 errCode = 1; repeated SingleMessageExtensionResult singleMessageResult = 1;
string errMsg = 2;
repeated SingleMessageExtensionResult singleMessageResult =3;
} }
message SingleMessageExtensionResult { message SingleMessageExtensionResult {
int32 errCode = 1; map <string, sdkws.KeyValue>reactionExtensions = 1;
string errMsg = 2; string clientMsgID = 2;
map <string, sdkws.KeyValue>reactionExtensionList = 3;
string clientMsgID = 4;
} }
message ModifyMessageReactionExtensionsResp { message ModifyMessageReactionExtensionsResp {
int32 errCode = 1; repeated ExtendMsgResp successList = 1;
string errMsg = 2; repeated ExtendMsgResp failedList = 2;
repeated ExtendMsgResp successList = 3;
repeated ExtendMsgResp failedList = 4;
} }
message DeleteMessageListReactionExtensionsReq { message DeleteMessagesReactionExtensionsReq {
string operationID = 1; string operationID = 1;
string opUserID = 2; string opUserID = 2;
string sourceID = 3; string sourceID = 3;
@ -189,23 +161,19 @@ message DeleteMessageListReactionExtensionsReq {
string clientMsgID = 5; string clientMsgID = 5;
bool isExternalExtensions = 6; bool isExternalExtensions = 6;
int64 msgFirstModifyTime = 7; int64 msgFirstModifyTime = 7;
repeated sdkws.KeyValue reactionExtensionList = 8; repeated sdkws.KeyValue reactionExtensions = 8;
} }
message DeleteMessageListReactionExtensionsResp { message DeleteMessagesReactionExtensionsResp {
int32 errCode = 1; repeated KeyValueResp result = 1;
string errMsg = 2;
repeated KeyValueResp result = 6;
} }
message ExtendMsgResp { message ExtendMsgResp {
ExtendMsg extendMsg = 1; ExtendMsg extendMsg = 1;
int32 errCode = 2;
string errMsg = 3;
} }
message ExtendMsg { message ExtendMsg {
map <string, KeyValueResp>reactionExtensionList = 1; map <string, KeyValueResp>reactionExtensions = 1;
string clientMsgID = 2; string clientMsgID = 2;
int64 msgFirstModifyTime = 3; int64 msgFirstModifyTime = 3;
string attachedInfo = 4; string attachedInfo = 4;
@ -214,33 +182,30 @@ message ExtendMsg {
message KeyValueResp { message KeyValueResp {
sdkws.KeyValue keyValue = 1; sdkws.KeyValue keyValue = 1;
int32 errCode = 2;
string errMsg = 3;
} }
message MsgDataToModifyByMQ{ message MsgDataToModifyByMQ{
string aggregationID = 1; repeated MsgDataToMQ messages = 1;
repeated MsgDataToMQ messageList = 2; string triggerID = 2;
string triggerID = 3;
} }
message DelMsgListReq{ message DelMsgsReq{
string userID = 2; string userID = 2;
repeated uint32 seqList = 3; repeated int64 seqs = 3;
} }
message DelMsgListResp{ message DelMsgsResp{
} }
service msg { service msg {
//seq //seq
rpc GetMaxAndMinSeq(sdkws.GetMaxAndMinSeqReq) returns(sdkws.GetMaxAndMinSeqResp); rpc GetMaxAndMinSeq(sdkws.GetMaxAndMinSeqReq) returns(sdkws.GetMaxAndMinSeqResp);
// //
rpc PullMessageBySeqList(sdkws.PullMessageBySeqListReq) returns(sdkws.PullMessageBySeqListResp); rpc PullMessageBySeqs(sdkws.PullMessageBySeqsReq) returns(sdkws.PullMessageBySeqsResp);
// //
rpc SendMsg(SendMsgReq) returns(SendMsgResp); rpc SendMsg(SendMsgReq) returns(SendMsgResp);
// //
rpc DelMsgList(DelMsgListReq) returns(DelMsgListResp); rpc DelMsgs(DelMsgsReq) returns(DelMsgsResp);
// //
rpc DelSuperGroupMsg(DelSuperGroupMsgReq) returns(DelSuperGroupMsgResp); rpc DelSuperGroupMsg(DelSuperGroupMsgReq) returns(DelSuperGroupMsgResp);
// //
@ -255,7 +220,7 @@ service msg {
// //
rpc SetMessageReactionExtensions(SetMessageReactionExtensionsReq) returns(SetMessageReactionExtensionsResp); rpc SetMessageReactionExtensions(SetMessageReactionExtensionsReq) returns(SetMessageReactionExtensionsResp);
rpc GetMessageListReactionExtensions(GetMessageListReactionExtensionsReq) returns(GetMessageListReactionExtensionsResp); rpc GetMessagesReactionExtensions(GetMessagesReactionExtensionsReq) returns(GetMessagesReactionExtensionsResp);
rpc AddMessageReactionExtensions(ModifyMessageReactionExtensionsReq) returns(ModifyMessageReactionExtensionsResp); rpc AddMessageReactionExtensions(ModifyMessageReactionExtensionsReq) returns(ModifyMessageReactionExtensionsResp);
rpc DeleteMessageReactionExtensions(DeleteMessageListReactionExtensionsReq) returns(DeleteMessageListReactionExtensionsResp); rpc DeleteMessageReactionExtensions(DeleteMessagesReactionExtensionsReq) returns(DeleteMessagesReactionExtensionsResp);
} }

View File

@ -4,29 +4,27 @@ option go_package = "OpenIM/pkg/proto/msggateway;msggateway";
package msggateway; package msggateway;
message OnlinePushMsgReq { message OnlinePushMsgReq {
string OperationID = 1; sdkws.MsgData msgData = 1;
sdkws.MsgData msgData = 2; string pushToUserID = 2;
string pushToUserID = 3;
} }
message OnlinePushMsgResp{ message OnlinePushMsgResp{
repeated SingleMsgToUserPlatform resp = 1; repeated SingleMsgToUserPlatform resp = 1;
} }
message SingleMsgToUserResultList{ message SingleMsgToUserResults {
string userID =1; string userID =1;
repeated SingleMsgToUserPlatform resp = 2; repeated SingleMsgToUserPlatform resp = 2;
bool onlinePush = 3; bool onlinePush = 3;
} }
message OnlineBatchPushOneMsgReq{ message OnlineBatchPushOneMsgReq{
string OperationID = 1; sdkws.MsgData msgData = 1;
sdkws.MsgData msgData = 2; repeated string pushToUserIDs = 2;
repeated string pushToUserIDList = 3;
} }
message OnlineBatchPushOneMsgResp{ message OnlineBatchPushOneMsgResp{
repeated SingleMsgToUserResultList singlePushResult= 1; repeated SingleMsgToUserResults singlePushResult= 1;
} }
//message SendMsgByWSReq{ //message SendMsgByWSReq{
// string SendID = 1; // string SendID = 1;
@ -45,17 +43,14 @@ message SingleMsgToUserPlatform{
string RecvID = 2; string RecvID = 2;
int32 RecvPlatFormID = 3; int32 RecvPlatFormID = 3;
} }
message GetUsersOnlineStatusReq{ message GetUsersOnlineStatusReq{
repeated string userIDList = 1; repeated string userIDs = 1;
string operationID = 2;
string opUserID = 3;
} }
message GetUsersOnlineStatusResp{ message GetUsersOnlineStatusResp{
int32 errCode = 1; repeated SuccessResult successResult = 1;
string errMsg = 2; repeated FailedDetail failedResult = 2;
repeated SuccessResult successResult = 3;
repeated FailedDetail failedResult = 4;
message SuccessDetail{ message SuccessDetail{
string platform = 1; string platform = 1;
string status = 2; string status = 2;
@ -63,9 +58,7 @@ message GetUsersOnlineStatusResp{
bool isBackground = 4; bool isBackground = 4;
} }
message FailedDetail{ message FailedDetail{
string userID = 3; string userID = 1;
int32 errCode = 1;
string errMsg = 2;
} }
message SuccessResult{ message SuccessResult{
string userID = 1; string userID = 1;
@ -75,9 +68,8 @@ message GetUsersOnlineStatusResp{
} }
message KickUserOfflineReq{ message KickUserOfflineReq{
string operationID = 1; int32 platformID = 1;
int32 platformID = 2; repeated string kickUserIDList = 2;
repeated string kickUserIDList = 3;
} }
message KickUserOfflineResp{ message KickUserOfflineResp{
@ -91,8 +83,6 @@ message MultiTerminalLoginCheckReq{
string operationID = 4; string operationID = 4;
} }
message MultiTerminalLoginCheckResp{ message MultiTerminalLoginCheckResp{
int32 errCode = 1;
string errMsg = 2;
} }
service msgGateway { service msgGateway {

File diff suppressed because it is too large Load Diff

View File

@ -39,7 +39,7 @@ func (m *ApplySpaceReq) Reset() { *m = ApplySpaceReq{} }
func (m *ApplySpaceReq) String() string { return proto.CompactTextString(m) } func (m *ApplySpaceReq) String() string { return proto.CompactTextString(m) }
func (*ApplySpaceReq) ProtoMessage() {} func (*ApplySpaceReq) ProtoMessage() {}
func (*ApplySpaceReq) Descriptor() ([]byte, []int) { func (*ApplySpaceReq) Descriptor() ([]byte, []int) {
return fileDescriptor_third_3f9746cdadff77e4, []int{0} return fileDescriptor_third_de04cb9a0062d654, []int{0}
} }
func (m *ApplySpaceReq) XXX_Unmarshal(b []byte) error { func (m *ApplySpaceReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ApplySpaceReq.Unmarshal(m, b) return xxx_messageInfo_ApplySpaceReq.Unmarshal(m, b)
@ -108,7 +108,7 @@ func (m *ApplySpaceResp) Reset() { *m = ApplySpaceResp{} }
func (m *ApplySpaceResp) String() string { return proto.CompactTextString(m) } func (m *ApplySpaceResp) String() string { return proto.CompactTextString(m) }
func (*ApplySpaceResp) ProtoMessage() {} func (*ApplySpaceResp) ProtoMessage() {}
func (*ApplySpaceResp) Descriptor() ([]byte, []int) { func (*ApplySpaceResp) Descriptor() ([]byte, []int) {
return fileDescriptor_third_3f9746cdadff77e4, []int{1} return fileDescriptor_third_de04cb9a0062d654, []int{1}
} }
func (m *ApplySpaceResp) XXX_Unmarshal(b []byte) error { func (m *ApplySpaceResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ApplySpaceResp.Unmarshal(m, b) return xxx_messageInfo_ApplySpaceResp.Unmarshal(m, b)
@ -167,7 +167,7 @@ func (m *ConfirmSpaceReq) Reset() { *m = ConfirmSpaceReq{} }
func (m *ConfirmSpaceReq) String() string { return proto.CompactTextString(m) } func (m *ConfirmSpaceReq) String() string { return proto.CompactTextString(m) }
func (*ConfirmSpaceReq) ProtoMessage() {} func (*ConfirmSpaceReq) ProtoMessage() {}
func (*ConfirmSpaceReq) Descriptor() ([]byte, []int) { func (*ConfirmSpaceReq) Descriptor() ([]byte, []int) {
return fileDescriptor_third_3f9746cdadff77e4, []int{2} return fileDescriptor_third_de04cb9a0062d654, []int{2}
} }
func (m *ConfirmSpaceReq) XXX_Unmarshal(b []byte) error { func (m *ConfirmSpaceReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ConfirmSpaceReq.Unmarshal(m, b) return xxx_messageInfo_ConfirmSpaceReq.Unmarshal(m, b)
@ -205,7 +205,7 @@ func (m *ConfirmSpaceResp) Reset() { *m = ConfirmSpaceResp{} }
func (m *ConfirmSpaceResp) String() string { return proto.CompactTextString(m) } func (m *ConfirmSpaceResp) String() string { return proto.CompactTextString(m) }
func (*ConfirmSpaceResp) ProtoMessage() {} func (*ConfirmSpaceResp) ProtoMessage() {}
func (*ConfirmSpaceResp) Descriptor() ([]byte, []int) { func (*ConfirmSpaceResp) Descriptor() ([]byte, []int) {
return fileDescriptor_third_3f9746cdadff77e4, []int{3} return fileDescriptor_third_de04cb9a0062d654, []int{3}
} }
func (m *ConfirmSpaceResp) XXX_Unmarshal(b []byte) error { func (m *ConfirmSpaceResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ConfirmSpaceResp.Unmarshal(m, b) return xxx_messageInfo_ConfirmSpaceResp.Unmarshal(m, b)
@ -243,7 +243,7 @@ func (m *GetSignalInvitationInfoReq) Reset() { *m = GetSignalInvitationI
func (m *GetSignalInvitationInfoReq) String() string { return proto.CompactTextString(m) } func (m *GetSignalInvitationInfoReq) String() string { return proto.CompactTextString(m) }
func (*GetSignalInvitationInfoReq) ProtoMessage() {} func (*GetSignalInvitationInfoReq) ProtoMessage() {}
func (*GetSignalInvitationInfoReq) Descriptor() ([]byte, []int) { func (*GetSignalInvitationInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_third_3f9746cdadff77e4, []int{4} return fileDescriptor_third_de04cb9a0062d654, []int{4}
} }
func (m *GetSignalInvitationInfoReq) XXX_Unmarshal(b []byte) error { func (m *GetSignalInvitationInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSignalInvitationInfoReq.Unmarshal(m, b) return xxx_messageInfo_GetSignalInvitationInfoReq.Unmarshal(m, b)
@ -282,7 +282,7 @@ func (m *GetSignalInvitationInfoResp) Reset() { *m = GetSignalInvitation
func (m *GetSignalInvitationInfoResp) String() string { return proto.CompactTextString(m) } func (m *GetSignalInvitationInfoResp) String() string { return proto.CompactTextString(m) }
func (*GetSignalInvitationInfoResp) ProtoMessage() {} func (*GetSignalInvitationInfoResp) ProtoMessage() {}
func (*GetSignalInvitationInfoResp) Descriptor() ([]byte, []int) { func (*GetSignalInvitationInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_third_3f9746cdadff77e4, []int{5} return fileDescriptor_third_de04cb9a0062d654, []int{5}
} }
func (m *GetSignalInvitationInfoResp) XXX_Unmarshal(b []byte) error { func (m *GetSignalInvitationInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSignalInvitationInfoResp.Unmarshal(m, b) return xxx_messageInfo_GetSignalInvitationInfoResp.Unmarshal(m, b)
@ -327,7 +327,7 @@ func (m *GetSignalInvitationInfoStartAppReq) Reset() { *m = GetSignalInv
func (m *GetSignalInvitationInfoStartAppReq) String() string { return proto.CompactTextString(m) } func (m *GetSignalInvitationInfoStartAppReq) String() string { return proto.CompactTextString(m) }
func (*GetSignalInvitationInfoStartAppReq) ProtoMessage() {} func (*GetSignalInvitationInfoStartAppReq) ProtoMessage() {}
func (*GetSignalInvitationInfoStartAppReq) Descriptor() ([]byte, []int) { func (*GetSignalInvitationInfoStartAppReq) Descriptor() ([]byte, []int) {
return fileDescriptor_third_3f9746cdadff77e4, []int{6} return fileDescriptor_third_de04cb9a0062d654, []int{6}
} }
func (m *GetSignalInvitationInfoStartAppReq) XXX_Unmarshal(b []byte) error { func (m *GetSignalInvitationInfoStartAppReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSignalInvitationInfoStartAppReq.Unmarshal(m, b) return xxx_messageInfo_GetSignalInvitationInfoStartAppReq.Unmarshal(m, b)
@ -366,7 +366,7 @@ func (m *GetSignalInvitationInfoStartAppResp) Reset() { *m = GetSignalIn
func (m *GetSignalInvitationInfoStartAppResp) String() string { return proto.CompactTextString(m) } func (m *GetSignalInvitationInfoStartAppResp) String() string { return proto.CompactTextString(m) }
func (*GetSignalInvitationInfoStartAppResp) ProtoMessage() {} func (*GetSignalInvitationInfoStartAppResp) ProtoMessage() {}
func (*GetSignalInvitationInfoStartAppResp) Descriptor() ([]byte, []int) { func (*GetSignalInvitationInfoStartAppResp) Descriptor() ([]byte, []int) {
return fileDescriptor_third_3f9746cdadff77e4, []int{7} return fileDescriptor_third_de04cb9a0062d654, []int{7}
} }
func (m *GetSignalInvitationInfoStartAppResp) XXX_Unmarshal(b []byte) error { func (m *GetSignalInvitationInfoStartAppResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetSignalInvitationInfoStartAppResp.Unmarshal(m, b) return xxx_messageInfo_GetSignalInvitationInfoStartAppResp.Unmarshal(m, b)
@ -401,8 +401,10 @@ func (m *GetSignalInvitationInfoStartAppResp) GetOfflinePushInfo() *sdkws.Offlin
} }
type FcmUpdateTokenReq struct { type FcmUpdateTokenReq struct {
Platform int32 `protobuf:"varint,1,opt,name=Platform" json:"Platform,omitempty"` PlatformID int32 `protobuf:"varint,1,opt,name=PlatformID" json:"PlatformID,omitempty"`
FcmToken string `protobuf:"bytes,2,opt,name=FcmToken" json:"FcmToken,omitempty"` FcmToken string `protobuf:"bytes,2,opt,name=FcmToken" json:"FcmToken,omitempty"`
Account string `protobuf:"bytes,3,opt,name=account" json:"account,omitempty"`
ExpireTime int64 `protobuf:"varint,4,opt,name=expireTime" json:"expireTime,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:"-"`
@ -412,7 +414,7 @@ func (m *FcmUpdateTokenReq) Reset() { *m = FcmUpdateTokenReq{} }
func (m *FcmUpdateTokenReq) String() string { return proto.CompactTextString(m) } func (m *FcmUpdateTokenReq) String() string { return proto.CompactTextString(m) }
func (*FcmUpdateTokenReq) ProtoMessage() {} func (*FcmUpdateTokenReq) ProtoMessage() {}
func (*FcmUpdateTokenReq) Descriptor() ([]byte, []int) { func (*FcmUpdateTokenReq) Descriptor() ([]byte, []int) {
return fileDescriptor_third_3f9746cdadff77e4, []int{8} return fileDescriptor_third_de04cb9a0062d654, []int{8}
} }
func (m *FcmUpdateTokenReq) XXX_Unmarshal(b []byte) error { func (m *FcmUpdateTokenReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FcmUpdateTokenReq.Unmarshal(m, b) return xxx_messageInfo_FcmUpdateTokenReq.Unmarshal(m, b)
@ -432,9 +434,9 @@ func (m *FcmUpdateTokenReq) XXX_DiscardUnknown() {
var xxx_messageInfo_FcmUpdateTokenReq proto.InternalMessageInfo var xxx_messageInfo_FcmUpdateTokenReq proto.InternalMessageInfo
func (m *FcmUpdateTokenReq) GetPlatform() int32 { func (m *FcmUpdateTokenReq) GetPlatformID() int32 {
if m != nil { if m != nil {
return m.Platform return m.PlatformID
} }
return 0 return 0
} }
@ -446,6 +448,20 @@ func (m *FcmUpdateTokenReq) GetFcmToken() string {
return "" return ""
} }
func (m *FcmUpdateTokenReq) GetAccount() string {
if m != nil {
return m.Account
}
return ""
}
func (m *FcmUpdateTokenReq) GetExpireTime() int64 {
if m != nil {
return m.ExpireTime
}
return 0
}
type FcmUpdateTokenResp struct { type FcmUpdateTokenResp struct {
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
@ -456,7 +472,7 @@ func (m *FcmUpdateTokenResp) Reset() { *m = FcmUpdateTokenResp{} }
func (m *FcmUpdateTokenResp) String() string { return proto.CompactTextString(m) } func (m *FcmUpdateTokenResp) String() string { return proto.CompactTextString(m) }
func (*FcmUpdateTokenResp) ProtoMessage() {} func (*FcmUpdateTokenResp) ProtoMessage() {}
func (*FcmUpdateTokenResp) Descriptor() ([]byte, []int) { func (*FcmUpdateTokenResp) Descriptor() ([]byte, []int) {
return fileDescriptor_third_3f9746cdadff77e4, []int{9} return fileDescriptor_third_de04cb9a0062d654, []int{9}
} }
func (m *FcmUpdateTokenResp) XXX_Unmarshal(b []byte) error { func (m *FcmUpdateTokenResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_FcmUpdateTokenResp.Unmarshal(m, b) return xxx_messageInfo_FcmUpdateTokenResp.Unmarshal(m, b)
@ -477,7 +493,7 @@ func (m *FcmUpdateTokenResp) XXX_DiscardUnknown() {
var xxx_messageInfo_FcmUpdateTokenResp proto.InternalMessageInfo var xxx_messageInfo_FcmUpdateTokenResp proto.InternalMessageInfo
type SetAppBadgeReq struct { type SetAppBadgeReq struct {
FromUserID string `protobuf:"bytes,1,opt,name=FromUserID" json:"FromUserID,omitempty"` UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"`
AppUnreadCount int32 `protobuf:"varint,2,opt,name=AppUnreadCount" json:"AppUnreadCount,omitempty"` AppUnreadCount int32 `protobuf:"varint,2,opt,name=AppUnreadCount" json:"AppUnreadCount,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"` XXX_unrecognized []byte `json:"-"`
@ -488,7 +504,7 @@ func (m *SetAppBadgeReq) Reset() { *m = SetAppBadgeReq{} }
func (m *SetAppBadgeReq) String() string { return proto.CompactTextString(m) } func (m *SetAppBadgeReq) String() string { return proto.CompactTextString(m) }
func (*SetAppBadgeReq) ProtoMessage() {} func (*SetAppBadgeReq) ProtoMessage() {}
func (*SetAppBadgeReq) Descriptor() ([]byte, []int) { func (*SetAppBadgeReq) Descriptor() ([]byte, []int) {
return fileDescriptor_third_3f9746cdadff77e4, []int{10} return fileDescriptor_third_de04cb9a0062d654, []int{10}
} }
func (m *SetAppBadgeReq) XXX_Unmarshal(b []byte) error { func (m *SetAppBadgeReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetAppBadgeReq.Unmarshal(m, b) return xxx_messageInfo_SetAppBadgeReq.Unmarshal(m, b)
@ -508,9 +524,9 @@ func (m *SetAppBadgeReq) XXX_DiscardUnknown() {
var xxx_messageInfo_SetAppBadgeReq proto.InternalMessageInfo var xxx_messageInfo_SetAppBadgeReq proto.InternalMessageInfo
func (m *SetAppBadgeReq) GetFromUserID() string { func (m *SetAppBadgeReq) GetUserID() string {
if m != nil { if m != nil {
return m.FromUserID return m.UserID
} }
return "" return ""
} }
@ -532,7 +548,7 @@ func (m *SetAppBadgeResp) Reset() { *m = SetAppBadgeResp{} }
func (m *SetAppBadgeResp) String() string { return proto.CompactTextString(m) } func (m *SetAppBadgeResp) String() string { return proto.CompactTextString(m) }
func (*SetAppBadgeResp) ProtoMessage() {} func (*SetAppBadgeResp) ProtoMessage() {}
func (*SetAppBadgeResp) Descriptor() ([]byte, []int) { func (*SetAppBadgeResp) Descriptor() ([]byte, []int) {
return fileDescriptor_third_3f9746cdadff77e4, []int{11} return fileDescriptor_third_de04cb9a0062d654, []int{11}
} }
func (m *SetAppBadgeResp) XXX_Unmarshal(b []byte) error { func (m *SetAppBadgeResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SetAppBadgeResp.Unmarshal(m, b) return xxx_messageInfo_SetAppBadgeResp.Unmarshal(m, b)
@ -771,46 +787,46 @@ var _Third_serviceDesc = grpc.ServiceDesc{
Metadata: "third/third.proto", Metadata: "third/third.proto",
} }
func init() { proto.RegisterFile("third/third.proto", fileDescriptor_third_3f9746cdadff77e4) } func init() { proto.RegisterFile("third/third.proto", fileDescriptor_third_de04cb9a0062d654) }
var fileDescriptor_third_3f9746cdadff77e4 = []byte{ var fileDescriptor_third_de04cb9a0062d654 = []byte{
// 594 bytes of a gzipped FileDescriptorProto // 608 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x54, 0xc1, 0x6e, 0xd3, 0x4c, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x54, 0xcd, 0x6e, 0xd3, 0x40,
0x10, 0x96, 0xeb, 0xa6, 0xff, 0x9f, 0x89, 0x9a, 0xb6, 0xab, 0xb6, 0x18, 0x53, 0x15, 0x63, 0x24, 0x10, 0x96, 0xeb, 0xb6, 0x90, 0x89, 0x9a, 0xb6, 0xab, 0xb6, 0x18, 0x53, 0x15, 0x63, 0x24, 0x28,
0x28, 0x48, 0x8d, 0x51, 0x39, 0x21, 0x0a, 0xa2, 0x2d, 0x04, 0x45, 0x28, 0x6a, 0xe5, 0x34, 0x12, 0x48, 0x8d, 0x51, 0x39, 0x21, 0x0a, 0xa2, 0x2d, 0x14, 0xe5, 0x50, 0x35, 0x72, 0xd2, 0x0b, 0x27,
0xe2, 0x84, 0x49, 0xd6, 0x89, 0x15, 0x7b, 0x77, 0xd8, 0x5d, 0xb7, 0x94, 0x17, 0xe0, 0x2d, 0xb8, 0x8c, 0xb3, 0x4e, 0xac, 0x38, 0xeb, 0xc1, 0xbb, 0xee, 0x0f, 0x2f, 0x80, 0x78, 0x09, 0x2e, 0x48,
0x20, 0xf1, 0x9c, 0xc8, 0x9b, 0x34, 0xb5, 0x4d, 0x42, 0x38, 0x72, 0xb1, 0x66, 0xbe, 0xfd, 0xbe, 0x3c, 0x27, 0xda, 0xb5, 0x93, 0xda, 0x26, 0x69, 0x38, 0x72, 0xb1, 0x76, 0x3e, 0x7f, 0xdf, 0xec,
0xd9, 0x99, 0x9d, 0xf1, 0xc0, 0x86, 0x1a, 0x46, 0xa2, 0xef, 0xe9, 0x6f, 0x03, 0x05, 0x57, 0x9c, 0xfc, 0xec, 0x0c, 0xac, 0x8b, 0x41, 0x98, 0xf4, 0x1c, 0xf5, 0x6d, 0x62, 0x12, 0x8b, 0x98, 0x2c,
0x54, 0xb4, 0x63, 0x3f, 0x3c, 0x45, 0xca, 0xf6, 0x5b, 0xed, 0xfd, 0x0e, 0x15, 0x17, 0x54, 0x78, 0x29, 0xc3, 0x7c, 0x7a, 0x86, 0x94, 0xed, 0xb5, 0x4e, 0xf7, 0x3a, 0x34, 0xb9, 0xa0, 0x89, 0x83,
0x38, 0x1a, 0x78, 0x9a, 0xe0, 0xc9, 0xfe, 0xe8, 0x52, 0x7a, 0x97, 0x72, 0xcc, 0x77, 0xbf, 0x19, 0xc3, 0xbe, 0xa3, 0x08, 0x0e, 0xef, 0x0d, 0x2f, 0xb9, 0x73, 0xc9, 0x33, 0xbe, 0xfd, 0x5d, 0x83,
0xb0, 0x7a, 0x84, 0x18, 0x5f, 0x75, 0x30, 0xe8, 0x51, 0x9f, 0x7e, 0x26, 0x04, 0x96, 0x59, 0x90, 0x95, 0x43, 0xc4, 0xe8, 0xba, 0x83, 0x9e, 0x4f, 0x5d, 0xfa, 0x95, 0x10, 0x58, 0x64, 0xde, 0x88,
0x50, 0xcb, 0x70, 0x8c, 0xbd, 0xaa, 0xaf, 0xed, 0x0c, 0x93, 0xd1, 0x57, 0x6a, 0x2d, 0x39, 0xc6, 0x1a, 0x9a, 0xa5, 0xed, 0xd6, 0x5c, 0x75, 0x96, 0x18, 0x0f, 0xbf, 0x51, 0x63, 0xc1, 0xd2, 0x76,
0x9e, 0xe9, 0x6b, 0x3b, 0xc3, 0x86, 0x81, 0x1c, 0x5a, 0xe6, 0x98, 0x97, 0xd9, 0xc4, 0x82, 0xff, 0x75, 0x57, 0x9d, 0x25, 0x36, 0xf0, 0xf8, 0xc0, 0xd0, 0x33, 0x9e, 0x3c, 0x13, 0x03, 0xee, 0x60,
0x30, 0x15, 0xc8, 0x25, 0xb5, 0x96, 0x1d, 0x63, 0x6f, 0xd5, 0xbf, 0x76, 0x89, 0x03, 0xb5, 0x1e, 0x9a, 0x60, 0xcc, 0xa9, 0xb1, 0x68, 0x69, 0xbb, 0x2b, 0xee, 0xd8, 0x24, 0x16, 0xd4, 0xfd, 0x98,
0x67, 0x8a, 0x32, 0x75, 0x7e, 0x85, 0xd4, 0xaa, 0x68, 0x51, 0x1e, 0x72, 0x43, 0xa8, 0xe7, 0x13, 0x09, 0xca, 0x44, 0xf7, 0x1a, 0xa9, 0xb1, 0xa4, 0x44, 0x45, 0xc8, 0x0e, 0xa0, 0x51, 0x0c, 0x84,
0x91, 0x48, 0xd6, 0xc1, 0x4c, 0x45, 0x3c, 0x49, 0x24, 0x33, 0x67, 0xe6, 0xb1, 0x0e, 0x26, 0xa6, 0x23, 0x59, 0x03, 0x3d, 0x4d, 0xa2, 0x3c, 0x10, 0x79, 0x9c, 0x1a, 0xc7, 0x1a, 0xe8, 0x98, 0x0a,
0xca, 0x32, 0x1d, 0x33, 0x63, 0x61, 0xaa, 0xc8, 0x0e, 0x54, 0x7b, 0x9c, 0x85, 0x91, 0x48, 0x5a, 0x43, 0xb7, 0x74, 0xc9, 0xc2, 0x54, 0x90, 0x6d, 0xa8, 0xf9, 0x31, 0x0b, 0xc2, 0x64, 0xd4, 0x7a,
0xaf, 0x75, 0x1e, 0x55, 0xff, 0x06, 0x70, 0x3d, 0x58, 0x3b, 0x19, 0x3b, 0xd3, 0x92, 0x0b, 0x02, 0xaf, 0xe2, 0xa8, 0xb9, 0x37, 0x80, 0xed, 0xc0, 0xea, 0x71, 0x66, 0x4c, 0x52, 0x2e, 0x09, 0xb4,
0xa3, 0x2c, 0x78, 0x02, 0xeb, 0x45, 0x81, 0xc4, 0x05, 0x8a, 0x97, 0x60, 0xbf, 0xa5, 0xaa, 0x13, 0xaa, 0xe0, 0x05, 0xac, 0x95, 0x05, 0x1c, 0xe7, 0x28, 0xde, 0x82, 0xf9, 0x91, 0x8a, 0x4e, 0xd8,
0x0d, 0x58, 0x10, 0xb7, 0xd8, 0x45, 0xa4, 0x02, 0x15, 0x71, 0xd6, 0x62, 0x21, 0xcf, 0x6e, 0x73, 0x67, 0x5e, 0xd4, 0x62, 0x17, 0xa1, 0xf0, 0x44, 0x18, 0xb3, 0x16, 0x0b, 0x62, 0x79, 0x9b, 0x05,
0xa0, 0x76, 0x12, 0x47, 0x94, 0xa9, 0xb6, 0x1c, 0x4c, 0xd5, 0x79, 0xc8, 0xfd, 0x6e, 0xc0, 0x9d, 0xf5, 0xe3, 0x28, 0xa4, 0x4c, 0x9c, 0xf2, 0xfe, 0x44, 0x5d, 0x84, 0xec, 0x9f, 0x1a, 0x3c, 0x98,
0xb9, 0x01, 0x24, 0x92, 0x17, 0x50, 0x8f, 0x0a, 0xa8, 0x0e, 0x52, 0x3b, 0xd8, 0x6a, 0xe8, 0xee, 0xe9, 0x80, 0x23, 0x79, 0x03, 0x8d, 0xb0, 0x84, 0x2a, 0x27, 0xf5, 0xfd, 0xcd, 0xa6, 0xea, 0x6e,
0x36, 0x4a, 0x92, 0x12, 0x99, 0xbc, 0x82, 0x35, 0x1e, 0x86, 0x71, 0xc4, 0xe8, 0x59, 0x2a, 0x87, 0xb3, 0x22, 0xa9, 0x90, 0xc9, 0x3b, 0x58, 0x8d, 0x83, 0x20, 0x0a, 0x19, 0x6d, 0xa7, 0x7c, 0xa0,
0x5a, 0xbf, 0xa4, 0xf5, 0xdb, 0x13, 0xfd, 0x69, 0xf1, 0xd4, 0x2f, 0xd3, 0xdd, 0x43, 0x70, 0xe7, 0xf4, 0x0b, 0x4a, 0xbf, 0x95, 0xeb, 0xcf, 0xca, 0x7f, 0xdd, 0x2a, 0xdd, 0x3e, 0x00, 0x7b, 0x46,
0xe4, 0xd7, 0x51, 0x81, 0x50, 0x47, 0x88, 0x59, 0xa1, 0xdb, 0xb0, 0x92, 0x4a, 0x2a, 0xa6, 0x35, 0x7c, 0x1d, 0xe1, 0x25, 0xe2, 0x10, 0x51, 0x26, 0xba, 0x05, 0xcb, 0x29, 0xa7, 0xc9, 0x24, 0xc7,
0x4e, 0x3c, 0xf7, 0xa7, 0x01, 0xf7, 0x17, 0xca, 0xff, 0x85, 0x32, 0xdf, 0xc1, 0x46, 0xb3, 0x97, 0xdc, 0xb2, 0x7f, 0x6b, 0xf0, 0x78, 0xae, 0xfc, 0x7f, 0x48, 0xf3, 0x87, 0x06, 0xeb, 0x27, 0xfe,
0x74, 0xb1, 0x1f, 0x28, 0x7a, 0xce, 0x47, 0x94, 0x65, 0x55, 0xd9, 0xf0, 0xff, 0x59, 0x1c, 0xa8, 0xe8, 0x1c, 0x7b, 0x9e, 0xa0, 0xdd, 0x78, 0x48, 0x99, 0x4c, 0x6b, 0x07, 0xa0, 0x1d, 0x79, 0x22,
0x90, 0x8b, 0x44, 0xe7, 0x53, 0xf1, 0xa7, 0x7e, 0x76, 0xd6, 0xec, 0x25, 0x9a, 0xaa, 0xef, 0xaa, 0x88, 0x27, 0xcd, 0x5f, 0x72, 0x0b, 0x08, 0x31, 0xe1, 0xee, 0x89, 0x3f, 0x52, 0x74, 0x75, 0x61,
0xfa, 0x53, 0xdf, 0xdd, 0x04, 0x52, 0x0e, 0x26, 0xd1, 0x7d, 0x0f, 0xf5, 0x0e, 0xcd, 0x2a, 0x3e, 0xcd, 0x9d, 0xd8, 0x72, 0x40, 0x3c, 0xdf, 0x8f, 0x53, 0x26, 0xf2, 0xb9, 0x19, 0x9b, 0xd2, 0x2b,
0x0e, 0xfa, 0x03, 0x3d, 0x8c, 0xbb, 0x00, 0x4d, 0xc1, 0x93, 0x6e, 0xfe, 0xe5, 0x72, 0x08, 0x79, 0xbd, 0xc2, 0x30, 0xa1, 0xdd, 0x70, 0x94, 0x4d, 0x8f, 0xee, 0x16, 0x10, 0x7b, 0x03, 0x48, 0x35,
0xa0, 0xff, 0x93, 0x2e, 0x13, 0x34, 0xe8, 0x9f, 0xf0, 0x94, 0x29, 0x7d, 0x53, 0xc5, 0x2f, 0xa1, 0x14, 0x8e, 0x76, 0x1b, 0x1a, 0x1d, 0x2a, 0x0b, 0x76, 0xe4, 0xf5, 0xfa, 0xf4, 0x96, 0xa2, 0x93,
0xee, 0x06, 0xac, 0x15, 0x22, 0x4b, 0x3c, 0xf8, 0x61, 0xc2, 0x78, 0x3f, 0x90, 0x67, 0x00, 0x37, 0x27, 0x6a, 0xbc, 0xce, 0x59, 0x42, 0xbd, 0xde, 0xb1, 0x0a, 0x60, 0x41, 0x45, 0x5e, 0x41, 0xed,
0x3f, 0x1b, 0xd9, 0x6c, 0x8c, 0x57, 0x48, 0x61, 0x11, 0xd8, 0x5b, 0x33, 0x50, 0x89, 0xe4, 0x23, 0x75, 0x58, 0x2d, 0x79, 0xe4, 0xb8, 0xff, 0x4b, 0x87, 0x6c, 0xad, 0x90, 0x57, 0x00, 0x37, 0x33,
0xdc, 0x9a, 0xd3, 0x3c, 0x72, 0x6f, 0xa2, 0x98, 0x3f, 0xfc, 0xb6, 0xbb, 0x88, 0x22, 0x91, 0x7c, 0x4a, 0x36, 0x9a, 0xd9, 0xe6, 0x29, 0xed, 0x0f, 0x73, 0x73, 0x0a, 0xca, 0x91, 0x7c, 0x86, 0x7b,
0x81, 0xbb, 0x0b, 0xc6, 0x83, 0x3c, 0xfa, 0x73, 0x98, 0xdc, 0x14, 0xda, 0x8f, 0xff, 0x96, 0x2a, 0x33, 0x7a, 0x4e, 0x1e, 0xe5, 0x8a, 0xd9, 0x33, 0x63, 0xda, 0xf3, 0x28, 0x1c, 0xc9, 0x15, 0x3c,
0x91, 0xbc, 0x81, 0x7a, 0xb1, 0x47, 0xc4, 0x9a, 0xa8, 0x7f, 0x9b, 0x03, 0xfb, 0xf6, 0x9c, 0x13, 0x9c, 0xf3, 0xaa, 0xc8, 0xb3, 0xdb, 0xdd, 0x14, 0x1e, 0xaf, 0xf9, 0xfc, 0x5f, 0xa9, 0x1c, 0xc9,
0x89, 0xe4, 0x10, 0x6a, 0xb9, 0xa7, 0x27, 0xd7, 0x0f, 0x59, 0x6c, 0xb4, 0xbd, 0x3d, 0x0b, 0x96, 0x07, 0x68, 0x94, 0x7b, 0x43, 0x8c, 0x5c, 0xfd, 0xd7, 0xeb, 0x31, 0xef, 0xcf, 0xf8, 0xc3, 0x91,
0x78, 0xbc, 0xfb, 0x61, 0x27, 0xdb, 0xde, 0xad, 0x76, 0x6e, 0x6b, 0x6b, 0xe6, 0x73, 0xfd, 0xfd, 0x1c, 0x40, 0xbd, 0x50, 0x7a, 0x32, 0x2e, 0x64, 0xb9, 0xc1, 0xe6, 0xd6, 0x34, 0x98, 0xe3, 0xd1,
0xb4, 0xa2, 0xa1, 0xa7, 0xbf, 0x02, 0x00, 0x00, 0xff, 0xff, 0xbd, 0xf0, 0xfa, 0xf7, 0xfe, 0x05, 0xce, 0xa7, 0x6d, 0xb9, 0xf4, 0x5b, 0xa7, 0x85, 0x65, 0xaf, 0x98, 0xaf, 0xd5, 0xf7, 0xcb, 0xb2,
0x00, 0x00, 0x82, 0x5e, 0xfe, 0x09, 0x00, 0x00, 0xff, 0xff, 0x74, 0xd3, 0xa9, 0xeb, 0x35, 0x06, 0x00, 0x00,
} }