/* ** description(""). ** copyright('Open_IM,www.Open_IM.io'). ** author("fg,Gordon@tuoyun.net"). ** time(2021/5/21 15:29). */ package gate import ( "Open_IM/pkg/common/constant" "Open_IM/pkg/common/log" open_im_sdk "Open_IM/pkg/proto/sdk_ws" "github.com/golang/protobuf/proto" ) type Req struct { ReqIdentifier int32 `json:"reqIdentifier" validate:"required"` Token string `json:"token" ` SendID string `json:"sendID" validate:"required"` OperationID string `json:"operationID" validate:"required"` MsgIncr string `json:"msgIncr" validate:"required"` Data []byte `json:"data"` } type Resp struct { ReqIdentifier int32 `json:"reqIdentifier"` MsgIncr string `json:"msgIncr"` OperationID string `json:"operationID"` ErrCode int32 `json:"errCode"` ErrMsg string `json:"errMsg"` Data []byte `json:"data"` } type SeqData struct { SeqBegin int64 `mapstructure:"seqBegin" validate:"required"` SeqEnd int64 `mapstructure:"seqEnd" validate:"required"` } type MsgData struct { PlatformID int32 `mapstructure:"platformID" validate:"required"` SessionType int32 `mapstructure:"sessionType" validate:"required"` MsgFrom int32 `mapstructure:"msgFrom" validate:"required"` ContentType int32 `mapstructure:"contentType" validate:"required"` RecvID string `mapstructure:"recvID" validate:"required"` ForceList []string `mapstructure:"forceList"` Content string `mapstructure:"content" validate:"required"` Options map[string]interface{} `mapstructure:"options" validate:"required"` ClientMsgID string `mapstructure:"clientMsgID" validate:"required"` OfflineInfo map[string]interface{} `mapstructure:"offlineInfo" validate:"required"` Ext map[string]interface{} `mapstructure:"ext"` } type MaxSeqResp struct { MaxSeq int64 `json:"maxSeq"` } type PullMessageResp struct { } type SeqListData struct { SeqList []int64 `mapstructure:"seqList" validate:"required"` } func (ws *WServer) argsValidate(m *Req, r int32) (isPass bool, errCode int32, errMsg string, returnData interface{}) { switch r { case constant.WSSendMsg: 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) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { log.ErrorByKv("data args validate err", "", "err", err.Error(), "reqIdentifier", r) return false, 204, err.Error(), nil } return true, 0, "", data case constant.WSSendSignalMsg: data := open_im_sdk.SignalReq{} if err := proto.Unmarshal(m.Data, &data); err != nil { log.ErrorByKv("Decode Data struct err", "", "err", err.Error(), "reqIdentifier", r) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { log.ErrorByKv("data args validate err", "", "err", err.Error(), "reqIdentifier", r) return false, 204, err.Error(), nil } return true, 0, "", &data case constant.WSPullMsgBySeqList: data := open_im_sdk.PullMessageBySeqListReq{} if err := proto.Unmarshal(m.Data, &data); err != nil { log.ErrorByKv("Decode Data struct err", "", "err", err.Error(), "reqIdentifier", r) return false, 203, err.Error(), nil } if err := validate.Struct(data); err != nil { log.ErrorByKv("data args validate err", "", "err", err.Error(), "reqIdentifier", r) return false, 204, err.Error(), nil } return true, 0, "", data default: } return false, 204, "args err", nil //b := bytes.NewBuffer(m.Data) //dec := gob.NewDecoder(b) //err := dec.Decode(&data) //if err != nil { // log.ErrorByKv("Decode Data struct err", "", "err", err.Error(), "reqIdentifier", r) // return false, 203, err.Error(), nil //} //if err := mapstructure.WeakDecode(m.Data, &data); err != nil { // log.ErrorByKv("map to Data struct err", "", "err", err.Error(), "reqIdentifier", r) // return false, 203, err.Error(), nil //} else } //func (ws *WServer) signalMessageAssemble(s *open_im_sdk.SignalReq, operationID string) (isPass bool, errCode int32, errMsg string, r *open_im_sdk.SignalResp, msgData *open_im_sdk.MsgData) { // var msg open_im_sdk.MsgData // var resp open_im_sdk.SignalResp // media := open_im_media.NewMedia() // msg.MsgFrom = constant.UserMsgType // msg.ContentType = constant.SignalingNotification // reqData, e := proto.Marshal(s) // if e != nil { // return false, 201, e.Error(), nil, nil // } // msg.Content = reqData // msg.CreateTime = utils.GetCurrentTimestampByMill() // options := make(map[string]bool, 6) // utils.SetSwitchFromOptions(options, constant.IsHistory, false) // utils.SetSwitchFromOptions(options, constant.IsPersistent, false) // utils.SetSwitchFromOptions(options, constant.IsSenderSync, true) // utils.SetSwitchFromOptions(options, constant.IsConversationUpdate, false) // utils.SetSwitchFromOptions(options, constant.IsSenderConversationUpdate, false) // utils.SetSwitchFromOptions(options, constant.IsUnreadCount, false) // utils.SetSwitchFromOptions(options, constant.IsOfflinePush, true) // msg.Options = options // switch payload := s.Payload.(type) { // case *open_im_sdk.SignalReq_Invite: // token, liveURL, err2 := media.GetJoinToken(payload.Invite.Invitation.RoomID, payload.Invite.Invitation.InviterUserID, operationID, payload.Invite.Participant) // if err2 != nil { // return false, 202, err2.Error(), nil, nil // } // invite := open_im_sdk.SignalResp_Invite{&open_im_sdk.SignalInviteReply{ // Token: token, // RoomID: payload.Invite.Invitation.RoomID, // LiveURL: liveURL, // }} // resp.Payload = &invite // msg.SenderPlatformID = payload.Invite.Invitation.PlatformID // msg.SessionType = payload.Invite.Invitation.SessionType // msg.OfflinePushInfo = payload.Invite.OfflinePushInfo // msg.SendID = payload.Invite.Invitation.InviterUserID // if len(payload.Invite.Invitation.InviteeUserIDList) > 0 { // msg.RecvID = payload.Invite.Invitation.InviteeUserIDList[0] // } else { // return false, 203, errors.New("InviteeUserIDList is null").Error(), nil, nil // } // msg.ClientMsgID = utils.GetMsgID(payload.Invite.Invitation.InviterUserID) // return true, 0, "", &resp, &msg // case *open_im_sdk.SignalReq_InviteInGroup: // token, liveURL, err2 := media.GetJoinToken(payload.InviteInGroup.Invitation.RoomID, payload.InviteInGroup.Invitation.InviterUserID, operationID, payload.InviteInGroup.Participant) // if err2 != nil { // return false, 204, err2.Error(), nil, nil // } // inviteGroup := open_im_sdk.SignalResp_InviteInGroup{&open_im_sdk.SignalInviteInGroupReply{ // RoomID: payload.InviteInGroup.Invitation.RoomID, // Token: token, // LiveURL: liveURL, // }} // resp.Payload = &inviteGroup // msg.SenderPlatformID = payload.InviteInGroup.Invitation.PlatformID // msg.SessionType = payload.InviteInGroup.Invitation.SessionType // msg.OfflinePushInfo = payload.InviteInGroup.OfflinePushInfo // msg.SendID = payload.InviteInGroup.Invitation.InviterUserID // if len(payload.InviteInGroup.Invitation.InviteeUserIDList) > 0 { // msg.GroupID = payload.InviteInGroup.Invitation.GroupID // } else { // return false, 205, errors.New("InviteeUserIDList is null").Error(), nil, nil // } // msg.ClientMsgID = utils.GetMsgID(payload.InviteInGroup.Invitation.InviterUserID) // // return true, 0, "", &resp, &msg // case *open_im_sdk.SignalReq_Cancel: // cancel := open_im_sdk.SignalResp_Cancel{&open_im_sdk.SignalCancelReply{}} // resp.Payload = &cancel // msg.OfflinePushInfo = payload.Cancel.OfflinePushInfo // msg.SendID = payload.Cancel.Invitation.InviterUserID // msg.SenderPlatformID = payload.Cancel.Invitation.PlatformID // msg.SessionType = payload.Cancel.Invitation.SessionType // if len(payload.Cancel.Invitation.InviteeUserIDList) > 0 { // switch payload.Cancel.Invitation.SessionType { // case constant.SingleChatType: // msg.RecvID = payload.Cancel.Invitation.InviteeUserIDList[0] // case constant.GroupChatType: // msg.GroupID = payload.Cancel.Invitation.GroupID // } // } else { // return false, 206, errors.New("InviteeUserIDList is null").Error(), nil, nil // } // msg.ClientMsgID = utils.GetMsgID(payload.Cancel.OpUserID) // return true, 0, "", &resp, &msg // case *open_im_sdk.SignalReq_Accept: // token, liveURL, err2 := media.GetJoinToken(payload.Accept.Invitation.RoomID, payload.Accept.OpUserID, operationID, payload.Accept.Participant) // if err2 != nil { // return false, 207, err2.Error(), nil, nil // } // accept := open_im_sdk.SignalResp_Accept{&open_im_sdk.SignalAcceptReply{ // Token: token, // LiveURL: liveURL, // RoomID: payload.Accept.Invitation.RoomID, // }} // resp.Payload = &accept // msg.OfflinePushInfo = payload.Accept.OfflinePushInfo // msg.SendID = payload.Accept.OpUserID // msg.SenderPlatformID = payload.Accept.Invitation.PlatformID // msg.SessionType = payload.Accept.Invitation.SessionType // if len(payload.Accept.Invitation.InviteeUserIDList) > 0 { // switch payload.Accept.Invitation.SessionType { // case constant.SingleChatType: // msg.RecvID = payload.Accept.Invitation.InviterUserID // case constant.GroupChatType: // msg.GroupID = payload.Accept.Invitation.GroupID // } // } else { // return false, 208, errors.New("InviteeUserIDList is null").Error(), nil, nil // } // msg.ClientMsgID = utils.GetMsgID(payload.Accept.OpUserID) // return true, 0, "", &resp, &msg // case *open_im_sdk.SignalReq_HungUp: // case *open_im_sdk.SignalReq_Reject: // reject := open_im_sdk.SignalResp_Reject{&open_im_sdk.SignalRejectReply{}} // resp.Payload = &reject // msg.OfflinePushInfo = payload.Reject.OfflinePushInfo // msg.SendID = payload.Reject.OpUserID // msg.SenderPlatformID = payload.Reject.Invitation.PlatformID // msg.SessionType = payload.Reject.Invitation.SessionType // if len(payload.Reject.Invitation.InviteeUserIDList) > 0 { // switch payload.Reject.Invitation.SessionType { // case constant.SingleChatType: // msg.RecvID = payload.Reject.Invitation.InviterUserID // case constant.GroupChatType: // msg.GroupID = payload.Reject.Invitation.GroupID // } // } else { // return false, 209, errors.New("InviteeUserIDList is null").Error(), nil, nil // } // msg.ClientMsgID = utils.GetMsgID(payload.Reject.OpUserID) // return true, 0, "", &resp, &msg // } // return false, 210, errors.New("InviteeUserIDList is null").Error(), nil, nil //}