diff --git a/internal/cms_api/group/group.go b/internal/cms_api/group/group.go index d402ea581..c7013c2bd 100644 --- a/internal/cms_api/group/group.go +++ b/internal/cms_api/group/group.go @@ -128,7 +128,7 @@ func GetGroupByName(c *gin.Context) { func CreateGroup(c *gin.Context) { var ( req cms_api_struct.CreateGroupRequest - _ cms_api_struct.CreateGroupResponse + _ cms_api_struct.CreateGroupResponse reqPb pbGroup.CreateGroupReq ) if err := c.BindJSON(&req); err != nil { @@ -253,9 +253,9 @@ func OpenPrivateChat(c *gin.Context) { func GetGroupMembers(c *gin.Context) { var ( - req cms_api_struct.GetGroupMembersRequest + req cms_api_struct.GetGroupMembersRequest reqPb pbGroup.GetGroupMembersCMSReq - resp cms_api_struct.GetGroupMembersResponse + resp cms_api_struct.GetGroupMembersResponse ) if err := c.ShouldBindQuery(&req); err != nil { log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "ShouldBindQuery failed ", err.Error()) @@ -286,21 +286,20 @@ func GetGroupMembers(c *gin.Context) { MemberPosition: int(groupMembers.RoleLevel), MemberNickName: groupMembers.Nickname, MemberId: groupMembers.UserID, - JoinTime: utils.UnixSecondToTime(groupMembers.JoinTime).String(), + JoinTime: utils.UnixSecondToTime(int64(groupMembers.JoinTime)).String(), }) } openIMHttp.RespHttp200(c, constant.OK, resp) } - func AddGroupMembers(c *gin.Context) { var ( - req cms_api_struct.RemoveGroupMembersRequest - resp cms_api_struct.RemoveGroupMembersResponse + req cms_api_struct.RemoveGroupMembersRequest + resp cms_api_struct.RemoveGroupMembersResponse reqPb pbGroup.AddGroupMembersCMSReq ) if err := c.BindJSON(&req); err != nil { - log.NewError(reqPb.OperationId, utils.GetSelfFuncName(),"BindJSON failed ", err.Error()) + log.NewError(reqPb.OperationId, utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } @@ -321,12 +320,12 @@ func AddGroupMembers(c *gin.Context) { func RemoveGroupMembers(c *gin.Context) { var ( - req cms_api_struct.RemoveGroupMembersRequest - resp cms_api_struct.RemoveGroupMembersResponse + req cms_api_struct.RemoveGroupMembersRequest + resp cms_api_struct.RemoveGroupMembersResponse reqPb pbGroup.RemoveGroupMembersCMSReq ) if err := c.BindJSON(&req); err != nil { - log.NewError(reqPb.OperationID, utils.GetSelfFuncName(),"BindJSON failed ", err.Error()) + log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } @@ -347,12 +346,12 @@ func RemoveGroupMembers(c *gin.Context) { func DeleteGroup(c *gin.Context) { var ( - req cms_api_struct.DeleteGroupRequest - _ cms_api_struct.DeleteGroupResponse + req cms_api_struct.DeleteGroupRequest + _ cms_api_struct.DeleteGroupResponse reqPb pbGroup.DeleteGroupReq ) if err := c.BindJSON(&req); err != nil { - log.NewError(reqPb.OperationID, utils.GetSelfFuncName(),"BindJSON failed ", err.Error()) + log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } @@ -370,12 +369,12 @@ func DeleteGroup(c *gin.Context) { func SetGroupMaster(c *gin.Context) { var ( - req cms_api_struct.SetGroupMasterRequest - _ cms_api_struct.SetGroupMasterResponse + req cms_api_struct.SetGroupMasterRequest + _ cms_api_struct.SetGroupMasterResponse reqPb pbGroup.OperateUserRoleReq ) if err := c.BindJSON(&req); err != nil { - log.NewError(reqPb.OperationID, utils.GetSelfFuncName(),"BindJSON failed ", err.Error()) + log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error()) openIMHttp.RespHttp200(c, constant.ErrArgs, nil) return } @@ -395,8 +394,8 @@ func SetGroupMaster(c *gin.Context) { func SetGroupOrdinaryUsers(c *gin.Context) { var ( - req cms_api_struct.SetGroupMemberRequest - _ cms_api_struct.AdminLoginResponse + req cms_api_struct.SetGroupMemberRequest + _ cms_api_struct.AdminLoginResponse reqPb pbGroup.OperateUserRoleReq ) if err := c.BindJSON(&req); err != nil { @@ -420,8 +419,8 @@ func SetGroupOrdinaryUsers(c *gin.Context) { func AlterGroupInfo(c *gin.Context) { var ( - req cms_api_struct.AlterGroupInfoRequest - _ cms_api_struct.SetGroupMasterResponse + req cms_api_struct.AlterGroupInfoRequest + _ cms_api_struct.SetGroupMasterResponse reqPb pbGroup.SetGroupInfoReq ) if err := c.BindJSON(&req); err != nil { @@ -431,12 +430,12 @@ func AlterGroupInfo(c *gin.Context) { } reqPb.OpUserID = c.MustGet("userID").(string) reqPb.GroupInfo = &commonPb.GroupInfo{ - GroupID: req.GroupID, - GroupName: req.GroupName, - Introduction: req.Introduction, - Notification: req.Notification, - FaceURL: req.ProfilePhoto, - GroupType: int32(req.GroupType), + GroupID: req.GroupID, + GroupName: req.GroupName, + Introduction: req.Introduction, + Notification: req.Notification, + FaceURL: req.ProfilePhoto, + GroupType: int32(req.GroupType), } etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName) client := pbGroup.NewGroupClient(etcdConn) @@ -447,4 +446,4 @@ func AlterGroupInfo(c *gin.Context) { return } openIMHttp.RespHttp200(c, constant.OK, nil) -} \ No newline at end of file +} diff --git a/internal/msg_gateway/gate/logic.go b/internal/msg_gateway/gate/logic.go index df3b1a356..8e5fdcdac 100644 --- a/internal/msg_gateway/gate/logic.go +++ b/internal/msg_gateway/gate/logic.go @@ -52,6 +52,8 @@ func (ws *WServer) msgParse(conn *UserConn, binaryMsg []byte) { ws.getSeqReq(conn, &m) case constant.WSSendMsg: ws.sendMsgReq(conn, &m) + case constant.WSSendSignalMsg: + ws.sendSignalMsgReq(conn, &m) case constant.WSPullMsgBySeqList: ws.pullMsgBySeqListReq(conn, &m) default: @@ -193,6 +195,57 @@ func (ws *WServer) sendMsgResp(conn *UserConn, m *Req, pb *pbChat.SendMsgResp) { ws.sendMsg(conn, mReply) } +func (ws *WServer) sendSignalMsgReq(conn *UserConn, m *Req) { + sendMsgCount++ + log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq start", m.MsgIncr, m.ReqIdentifier, m.SendID) + nReply := new(pbChat.SendMsgResp) + isPass, errCode, errMsg, pData := ws.argsValidate(m, constant.WSSendMsg) + if isPass { + data := pData.(sdk_ws.MsgData) + pbData := pbChat.SendMsgReq{ + Token: m.Token, + OperationID: m.OperationID, + MsgData: &data, + } + log.NewInfo(m.OperationID, "Ws call success to sendSignalMsgReq middle", m.ReqIdentifier, m.SendID, m.MsgIncr, data) + etcdConn := getcdv3.GetConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOfflineMessageName) + client := pbChat.NewChatClient(etcdConn) + reply, err := client.SendMsg(context.Background(), &pbData) + if err != nil { + log.NewError(pbData.OperationID, "rpc sendMsg err", err.Error()) + nReply.ErrCode = 200 + nReply.ErrMsg = err.Error() + ws.sendSignalMsgResp(conn, m, nReply) + } else { + log.NewInfo(pbData.OperationID, "rpc call success to sendMsgReq", reply.String()) + ws.sendSignalMsgResp(conn, m, reply) + } + + } else { + nReply.ErrCode = errCode + nReply.ErrMsg = errMsg + ws.sendSignalMsgResp(conn, m, nReply) + } + +} +func (ws *WServer) sendSignalMsgResp(conn *UserConn, m *Req, pb *pbChat.SendMsgResp) { + // := make(map[string]interface{}) + + var mReplyData sdk_ws.UserSendMsgResp + mReplyData.ClientMsgID = pb.GetClientMsgID() + mReplyData.ServerMsgID = pb.GetServerMsgID() + mReplyData.SendTime = pb.GetSendTime() + b, _ := proto.Marshal(&mReplyData) + mReply := Resp{ + ReqIdentifier: m.ReqIdentifier, + MsgIncr: m.MsgIncr, + ErrCode: pb.GetErrCode(), + ErrMsg: pb.GetErrMsg(), + OperationID: m.OperationID, + Data: b, + } + ws.sendMsg(conn, mReply) +} func (ws *WServer) sendMsg(conn *UserConn, mReply interface{}) { var b bytes.Buffer enc := gob.NewEncoder(&b) diff --git a/internal/msg_gateway/gate/validate.go b/internal/msg_gateway/gate/validate.go index fe1411a62..c763ff1b2 100644 --- a/internal/msg_gateway/gate/validate.go +++ b/internal/msg_gateway/gate/validate.go @@ -58,7 +58,7 @@ type SeqListData struct { func (ws *WServer) argsValidate(m *Req, r int32) (isPass bool, errCode int32, errMsg string, returnData interface{}) { switch r { - case constant.WSSendMsg: + case constant.WSSendMsg | constant.WSSendSignalMsg: data := open_im_sdk.MsgData{} if err := proto.Unmarshal(m.Data, &data); err != nil { log.ErrorByKv("Decode Data struct err", "", "err", err.Error(), "reqIdentifier", r) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 1a992cfa3..6b5c872c4 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -395,7 +395,7 @@ func (s *groupServer) GetGroupMembersInfo(ctx context.Context, req *pbGroup.GetG continue } else { utils.CopyStructFields(&memberNode, memberInfo) - memberNode.JoinTime = memberInfo.JoinTime.Unix() + memberNode.JoinTime = int32(memberInfo.JoinTime.Unix()) resp.MemberList = append(resp.MemberList, &memberNode) } } @@ -827,7 +827,7 @@ func (s *groupServer) GetGroupMembersCMS(_ context.Context, req *pbGroup.GetGrou GroupID: req.GroupId, UserID: groupMember.UserID, RoleLevel: groupMember.RoleLevel, - JoinTime: groupMember.JoinTime.Unix(), + JoinTime: int32(groupMember.JoinTime.Unix()), Nickname: groupMember.Nickname, FaceURL: groupMember.FaceURL, JoinSource: groupMember.JoinSource, diff --git a/pkg/common/constant/constant.go b/pkg/common/constant/constant.go index 199a1917a..7e1971c64 100644 --- a/pkg/common/constant/constant.go +++ b/pkg/common/constant/constant.go @@ -20,8 +20,10 @@ const ( WSGetNewestSeq = 1001 WSPullMsgBySeqList = 1002 WSSendMsg = 1003 + WSSendSignalMsg = 1004 WSPushMsg = 2001 WSKickOnlineMsg = 2002 + WsLogoutMsg = 2003 WSDataError = 3001 ///ContentType @@ -139,16 +141,16 @@ const ( //callbackCommand CallbackBeforeSendSingleMsgCommand = "callbackBeforeSendSingleMsgCommand" - CallbackAfterSendSingleMsgCommand = "callbackAfterSendSingleMsgCommand" - CallbackBeforeSendGroupMsgCommand = "callbackBeforeSendGroupMsgCommand" - CallbackAfterSendGroupMsgCommand = "callbackAfterSendGroupMsgCommand" - CallbackWordFilterCommand = "callbackWordFilterCommand" + CallbackAfterSendSingleMsgCommand = "callbackAfterSendSingleMsgCommand" + CallbackBeforeSendGroupMsgCommand = "callbackBeforeSendGroupMsgCommand" + CallbackAfterSendGroupMsgCommand = "callbackAfterSendGroupMsgCommand" + CallbackWordFilterCommand = "callbackWordFilterCommand" //callback actionCode - ActionAllow = 0 + ActionAllow = 0 ActionForbidden = 1 //callback callbackHandleCode CallbackHandleSuccess = 0 - CallbackHandleFailed = 1 + CallbackHandleFailed = 1 ) var ContentType2PushContent = map[int64]string{ diff --git a/pkg/common/utils/utils.go b/pkg/common/utils/utils.go index db9db5461..8e7346cc1 100644 --- a/pkg/common/utils/utils.go +++ b/pkg/common/utils/utils.go @@ -117,7 +117,7 @@ func GroupMemberDBCopyOpenIM(dst *open_im_sdk.GroupMemberFullInfo, src *db.Group dst.AppMangerLevel = 1 } - dst.JoinTime = src.JoinTime.Unix() + dst.JoinTime = int32(src.JoinTime.Unix()) return nil }