mirror of
				https://github.com/openimsdk/open-im-server.git
				synced 2025-11-04 11:22:10 +08:00 
			
		
		
		
	Merge remote-tracking branch 'upstream/tuoyun' into tuoyun
This commit is contained in:
		
						commit
						48c3975ab1
					
				@ -1 +1 @@
 | 
			
		||||
Subproject commit 23f31958dae08260c5f9631f4937389a8e2d6751
 | 
			
		||||
Subproject commit 992f76df0ee500a0377523b0780d3a85f2275755
 | 
			
		||||
@ -4,44 +4,44 @@
 | 
			
		||||
serverversion: 2.0.0
 | 
			
		||||
#---------------Infrastructure configuration---------------------#
 | 
			
		||||
etcd:
 | 
			
		||||
  etcdSchema: openIM
 | 
			
		||||
  etcdAddr: [ 127.0.0.1:2379 ]
 | 
			
		||||
  etcdSchema: openIM  #默认即可
 | 
			
		||||
  etcdAddr: [ 127.0.0.1:2379 ] #单机部署时,默认即可
 | 
			
		||||
 | 
			
		||||
mysql:
 | 
			
		||||
  dbMysqlAddress: [ 127.0.0.1:13306 ]
 | 
			
		||||
  dbMysqlUserName: root
 | 
			
		||||
  dbMysqlPassword: openIM
 | 
			
		||||
  dbMysqlDatabaseName: openIM_v2
 | 
			
		||||
  dbTableName: eMsg
 | 
			
		||||
  dbMysqlAddress: [ 127.0.0.1:13306 ] #mysql地址 目前仅支持单机,默认即可
 | 
			
		||||
  dbMysqlUserName: root #mysql用户名,建议修改
 | 
			
		||||
  dbMysqlPassword: openIM # mysql密码,建议修改
 | 
			
		||||
  dbMysqlDatabaseName: openIM_v2 #默认即可
 | 
			
		||||
  dbTableName: eMsg #默认即可
 | 
			
		||||
  dbMsgTableNum: 1
 | 
			
		||||
  dbMaxOpenConns: 20
 | 
			
		||||
  dbMaxIdleConns: 10
 | 
			
		||||
  dbMaxLifeTime: 120
 | 
			
		||||
 | 
			
		||||
mongo:
 | 
			
		||||
  dbAddress: [ 127.0.0.1:37017 ]
 | 
			
		||||
  dbAddress: [ 127.0.0.1:37017 ] #redis地址 目前仅支持单机,默认即可
 | 
			
		||||
  dbDirect: false
 | 
			
		||||
  dbTimeout: 10
 | 
			
		||||
  dbDatabase: openIM
 | 
			
		||||
  dbDatabase: openIM  #mongo db 默认即可
 | 
			
		||||
  dbSource: admin
 | 
			
		||||
  dbUserName:
 | 
			
		||||
  dbPassword:
 | 
			
		||||
  dbUserName: #mongo用户名,建议先不设置
 | 
			
		||||
  dbPassword: #mongo密码,建议先不设置
 | 
			
		||||
  dbMaxPoolSize: 20
 | 
			
		||||
  dbRetainChatRecords: 7
 | 
			
		||||
  dbRetainChatRecords: 3650 #mongo保存离线消息时间(天),根据需求修改
 | 
			
		||||
 | 
			
		||||
redis:
 | 
			
		||||
  dbAddress: 127.0.0.1:16379
 | 
			
		||||
  dbAddress: 127.0.0.1:16379 #redis地址 目前仅支持单机,默认即可
 | 
			
		||||
  dbMaxIdle: 128
 | 
			
		||||
  dbMaxActive: 0
 | 
			
		||||
  dbIdleTimeout: 120
 | 
			
		||||
  dbPassWord: openIM
 | 
			
		||||
  dbPassWord: openIM #redis密码 建议修改
 | 
			
		||||
 | 
			
		||||
kafka:
 | 
			
		||||
  ws2mschat:
 | 
			
		||||
    addr: [ 127.0.0.1:9092 ]
 | 
			
		||||
    addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可
 | 
			
		||||
    topic: "ws2ms_chat"
 | 
			
		||||
  ms2pschat:
 | 
			
		||||
    addr: [ 127.0.0.1:9092 ]
 | 
			
		||||
    addr: [ 127.0.0.1:9092 ] #kafka配置,默认即可
 | 
			
		||||
    topic: "ms2ps_chat"
 | 
			
		||||
  consumergroupid:
 | 
			
		||||
    msgToMongo: mongo
 | 
			
		||||
@ -55,6 +55,7 @@ kafka:
 | 
			
		||||
# The service ip default is empty,
 | 
			
		||||
# automatically obtain the machine's valid network card ip as the service ip,
 | 
			
		||||
# otherwise the configuration ip is preferred
 | 
			
		||||
#如果是单机模式,用0.0.0.0或者不填,默认即可
 | 
			
		||||
serverip: 0.0.0.0
 | 
			
		||||
 | 
			
		||||
# endpoints 内部组件间访问的端点host名称,访问时,可以内部直接访问 host:port 来访问
 | 
			
		||||
@ -74,27 +75,28 @@ endpoints:
 | 
			
		||||
  rpc_message_cms: openim_rpc_admin_cms
 | 
			
		||||
 | 
			
		||||
api:
 | 
			
		||||
  openImApiPort: [ 10000 ]
 | 
			
		||||
  openImApiPort: [ 10000 ] #api服务端口,默认即可,需要开放此端口或做nginx转发
 | 
			
		||||
cmsapi:
 | 
			
		||||
  openImCmsApiPort: [ 8000 ]
 | 
			
		||||
  openImCmsApiPort: [ 8000 ] #管理后台api服务端口,默认即可,需要开放此端口或做nginx转发
 | 
			
		||||
sdk:
 | 
			
		||||
  openImSdkWsPort: [ 30000 ]
 | 
			
		||||
  openImSdkWsPort: [ 30000 ] #jssdk服务端口,默认即可,项目中使用jssdk才需开放此端口或做nginx转发
 | 
			
		||||
 | 
			
		||||
credential:
 | 
			
		||||
credential: #腾讯cos,发送图片、视频、文件时需要,请自行申请后替换,必须修改
 | 
			
		||||
  tencent:
 | 
			
		||||
    appID: 1302656840
 | 
			
		||||
    region: ap-chengdu
 | 
			
		||||
    bucket: echat-1302656840
 | 
			
		||||
    secretID: AKIDGNYVChzIQinu7QEgtNp0hnNgqcV8vZTC
 | 
			
		||||
    secretKey: kz15vW83qM6dBUWIq681eBZA0c0vlIbe
 | 
			
		||||
  minio:
 | 
			
		||||
  minio: #MinIO 发送图片、视频、文件时需要,请自行申请后替换,必须修改。 客户端初始化时相应改动
 | 
			
		||||
    bucket: openim
 | 
			
		||||
    location: us-east-1
 | 
			
		||||
    endpoint: http://127.0.0.1:9000
 | 
			
		||||
    accessKeyID: minioadmin
 | 
			
		||||
    secretAccessKey: minioadmin
 | 
			
		||||
 | 
			
		||||
rpcport:
 | 
			
		||||
 | 
			
		||||
rpcport: #rpc服务端口 默认即可
 | 
			
		||||
  openImUserPort: [ 10100 ]
 | 
			
		||||
  openImFriendPort: [ 10200 ]
 | 
			
		||||
  openImOfflineMessagePort: [ 10300 ]
 | 
			
		||||
@ -115,7 +117,7 @@ rpcport:
 | 
			
		||||
    stateChange:
 | 
			
		||||
      switch: false
 | 
			
		||||
 | 
			
		||||
rpcregistername:
 | 
			
		||||
rpcregistername: #rpc注册服务名,默认即可
 | 
			
		||||
  openImUserName: User
 | 
			
		||||
  openImFriendName: Friend
 | 
			
		||||
  openImOfflineMessageName: OfflineMessage
 | 
			
		||||
@ -130,52 +132,55 @@ rpcregistername:
 | 
			
		||||
log:
 | 
			
		||||
  storageLocation: ../logs/
 | 
			
		||||
  rotationTime: 24
 | 
			
		||||
  remainRotationCount: 5
 | 
			
		||||
  remainLogLevel: 6
 | 
			
		||||
  remainRotationCount: 5 #日志数量
 | 
			
		||||
  remainLogLevel: 6 #日志级别 6表示全都打印,测试阶段建议设置为6
 | 
			
		||||
  elasticSearchSwitch: false
 | 
			
		||||
  elasticSearchAddr: [ 127.0.0.1:9201 ]
 | 
			
		||||
  elasticSearchUser: ""
 | 
			
		||||
  elasticSearchPassword: ""
 | 
			
		||||
 | 
			
		||||
modulename:
 | 
			
		||||
modulename: #日志文件按模块命名,默认即可
 | 
			
		||||
  longConnSvrName: msg_gateway
 | 
			
		||||
  msgTransferName: msg_transfer
 | 
			
		||||
  pushName: push
 | 
			
		||||
 | 
			
		||||
longconnsvr:
 | 
			
		||||
  openImWsPort: [ 17778 ]
 | 
			
		||||
  openImWsPort: [ 17778 ] # ws服务端口,默认即可,要开放此端口或做nginx转发
 | 
			
		||||
  websocketMaxConnNum: 10000
 | 
			
		||||
  websocketMaxMsgLen: 4096
 | 
			
		||||
  websocketTimeOut: 10
 | 
			
		||||
 | 
			
		||||
push:
 | 
			
		||||
  tpns:
 | 
			
		||||
  tpns: #腾讯推送,暂未测试 暂不要使用
 | 
			
		||||
    ios:
 | 
			
		||||
      accessID: 1600018281
 | 
			
		||||
      secretKey: 3cd68a77a95b89e5089a1aca523f318f
 | 
			
		||||
    android:
 | 
			
		||||
      accessID: 111
 | 
			
		||||
      secretKey: 111
 | 
			
		||||
  jpns:
 | 
			
		||||
  jpns: #极光推送 在极光后台申请后,修改以下四项,必须修改
 | 
			
		||||
    appKey: cf47465a368f24c659608e7e
 | 
			
		||||
    masterSecret: 02204efe3f3832947a236ee5
 | 
			
		||||
    pushUrl: "https://api.jpush.cn/v3/push"
 | 
			
		||||
    pushIntent: "intent:#Intent;component=io.openim.app.enterprisechat/io.openim.app.enterprisechat.MainActivity;end"
 | 
			
		||||
manager:
 | 
			
		||||
  #app管理员userID和对应的secret  建议修改。 用于管理后台登录,也可以用户管理后台对应的api
 | 
			
		||||
  appManagerUid: [ "openIM123456","openIM654321", "openIM333", "openIMAdmin"]
 | 
			
		||||
  secrets: [ "openIM1","openIM2", "openIM333", "openIMAdmin"]
 | 
			
		||||
 | 
			
		||||
secret: tuoyun
 | 
			
		||||
 | 
			
		||||
# 多端互踢策略
 | 
			
		||||
# 1:多平台登录:Android、iOS、Windows、Mac 每种平台只能一个在线,web端可以多个同时在线
 | 
			
		||||
multiloginpolicy: 1
 | 
			
		||||
 | 
			
		||||
#token config
 | 
			
		||||
tokenpolicy:
 | 
			
		||||
  accessSecret: "open_im_server"
 | 
			
		||||
  accessSecret: "open_im_server" #token生成相关,默认即可
 | 
			
		||||
  # Token effective time day as a unit
 | 
			
		||||
  accessExpire: 7
 | 
			
		||||
  accessExpire: 3650 #token过期时间(天) 默认即可
 | 
			
		||||
 | 
			
		||||
messagecallback:
 | 
			
		||||
  callbackSwitch: false
 | 
			
		||||
  callbackUrl: "http://www.xxx.com/msg/judge"
 | 
			
		||||
  #TimeOut use second as unit
 | 
			
		||||
  callbackTimeOut: 10
 | 
			
		||||
@ -190,7 +195,7 @@ messagejudge:
 | 
			
		||||
#  state:
 | 
			
		||||
#    stateChange:
 | 
			
		||||
#      switch: false
 | 
			
		||||
 | 
			
		||||
#ios系统推送声音以及标记计数
 | 
			
		||||
iospush:
 | 
			
		||||
  pushSound: "xxx"
 | 
			
		||||
  badgeCount: true
 | 
			
		||||
@ -379,11 +384,11 @@ notification:
 | 
			
		||||
      unreadCount: false
 | 
			
		||||
    offlinePush:
 | 
			
		||||
      switch: true
 | 
			
		||||
      title: "Deleted a friend"
 | 
			
		||||
      desc: "Deleted a friend"
 | 
			
		||||
      ext: "Deleted a friend"
 | 
			
		||||
      title: "deleted a friend"
 | 
			
		||||
      desc: "deleted a friend"
 | 
			
		||||
      ext: "deleted a friend"
 | 
			
		||||
    defaultTips:
 | 
			
		||||
      tips: "Deleted a friend"  #
 | 
			
		||||
      tips: "deleted a friend"  #
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  friendRemarkSet:
 | 
			
		||||
@ -406,11 +411,11 @@ notification:
 | 
			
		||||
      unreadCount: false
 | 
			
		||||
    offlinePush:
 | 
			
		||||
      switch: true
 | 
			
		||||
      title: "Blocked a user"
 | 
			
		||||
      desc: "Blocked a user"
 | 
			
		||||
      ext: "Blocked a user"
 | 
			
		||||
      title: "blocked a user"
 | 
			
		||||
      desc: "blocked a user"
 | 
			
		||||
      ext: "blocked a user"
 | 
			
		||||
    defaultTips:
 | 
			
		||||
      tips: "Blocked a user"  #
 | 
			
		||||
      tips: "blocked a user"  #
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
  blackDeleted:
 | 
			
		||||
@ -436,7 +441,7 @@ notification:
 | 
			
		||||
      desc: "Remove a blocked user"
 | 
			
		||||
      ext: "Remove a blocked user"
 | 
			
		||||
    defaultTips:
 | 
			
		||||
      tips: "Remove a blocked user"
 | 
			
		||||
      tips: "remove a blocked user"
 | 
			
		||||
 | 
			
		||||
  #####################conversation#########################
 | 
			
		||||
  conversationOptUpdate:
 | 
			
		||||
@ -455,23 +460,24 @@ notification:
 | 
			
		||||
 | 
			
		||||
#---------------demo configuration---------------------#
 | 
			
		||||
#The following configuration items are applied to openIM Demo configuration
 | 
			
		||||
#是否启动demo,如果自身没有账号体系,设置为true
 | 
			
		||||
demoswitch: true
 | 
			
		||||
demo:
 | 
			
		||||
  openImDemoPort: [ 42233 ]
 | 
			
		||||
  alismsverify:
 | 
			
		||||
    accessKeyId: LTAI5tJPkn4HuuePdiLdGqe7
 | 
			
		||||
    accessKeySecret: 4n9OJ7ZCVN1U6KeHDAtOyNeVZcjOuV
 | 
			
		||||
    signName: 托云信息技术
 | 
			
		||||
    verificationCodeTemplateCode: SMS_226810164
 | 
			
		||||
  superCode: 666666
 | 
			
		||||
  openImDemoPort: [ 42233 ] #demo对外服务端口,默认即可,需要开放此端口或做nginx转发
 | 
			
		||||
  alismsverify: #阿里云短信配置,在阿里云申请成功后修改以下四项,必须修改
 | 
			
		||||
    accessKeyId: LTAI5tJPkn4HuuePdiLdGqe71
 | 
			
		||||
    accessKeySecret: 4n9OJ7ZCVN1U6KeHDAtOyNeVZcjOuV1
 | 
			
		||||
    signName: OpenIM Corporation
 | 
			
		||||
    verificationCodeTemplateCode: SMS_2268101641
 | 
			
		||||
  superCode: 666666 #超级验证码,建议修改掉,收不到短信验证码时可以用此替代
 | 
			
		||||
  #  second
 | 
			
		||||
  codeTTL: 300
 | 
			
		||||
  mail:
 | 
			
		||||
  mail: #仅支持qq邮箱,具体操作参考 https://service.mail.qq.com/cgi-bin/help?subtype=1&id=28&no=1001256 必须修改
 | 
			
		||||
    title: "openIM"
 | 
			
		||||
    senderMail: "765567899@qq.com"
 | 
			
		||||
    senderAuthorizationCode: "gxyausfoevlzbfag"
 | 
			
		||||
    senderMail: "1765567899@qq.com"
 | 
			
		||||
    senderAuthorizationCode: "1gxyausfoevlzbfag"
 | 
			
		||||
    smtpAddr: "smtp.qq.com"
 | 
			
		||||
    smtpPort: 25
 | 
			
		||||
    smtpPort: 25   #需开放此端口 出口方向
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -7,12 +7,14 @@
 | 
			
		||||
package manage
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	api "Open_IM/pkg/base_info"
 | 
			
		||||
	"Open_IM/pkg/common/config"
 | 
			
		||||
	"Open_IM/pkg/common/constant"
 | 
			
		||||
	"Open_IM/pkg/common/log"
 | 
			
		||||
	"Open_IM/pkg/common/token_verify"
 | 
			
		||||
	"Open_IM/pkg/grpc-etcdv3/getcdv3"
 | 
			
		||||
	pbChat "Open_IM/pkg/proto/chat"
 | 
			
		||||
	"Open_IM/pkg/proto/sdk_ws"
 | 
			
		||||
	open_im_sdk "Open_IM/pkg/proto/sdk_ws"
 | 
			
		||||
	"Open_IM/pkg/utils"
 | 
			
		||||
	"context"
 | 
			
		||||
@ -40,11 +42,13 @@ func newUserSendMsgReq(params *ManagementSendMsgReq) *pbChat.SendMsgReq {
 | 
			
		||||
		newContent = utils.StructToJsonString(params.Content)
 | 
			
		||||
	default:
 | 
			
		||||
	}
 | 
			
		||||
	options := make(map[string]bool, 2)
 | 
			
		||||
	var options map[string]bool
 | 
			
		||||
	if params.IsOnlineOnly {
 | 
			
		||||
		options = make(map[string]bool, 5)
 | 
			
		||||
		utils.SetSwitchFromOptions(options, constant.IsOfflinePush, false)
 | 
			
		||||
		utils.SetSwitchFromOptions(options, constant.IsHistory, false)
 | 
			
		||||
		utils.SetSwitchFromOptions(options, constant.IsPersistent, false)
 | 
			
		||||
		utils.SetSwitchFromOptions(options, constant.IsSenderSync, false)
 | 
			
		||||
	}
 | 
			
		||||
	pbData := pbChat.SendMsgReq{
 | 
			
		||||
		OperationID: params.OperationID,
 | 
			
		||||
@ -152,20 +156,16 @@ func ManagementSendMsg(c *gin.Context) {
 | 
			
		||||
 | 
			
		||||
	log.Info("", "", "api ManagementSendMsg call, api call rpc...")
 | 
			
		||||
 | 
			
		||||
	reply, err := client.SendMsg(context.Background(), pbData)
 | 
			
		||||
	RpcResp, err := client.SendMsg(context.Background(), pbData)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.NewError(params.OperationID, "call delete UserSendMsg rpc server failed", err.Error())
 | 
			
		||||
		c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call UserSendMsg  rpc server failed"})
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	log.Info("", "", "api ManagementSendMsg call end..., [data: %s] [reply: %s]", pbData.String(), reply.String())
 | 
			
		||||
 | 
			
		||||
	c.JSON(http.StatusOK, gin.H{
 | 
			
		||||
		"errCode":  reply.ErrCode,
 | 
			
		||||
		"errMsg":   reply.ErrMsg,
 | 
			
		||||
		"sendTime": reply.SendTime,
 | 
			
		||||
		"msgID":    reply.ClientMsgID,
 | 
			
		||||
	})
 | 
			
		||||
	log.Info("", "", "api ManagementSendMsg call end..., [data: %s] [reply: %s]", pbData.String(), RpcResp.String())
 | 
			
		||||
	resp := api.ManagementSendMsgResp{CommResp: api.CommResp{ErrCode: RpcResp.ErrCode, ErrMsg: RpcResp.ErrMsg}, ResultList: server_api_params.UserSendMsgResp{ServerMsgID: RpcResp.ServerMsgID, ClientMsgID: RpcResp.ClientMsgID, SendTime: RpcResp.SendTime}}
 | 
			
		||||
	log.Info(params.OperationID, "ManagementSendMsg return", resp)
 | 
			
		||||
	c.JSON(http.StatusOK, resp)
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -38,7 +38,7 @@ func Login(c *gin.Context) {
 | 
			
		||||
 | 
			
		||||
	r, err := im_mysql_model.GetRegister(account)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.NewError(params.OperationID, "user have not register", params.Password, account)
 | 
			
		||||
		log.NewError(params.OperationID, "user have not register", params.Password, account, err.Error())
 | 
			
		||||
		c.JSON(http.StatusOK, gin.H{"errCode": constant.NotRegistered, "errMsg": "Mobile phone number is not registered"})
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -18,6 +18,6 @@ func saveUserChat(uid string, msg *pbMsg.MsgDataToMQ) error {
 | 
			
		||||
	pbSaveData := pbMsg.MsgDataToDB{}
 | 
			
		||||
	pbSaveData.MsgData = msg.MsgData
 | 
			
		||||
	log.NewInfo(msg.OperationID, "IncrUserSeq cost time", utils.GetCurrentTimestampByMill()-time)
 | 
			
		||||
	return db.DB.SaveUserChat(uid, pbSaveData.MsgData.SendTime, &pbSaveData)
 | 
			
		||||
	return db.DB.SaveUserChatMongo2(uid, pbSaveData.MsgData.SendTime, &pbSaveData)
 | 
			
		||||
//	return db.DB.SaveUserChatMongo2(uid, pbSaveData.MsgData.SendTime, &pbSaveData)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -748,6 +748,7 @@ func (s *groupServer) GetGroups(_ context.Context, req *pbGroup.GetGroupsReq) (*
 | 
			
		||||
				OwnerUserID:   v.CreatorUserID,
 | 
			
		||||
				Status:        v.Status,
 | 
			
		||||
				CreatorUserID: v.CreatorUserID,
 | 
			
		||||
				CreateTime:    uint32(v.CreateTime.Unix()),
 | 
			
		||||
			},
 | 
			
		||||
			GroupMasterId:   groupMember.UserID,
 | 
			
		||||
			GroupMasterName: groupMember.Nickname,
 | 
			
		||||
@ -892,10 +893,9 @@ func (s *groupServer) AddGroupMembersCMS(_ context.Context, req *pbGroup.AddGrou
 | 
			
		||||
			resp.Failed = append(resp.Failed, userId)
 | 
			
		||||
		} else {
 | 
			
		||||
			resp.Success = append(resp.Success, userId)
 | 
			
		||||
			chat.MemberInvitedNotification(req.OperationId, req.GroupId, req.OpUserId, "admin add", resp.Success)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	chat.MemberInvitedNotification(req.OperationId, req.GroupId, req.OpUserId, "admin add you to group", resp.Success)
 | 
			
		||||
	return resp, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -39,8 +39,8 @@ func (rpc *rpcChat) GetMaxAndMinSeq(_ context.Context, in *pbMsg.GetMaxAndMinSeq
 | 
			
		||||
func (rpc *rpcChat) PullMessageBySeqList(_ context.Context, in *open_im_sdk.PullMessageBySeqListReq) (*open_im_sdk.PullMessageBySeqListResp, error) {
 | 
			
		||||
	log.NewInfo(in.OperationID, "rpc PullMessageBySeqList is arriving", in.String())
 | 
			
		||||
	resp := new(open_im_sdk.PullMessageBySeqListResp)
 | 
			
		||||
	msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList, in.OperationID)
 | 
			
		||||
//	msgList, err := commonDB.DB.GetMsgBySeqListMongo2(in.UserID, in.SeqList, in.OperationID)
 | 
			
		||||
	//msgList, err := commonDB.DB.GetMsgBySeqList(in.UserID, in.SeqList, in.OperationID)
 | 
			
		||||
	msgList, err := commonDB.DB.GetMsgBySeqListMongo2(in.UserID, in.SeqList, in.OperationID)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		log.ErrorByKv("PullMessageBySeqList data error", in.OperationID, in.String())
 | 
			
		||||
		resp.ErrCode = 201
 | 
			
		||||
 | 
			
		||||
@ -17,7 +17,7 @@ func (t *TimeTask) timedDeleteUserChat() {
 | 
			
		||||
	for i := 0; i < count; i++ {
 | 
			
		||||
		time.Sleep(10 * time.Millisecond)
 | 
			
		||||
		uid, _ := db.DB.MgoSkipUID(i)
 | 
			
		||||
		db.DB.DelUserChat(uid)
 | 
			
		||||
		db.DB.DelUserChatMongo2(uid)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	go func() {
 | 
			
		||||
 | 
			
		||||
@ -2,6 +2,7 @@ package base_info
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	pbRelay "Open_IM/pkg/proto/relay"
 | 
			
		||||
	"Open_IM/pkg/proto/sdk_ws"
 | 
			
		||||
	pbUser "Open_IM/pkg/proto/user"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@ -36,3 +37,8 @@ type AccountCheckResp struct {
 | 
			
		||||
	CommResp
 | 
			
		||||
	ResultList []*pbUser.AccountCheckResp_SingleUserStatus `json:"data"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ManagementSendMsgResp struct {
 | 
			
		||||
	CommResp
 | 
			
		||||
	ResultList server_api_params.UserSendMsgResp `json:"data"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -10,8 +10,8 @@ type GetUsersInfoReq struct {
 | 
			
		||||
}
 | 
			
		||||
type GetUsersInfoResp struct {
 | 
			
		||||
	CommResp
 | 
			
		||||
	UserInfoList []*open_im_sdk.PublicUserInfo
 | 
			
		||||
	Data         []map[string]interface{} `json:"data"`
 | 
			
		||||
	UserInfoList []*open_im_sdk.PublicUserInfo `json:"-"`
 | 
			
		||||
	Data         []map[string]interface{}      `json:"data"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type UpdateSelfUserInfoReq struct {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								pkg/call_back_struct/common.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								pkg/call_back_struct/common.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
package call_back_struct
 | 
			
		||||
							
								
								
									
										1
									
								
								pkg/call_back_struct/message.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								pkg/call_back_struct/message.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
package call_back_struct
 | 
			
		||||
@ -3,15 +3,20 @@ package db
 | 
			
		||||
import (
 | 
			
		||||
	"Open_IM/pkg/common/config"
 | 
			
		||||
	"Open_IM/pkg/common/log"
 | 
			
		||||
//	"context"
 | 
			
		||||
//	"fmt"
 | 
			
		||||
	"Open_IM/pkg/utils"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"go.mongodb.org/mongo-driver/mongo/options"
 | 
			
		||||
 | 
			
		||||
	//	"context"
 | 
			
		||||
	//	"fmt"
 | 
			
		||||
	"github.com/garyburd/redigo/redis"
 | 
			
		||||
	"gopkg.in/mgo.v2"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"context"
 | 
			
		||||
	//"go.mongodb.org/mongo-driver/bson"
 | 
			
		||||
	"go.mongodb.org/mongo-driver/mongo"
 | 
			
		||||
//	"go.mongodb.org/mongo-driver/mongo/options"
 | 
			
		||||
	//	"go.mongodb.org/mongo-driver/mongo/options"
 | 
			
		||||
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@ -29,61 +34,60 @@ func key(dbAddress, dbName string) string {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	var mgoSession *mgo.Session
 | 
			
		||||
	//var mgoSession *mgo.Session
 | 
			
		||||
	var mongoClient *mongo.Client
 | 
			
		||||
	var err1 error
 | 
			
		||||
	//mysql init
 | 
			
		||||
	initMysqlDB()
 | 
			
		||||
	// mongo init
 | 
			
		||||
	// "mongodb://sysop:moon@localhost/records"
 | 
			
		||||
	// uri := "mongodb://user:pass@sample.host:27017/?maxPoolSize=20&w=majority"
 | 
			
		||||
	//uri := fmt.Sprintf("mongodb://%s:%s@%s/%s/?maxPoolSize=%d",
 | 
			
		||||
	//	config.Config.Mongo.DBUserName, config.Config.Mongo.DBPassword,
 | 
			
		||||
	//	config.Config.Mongo.DBAddress[0],config.Config.Mongo.DBDatabase,
 | 
			
		||||
	//	config.Config.Mongo.DBMaxPoolSize)
 | 
			
		||||
	uri := "mongodb://sample.host:27017/?maxPoolSize=20&w=majority"
 | 
			
		||||
	uri = fmt.Sprintf("mongodb://%s/%s/?maxPoolSize=%d",
 | 
			
		||||
		config.Config.Mongo.DBAddress[0],config.Config.Mongo.DBDatabase,
 | 
			
		||||
		config.Config.Mongo.DBMaxPoolSize)
 | 
			
		||||
 | 
			
		||||
	mongoClient, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
 | 
			
		||||
	if err != nil{
 | 
			
		||||
		log.NewError(" mongo.Connect  failed, try ", utils.GetSelfFuncName(), err.Error(), uri)
 | 
			
		||||
		time.Sleep(time.Duration(30) * time.Second)
 | 
			
		||||
		mongoClient, err1 = mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
 | 
			
		||||
		if err1 != nil {
 | 
			
		||||
			log.NewError(" mongo.Connect retry failed, panic", err.Error(), uri)
 | 
			
		||||
			panic(err1.Error())
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	log.NewInfo("0", utils.GetSelfFuncName(), "mongo driver client init success")
 | 
			
		||||
	DB.mongoClient = mongoClient
 | 
			
		||||
 | 
			
		||||
	//mgoDailInfo := &mgo.DialInfo{
 | 
			
		||||
	//	Addrs:     config.Config.Mongo.DBAddress,
 | 
			
		||||
	//	Direct:    config.Config.Mongo.DBDirect,
 | 
			
		||||
	//	Timeout:   time.Second * time.Duration(config.Config.Mongo.DBTimeout),
 | 
			
		||||
	//	Database:  config.Config.Mongo.DBDatabase,
 | 
			
		||||
	//	Source:    config.Config.Mongo.DBSource,
 | 
			
		||||
	//	Username:  config.Config.Mongo.DBUserName,
 | 
			
		||||
	//	Password:  config.Config.Mongo.DBPassword,
 | 
			
		||||
	//	PoolLimit: config.Config.Mongo.DBMaxPoolSize,
 | 
			
		||||
	//}
 | 
			
		||||
	//mgoSession, err = mgo.DialWithInfo(mgoDailInfo)
 | 
			
		||||
	//
 | 
			
		||||
	//mongoClient, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
 | 
			
		||||
	//if err != nil{
 | 
			
		||||
	//	log.NewError(" mongo.Connect  failed, try ", err.Error(), uri)
 | 
			
		||||
	//	time.Sleep(time.Duration(30) * time.Second)
 | 
			
		||||
	//	mongoClient, err1 = mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))
 | 
			
		||||
	//if err != nil {
 | 
			
		||||
	//
 | 
			
		||||
	//	mgoSession, err1 = mgo.DialWithInfo(mgoDailInfo)
 | 
			
		||||
	//	if err1 != nil {
 | 
			
		||||
	//		log.NewError(" mongo.Connect  failed, panic", err.Error(), uri)
 | 
			
		||||
	//		log.NewError(" mongo.Connect  failed, panic", err.Error())
 | 
			
		||||
	//		panic(err1.Error())
 | 
			
		||||
	//	}
 | 
			
		||||
	//}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	mgoDailInfo := &mgo.DialInfo{
 | 
			
		||||
		Addrs:     config.Config.Mongo.DBAddress,
 | 
			
		||||
		Direct:    config.Config.Mongo.DBDirect,
 | 
			
		||||
		Timeout:   time.Second * time.Duration(config.Config.Mongo.DBTimeout),
 | 
			
		||||
		Database:  config.Config.Mongo.DBDatabase,
 | 
			
		||||
		Source:    config.Config.Mongo.DBSource,
 | 
			
		||||
		Username:  config.Config.Mongo.DBUserName,
 | 
			
		||||
		Password:  config.Config.Mongo.DBPassword,
 | 
			
		||||
		PoolLimit: config.Config.Mongo.DBMaxPoolSize,
 | 
			
		||||
	}
 | 
			
		||||
	mgoSession, err := mgo.DialWithInfo(mgoDailInfo)
 | 
			
		||||
 | 
			
		||||
	if err != nil {
 | 
			
		||||
 | 
			
		||||
		mgoSession, err1 = mgo.DialWithInfo(mgoDailInfo)
 | 
			
		||||
		if err1 != nil {
 | 
			
		||||
			log.NewError(" mongo.Connect  failed, panic", err.Error())
 | 
			
		||||
			panic(err1.Error())
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	DB.mongoClient = mongoClient
 | 
			
		||||
	DB.mgoSession = mgoSession
 | 
			
		||||
	DB.mgoSession.SetMode(mgo.Monotonic, true)
 | 
			
		||||
	c := DB.mgoSession.DB(config.Config.Mongo.DBDatabase).C(cChat)
 | 
			
		||||
	err = c.EnsureIndexKey("uid")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		panic(err.Error())
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	//DB.mgoSession = mgoSession
 | 
			
		||||
	//DB.mgoSession.SetMode(mgo.Monotonic, true)
 | 
			
		||||
	//c := DB.mgoSession.DB(config.Config.Mongo.DBDatabase).C(cChat)
 | 
			
		||||
	//err = c.EnsureIndexKey("uid")
 | 
			
		||||
	//if err != nil {
 | 
			
		||||
	//	panic(err.Error())
 | 
			
		||||
	//}
 | 
			
		||||
	//
 | 
			
		||||
 | 
			
		||||
	// redis pool init
 | 
			
		||||
	DB.redisPool = &redis.Pool{
 | 
			
		||||
 | 
			
		||||
@ -65,7 +65,12 @@ func (d *DataBases) GetMinSeqFromMongo(uid string) (MinSeq uint32, err error) {
 | 
			
		||||
	//return MinSeq, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d *DataBases) GetMinSeqFromMongo2(uid string) (MinSeq uint32, err error) {
 | 
			
		||||
	return 1, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (d *DataBases) GetMsgBySeqList(uid string, seqList []uint32, operationID string) (seqMsg []*open_im_sdk.MsgData, err error) {
 | 
			
		||||
	log.NewInfo(operationID, utils.GetSelfFuncName(), uid, seqList)
 | 
			
		||||
	var hasSeqList []uint32
 | 
			
		||||
	singleCount := 0
 | 
			
		||||
	session := d.mgoSession.Clone()
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,7 @@ func GetRegister(account string) (*db.Register, error) {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
	var r db.Register
 | 
			
		||||
	return &r, dbConn.Table("registers").Where("account = ?",
 | 
			
		||||
	return &r, dbConn.Debug().Table("registers").Where("account = ?",
 | 
			
		||||
		account).Take(&r).Error
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -30,7 +30,7 @@ func SetPassword(account, password, ex string) error {
 | 
			
		||||
 | 
			
		||||
func ResetPassword(account, password string) error {
 | 
			
		||||
	r := db.Register{
 | 
			
		||||
		Password:password,
 | 
			
		||||
		Password: password,
 | 
			
		||||
	}
 | 
			
		||||
	dbConn, err := db.DB.MysqlDB.DefaultGormDB()
 | 
			
		||||
	dbConn.LogMode(true)
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user