211 lines
7.9 KiB
JavaScript
211 lines
7.9 KiB
JavaScript
|
import { layuiObj, loginInfo } from "./index.js";
|
|||
|
import { serverIp } from "../../../public/js/url.js";
|
|||
|
var sosSdk = null;
|
|||
|
//当前sos设备告警列表
|
|||
|
var currentSosAlarmTask = {};
|
|||
|
var sosInitState=false;//监测sos初始化是否成功。
|
|||
|
function connectMapInit(){
|
|||
|
if(sosInitState==false){
|
|||
|
//加载地图
|
|||
|
sosInitState=true;
|
|||
|
}
|
|||
|
}
|
|||
|
function initSosSdk() {
|
|||
|
//内网情况就不用连接了。
|
|||
|
if(serverIp!="43.15.198.61"){
|
|||
|
sosSdk = new SOS.SDK({
|
|||
|
Account: loginInfo["user_name"],// 这里填写account
|
|||
|
Password: "123456",// 这里填写password
|
|||
|
});
|
|||
|
try {
|
|||
|
//sdk初始化会有一个过程,包括与初始化自己本身,与服务器交互等过程,需要等待
|
|||
|
sosSdk.init().then(() => {
|
|||
|
// 初始化成功(这里成功之后,也会通过sdk.addEventListener(SOS.EVENT.SDK_STATE)的消息通知到)
|
|||
|
console.log('SDK启动成功,版本号:', sosSdk.version());
|
|||
|
//加载地图
|
|||
|
connectMapInit();
|
|||
|
}).catch(error => {
|
|||
|
console.error(error);
|
|||
|
//加载地图
|
|||
|
connectMapInit();
|
|||
|
}).finally(()=>{
|
|||
|
console.log("完成")
|
|||
|
})
|
|||
|
} catch (error) {
|
|||
|
//加载地图
|
|||
|
connectMapInit();
|
|||
|
}
|
|||
|
//SDK运行状态事件通知
|
|||
|
sosSdk.addEventListener(SOS.EVENT.SDK_STATE, (event, code, description) => {
|
|||
|
switch (event) {
|
|||
|
case SOS.EVENT.SDK_STATE_CODE.WARN:
|
|||
|
connectMapInit();
|
|||
|
// 一般是网络原因与服务器连接断开,会warn
|
|||
|
layuiObj.layer.msg('sdk state: warn', description);
|
|||
|
break;
|
|||
|
case SOS.EVENT.SDK_STATE_CODE.ERROR:
|
|||
|
if (code === SOS.ERROR_CODE.LOGIN_CONFLICT) {
|
|||
|
// 账号在其他地方登录,这个需要处理下
|
|||
|
layuiObj.layer.msg('你的账号已在其他地方登录');
|
|||
|
// 这里一定要记得把sdk destroy掉,不然会触发sdk的重连机制
|
|||
|
sosSdk && sdk.destroy();
|
|||
|
sosSdk = null;
|
|||
|
}
|
|||
|
//sos告警账号密码不存在
|
|||
|
if(
|
|||
|
code==6
|
|||
|
||
|
|||
|
code==1
|
|||
|
||
|
|||
|
code==9
|
|||
|
){
|
|||
|
//一般是网络原因与服务器连接断开,会warn
|
|||
|
//layuiObj.layer.msg('报警器登录失败');
|
|||
|
//加载地图
|
|||
|
connectMapInit();
|
|||
|
}
|
|||
|
break;
|
|||
|
case SOS.EVENT.SDK_STATE_CODE.SUCCESS:
|
|||
|
console.info('sdk state: success');
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
})
|
|||
|
//设备告警事件通知
|
|||
|
sosSdk.addEventListener(SOS.EVENT.DEVICE_ALARM_STATE, (event, device, task, operator) => {
|
|||
|
switch (event) {
|
|||
|
case SOS.EVENT.DEVICE_ALARM_STATE_CODE.RING:
|
|||
|
var deviceId = device.Id;
|
|||
|
if (!(deviceId in currentSosAlarmTask)) {
|
|||
|
currentSosAlarmTask[deviceId] = task;
|
|||
|
}
|
|||
|
console.log('设备:', device.Id, device.Name, '正在告警,TaskCode:' + task.TaskCode);
|
|||
|
break;
|
|||
|
case SOS.EVENT.DEVICE_ALARM_STATE_CODE.ACCEPT:
|
|||
|
// 本端sdk接警,也会有这个通知,需要判断出来是自己接的,还是其他人接的
|
|||
|
if (sosSdk.isMe(operator.SipNum)) {
|
|||
|
console.log('设备:', device.Id, device.Name, '已经被我自己接警');
|
|||
|
} else {
|
|||
|
console.log('设备:', device.Id, device.Name, '已经被其他人接警');
|
|||
|
}
|
|||
|
break;
|
|||
|
case SOS.EVENT.DEVICE_ALARM_STATE_CODE.NOANSWER:
|
|||
|
console.log('设备:', device.Id, device.Name, '无人接警');
|
|||
|
break;
|
|||
|
case SOS.EVENT.DEVICE_ALARM_STATE_CODE.FINISHED:
|
|||
|
console.log('设备:', device.Id, device.Name, '已完成接警');
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
//开始接警
|
|||
|
async function sosDeviceAlarmAccept(obj) {
|
|||
|
var deviceid=obj["deviceId"];
|
|||
|
try {
|
|||
|
const disconnectedCallback = (SipNum) => {
|
|||
|
// 开始接警之后,有设备(或自己)退出
|
|||
|
console.warn(SipNum, '已退出接警', sosSdk && sosSdk.isMe(SipNum));
|
|||
|
}
|
|||
|
const stopCallback = () => {
|
|||
|
console.warn('服务器结束接警');
|
|||
|
}
|
|||
|
if (deviceid in currentSosAlarmTask) {
|
|||
|
var alarmTaskObject = currentSosAlarmTask[deviceid]
|
|||
|
// 下面这个alarmTaskObject,就是通过告警通知,或者告警列表获取到的
|
|||
|
const rsp = await sosSdk.deviceAlarmAccept(alarmTaskObject, {
|
|||
|
AudioDomId: `sosAlarmAudio${deviceid}`,
|
|||
|
// 非必填参数
|
|||
|
OnDisconnected: disconnectedCallback,
|
|||
|
OnStop: stopCallback,
|
|||
|
});
|
|||
|
} else {
|
|||
|
openSosAlarmAudio(deviceid);
|
|||
|
}
|
|||
|
console.log('接警成功, expire(接警时间,单位秒):' );
|
|||
|
} catch (error) {
|
|||
|
console.log('接警失败', error);
|
|||
|
}
|
|||
|
}
|
|||
|
//结束接警
|
|||
|
async function sosDeviceAlarmDone(obj) {
|
|||
|
var deviceid=obj["deviceId"];
|
|||
|
try {
|
|||
|
if (deviceid in currentSosAlarmTask) {
|
|||
|
var alarmTaskObject = currentSosAlarmTask[deviceid];
|
|||
|
const rsp = await sosSdk.deviceAlarmDone(alarmTaskObject);
|
|||
|
delete currentSosAlarmTask[deviceid]
|
|||
|
} else {
|
|||
|
stopSosAlarmAudio(deviceid)
|
|||
|
}
|
|||
|
} catch (error) {
|
|||
|
console.log('结束接警失败', error)
|
|||
|
}
|
|||
|
}
|
|||
|
var currentAlarmSosAudio = {};
|
|||
|
//开启报警的对讲
|
|||
|
function openSosAlarmAudio(deviceid) {
|
|||
|
if (sosSdk) {
|
|||
|
let disconnectedCallback = (SipNum) => {
|
|||
|
// 开始对讲之后,有设备或自己退出对讲
|
|||
|
console.warn(SipNum, "已退出对讲", sosSdk && sosSdk.isMe(SipNum));
|
|||
|
}
|
|||
|
let stopCallback = () => {
|
|||
|
// 开始对讲之后,服务器结束了对讲
|
|||
|
console.warn("服务器结束对讲");
|
|||
|
}
|
|||
|
sosSdk.audioSpeakStart({
|
|||
|
// 必填参数
|
|||
|
DeviceId: parseInt(deviceid),
|
|||
|
AudioDomId: `sosAlarmAudio${deviceid}`, // 要保证document.getElementById("html_audio_remote")非null,你的audio标签,一定要存在
|
|||
|
// 非必填参数
|
|||
|
Force: false,
|
|||
|
OnDisconnected: disconnectedCallback,
|
|||
|
OnStop: stopCallback,
|
|||
|
}).then((ret) => {
|
|||
|
currentAlarmSosAudio[deviceid] = ret.TaskCode
|
|||
|
console.log("!!!!!!!!!!", ret);
|
|||
|
}).catch((e) => {
|
|||
|
console.log(e);
|
|||
|
switch (e.code) {
|
|||
|
case 2005:
|
|||
|
break;
|
|||
|
case 3551:
|
|||
|
break;
|
|||
|
case 3552:
|
|||
|
break;
|
|||
|
default:
|
|||
|
break;
|
|||
|
}
|
|||
|
})
|
|||
|
} else {
|
|||
|
alert("对讲失败,请先启动SDK")
|
|||
|
}
|
|||
|
}
|
|||
|
// 结束对讲
|
|||
|
function stopSosAlarmAudio(deviceid) {
|
|||
|
if (sosSdk) {
|
|||
|
if (deviceid in currentAlarmSosAudio) {
|
|||
|
sosSdk.audioSpeakStop({
|
|||
|
TaskCode: currentAlarmSosAudio[deviceid]
|
|||
|
}).then(() => {
|
|||
|
console.log("对讲停止成功");
|
|||
|
}).catch((error) => {
|
|||
|
console.error(error);
|
|||
|
})
|
|||
|
}
|
|||
|
} else {
|
|||
|
alert("对讲停止失败,请先启动SDK")
|
|||
|
}
|
|||
|
}
|
|||
|
export {
|
|||
|
initSosSdk,
|
|||
|
sosSdk,
|
|||
|
sosDeviceAlarmAccept,
|
|||
|
sosDeviceAlarmDone
|
|||
|
}
|