Ai_GirlFriend/xuniYou/components/emCallKit/callKitManage/useSendSignalMsgs.js
2026-01-31 19:15:41 +08:00

231 lines
7.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* 用来发送所有频道内信令使用 */
import { CALL_ACTIONS_TYPE, MSG_TYPE } from '../contants';
import { useInitCallKit } from '../index.js';
const action = 'rtcCall';
const useSendSignalMsgs = () => {
const { CallKitEMClient, CallKitCreateMsgFun } = useInitCallKit();
//发送通知弹出待接听窗口信令
const sendAlertMsg = (payload) => {
const { from, ext } = payload;
const option = {
type: 'cmd',
chatType: 'singleChat',
to: from,
action: action,
ext: {
action: CALL_ACTIONS_TYPE.ALERT,
calleeDevId: CallKitEMClient.context.jid.clientResource,
callerDevId: ext.callerDevId,
callId: ext.callId,
ts: Date.now(),
msgType: MSG_TYPE,
},
};
console.log('>>>>>>>option', option);
const msg = CallKitCreateMsgFun.create(option);
// 调用 `send` 方法发送该透传消息。
CallKitEMClient.send(msg)
.then((res) => {
// 消息成功发送回调。
console.log('answer Success', res);
})
.catch((e) => {
// 消息发送失败回调。
console.log('anser Fail', e);
});
};
//发送应答消息
const sendAnswerMsg = (payload, answerType) => {
const { targetId, sendBody } = payload;
const option = {
type: 'cmd',
chatType: 'singleChat',
// 设置消息接收方的用户 ID。
to: targetId,
// 设置自定义动作。对于透传消息,该字段必填。
action: action,
// 设置消息扩展信息。
ext: {
action: CALL_ACTIONS_TYPE.ANSWER,
result: answerType,
callerDevId: sendBody.callerDevId,
calleeDevId: CallKitEMClient.context.jid.clientResource,
callId: sendBody.callId,
ts: Date.now(),
msgType: MSG_TYPE,
},
};
const msg = CallKitCreateMsgFun.create(option);
// 调用 `send` 方法发送该透传消息。
CallKitEMClient.send(msg)
.then((res) => {
// 消息成功发送回调。
console.log('answer Success', res);
})
.catch((e) => {
// 消息发送失败回调。
console.log('anser Fail', e);
});
};
//发送告知主叫方confim确认中
const sendConfirmRing = (payload) => {
const { status, targetId, sendBody } = payload;
console.log('>>>>>告知对方确认响铃', payload);
const option = {
type: 'cmd',
chatType: 'singleChat',
to: targetId,
action: action,
ext: {
action: CALL_ACTIONS_TYPE.CONFIRM_RING,
status: status,
callerDevId: sendBody.callerDevId,
calleeDevId: sendBody.calleeDevId,
callId: sendBody.callId,
ts: Date.now(),
msgType: MSG_TYPE,
},
};
const msg = CallKitCreateMsgFun.create(option);
// 调用 `send` 方法发送该透传消息。
CallKitEMClient.send(msg)
.then((res) => {
// 消息成功发送回调。
console.log('ConfirmRing Success', res);
})
.catch((e) => {
// 消息发送失败回调。
console.log('ConfirmRing Fail', e);
});
};
//发送给对方确认后的结果
const sendConfirmCallee = (payload) => {
const { targetId, sendBody } = payload;
console.log('sendConfirmCalllee', payload);
try {
const option = {
type: 'cmd',
chatType: 'singleChat',
to: targetId,
action: action,
ext: {
action: CALL_ACTIONS_TYPE.CONFIRM_CALLEE,
result: sendBody.result,
callerDevId: CallKitEMClient.context.jid.clientResource,
calleeDevId: sendBody.calleeDevId,
callId: sendBody.callId,
ts: Date.now(),
msgType: MSG_TYPE,
},
};
const msg = CallKitCreateMsgFun.create(option);
console.log('%ccallee msg', 'color:purple', msg);
// 调用 `send` 方法发送该透传消息。
CallKitEMClient.send(msg)
.then((res) => {
// 消息成功发送回调。
console.log('Calllee Success', res);
})
.catch((e) => {
// 消息发送失败回调。
console.log('Calllee Fail', e);
});
} catch (error) {
console.log('>>>>>失败', error);
}
};
//发送邀请信令
const sendInviteMsg = (targetId, callType, channelInfors) => {
const { channelName, callId, inviteMsgContent } = channelInfors;
const option = {
type: 'txt',
chatType: 'singleChat',
msg: inviteMsgContent,
to: targetId,
ext: {
action: CALL_ACTIONS_TYPE.INVITE,
channelName: channelName,
type: callType, // 0为1v1音频1为1v1视频2为多人通话
callerDevId: CallKitEMClient.context.jid.clientResource, // 主叫方设备Id
callId: callId, // 随机uuid每次呼叫都不同代表一次呼叫
ts: Date.now(),
msgType: MSG_TYPE,
callerIMName: CallKitEMClient.context.jid.name,
},
};
//如果是多人邀请并且groupId有参数时在ext扩展字段中再增加一个ext并传入groupId
if (callType === 2 && channelInfors.groupId) {
option.ext.ext = { groupId: channelInfors.groupId };
}
return new Promise((resolve, reject) => {
const msg = CallKitCreateMsgFun.create(option);
// 调用 `send` 方法发送该透传消息。
CallKitEMClient.send(msg)
.then((res) => {
// 消息成功发送回调。
console.log('invite Success', res);
resolve(res);
})
.catch((e) => {
// 消息发送失败回调。
console.log('invite Fail', e);
if (e.type === 221) {
uni.showToast({
icon: 'none',
title: '该应用开启了非好友关系检测,邀请失败!',
});
} else {
uni.showToast({
icon: 'none',
title: '邀请失败,请稍后重试!',
});
}
reject(e);
});
});
};
//发送取消呼叫消息
const sendCannelMsg = (payload) => {
console.log('>>>>>>>发送取消通话信令', payload);
const { targetId, callId } = payload;
const option = {
type: 'cmd',
chatType: 'singleChat',
// 设置消息接收方的用户 ID。
to: targetId,
// 设置自定义动作。对于透传消息,该字段必填。
action: action,
// 设置消息扩展信息。
ext: {
action: CALL_ACTIONS_TYPE.CANCEL,
callerDevId: CallKitEMClient.clientResource,
callId: callId || '',
ts: Date.now(),
msgType: MSG_TYPE,
},
};
const msg = CallKitCreateMsgFun.create(option);
// 调用 `send` 方法发送该透传消息。
CallKitEMClient.send(msg)
.then((res) => {
// 消息成功发送回调。
console.log('Cannel Success', res);
})
.catch((e) => {
// 消息发送失败回调。
console.log('Cannel Fail', e, option);
});
};
return {
sendAlertMsg,
sendAnswerMsg,
sendInviteMsg,
sendConfirmRing,
sendConfirmCallee,
sendCannelMsg,
};
};
export default useSendSignalMsgs;