@ -7,12 +7,10 @@
package gate
import (
"Open_IM/internal/msg_gateway/gate/open_im_media"
"Open_IM/pkg/common/constant"
"Open_IM/pkg/common/log"
pbRtc "Open_IM/pkg/proto/rtc"
open_im_sdk "Open_IM/pkg/proto/sdk_ws"
"Open_IM/pkg/utils"
"errors"
"github.com/golang/protobuf/proto"
)
@ -74,7 +72,7 @@ func (ws *WServer) argsValidate(m *Req, r int32) (isPass bool, errCode int32, er
}
return true , 0 , "" , data
case constant . WSSendSignalMsg :
data := open_im_sdk . SignalReq { }
data := pbRtc . 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
@ -117,139 +115,139 @@ func (ws *WServer) argsValidate(m *Req, r int32) (isPass bool, errCode int32, er
}
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
}
//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
//}