Compare commits
10 Commits
b4781dcc5a
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 9650f4c0ac | |||
| 5c500438f5 | |||
| c2e9f24a0d | |||
| 7dc111e89d | |||
| e1e98de4b2 | |||
|
|
2cc4c82cbd | ||
| 0760d28d36 | |||
| 228943fc02 | |||
|
|
8aa642ecb4 | ||
|
|
3af5cc5f6e |
7
hd-glasses-app/.env.company
Normal file
7
hd-glasses-app/.env.company
Normal file
@@ -0,0 +1,7 @@
|
||||
VUE_APP_MAP_URL='https://192.168.2.181/geoserver'
|
||||
VUE_APP_MAP_AUTHKEY='30efbafe-d218-4d77-8200-0207246924be'
|
||||
VUE_APP_API="https://192.168.2.181/znzq"
|
||||
VUE_APP_STATIC_FILE_Prefix='//192.168.2.181/static_file'
|
||||
VUE_APP_SRS_URL='webrtc://192.168.2.181/'
|
||||
VUE_APP_IM_API_URL='https://192.168.2.181/im_api/v1'
|
||||
VUE_APP_MAP_ROUTE='https://192.168.2.181/route'
|
||||
@@ -1,7 +1,8 @@
|
||||
VUE_APP_MAP_URL='http://82.157.23.170:8600/geoserver'
|
||||
VUE_APP_MAP_AUTHKEY='9b488ac6-5309-4ef4-ab99-2180d2da161d'
|
||||
VUE_APP_API="http://work.ii999.live:19002/znzq"
|
||||
VUE_APP_STATIC_FILE_Prefix='//119.45.242.222/static_file'
|
||||
VUE_APP_SRS_URL='webrtc://119.45.242.222/'
|
||||
VUE_APP_STATIC_FILE_Prefix='//192.168.2.181/static_file'
|
||||
VUE_APP_SRS_URL='webrtc://192.168.2.181/'
|
||||
|
||||
VUE_APP_IM_API_URL='https://dev.shudong.xyz/im_api/v1'
|
||||
VUE_APP_IM_API_URL='https://192.168.2.181/im_api/v1'
|
||||
VUE_APP_MAP_ROUTE='https://172.16.3.18/geoserver'
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
VUE_APP_MAP_URL='https://172.16.3.18/geoserver'
|
||||
|
||||
VUE_APP_MAP_AUTHKEY='30efbafe-d218-4d77-8200-0207246924be'
|
||||
VUE_APP_API="https://172.16.3.18/znzq"
|
||||
VUE_APP_STATIC_FILE_Prefix='//172.16.3.18/static_file'
|
||||
VUE_APP_SRS_URL='webrtc://172.16.3.18/'
|
||||
VUE_APP_IM_API_URL='https://172.16.3.18/im_api/v1'
|
||||
VUE_APP_MAP_ROUTE='https://172.16.3.18/route'
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
"serve": "vue-cli-service serve --mode dev",
|
||||
"prod-serve": "vue-cli-service serve --mode hd",
|
||||
"build:hd": "vue-cli-service build --mode hd && node deployHD.js",
|
||||
"build:company": "vue-cli-service build --mode company",
|
||||
"build:online": "vue-cli-service build --mode dev",
|
||||
"lint": "vue-cli-service lint"
|
||||
},
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="">
|
||||
<head>
|
||||
<script type="text/javascript" src="https://172.16.3.18/static_file/vconsole.min.js"></script>
|
||||
<!-- <script type="text/javascript" src="https://192.168.2.181/static_file/vconsole.min.js"></script>-->
|
||||
<script>
|
||||
var vConsole = new VConsole();
|
||||
// var vConsole = new VConsole();
|
||||
console.log('Hello world');
|
||||
</script>
|
||||
<meta charset="utf-8">
|
||||
|
||||
@@ -36,7 +36,7 @@ function SrsRtcPublisherAsync() {
|
||||
|
||||
self.turn = {
|
||||
iceServers: [{
|
||||
urls: 'turns:172.16.3.18:3478', 'credential': 'huashiai',
|
||||
urls: 'turn:120.79.18.123:3478', 'credential': 'mars23600800',
|
||||
'username': 'huashiai'
|
||||
}]
|
||||
};
|
||||
@@ -371,6 +371,11 @@ function SrsRtcPlayerAsync() {
|
||||
await self.pc.setLocalDescription(offer);
|
||||
var session = await new Promise(function (resolve, reject) {
|
||||
// @see https://github.com/rtcdn/rtcdn-draft
|
||||
|
||||
conf.apiUrl = conf.apiUrl.replace('172.16.3.17', '172.16.3.18');
|
||||
conf.streamUrl = conf.streamUrl.replace('172.16.3.17', '172.16.3.18');
|
||||
|
||||
|
||||
var data = {
|
||||
api: conf.apiUrl, tid: conf.tid, streamurl: conf.streamUrl,
|
||||
clientip: null, sdp: offer.sdp
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import Vue from 'vue'
|
||||
import App from './App.vue'
|
||||
import utils from './utils/publicFun';
|
||||
// import utils from './utils/publicFun';
|
||||
import router from './router'
|
||||
|
||||
import axios from 'axios'
|
||||
@@ -15,7 +15,7 @@ import 'amfe-flexible';
|
||||
|
||||
Vue.config.productionTip = false
|
||||
|
||||
Vue.prototype.$utils = utils;
|
||||
// Vue.prototype.$utils = utils;
|
||||
|
||||
new Vue({
|
||||
render: h => h(App),
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="videoRoomContainer">
|
||||
<div class="wrapper">
|
||||
<video ref="videoStreamtopVideo" width="100%" autoplay></video>
|
||||
<video @click="videoClick" ref="videoStreamtopVideo" width="100%" autoplay></video>
|
||||
<div class="swiper-container">
|
||||
<div class="swiper-wrapper">
|
||||
<template v-for="(item,index) in videoRoomSteamList">
|
||||
@@ -92,11 +92,14 @@ export default {
|
||||
isForce: "0",
|
||||
hasVideo: "1",
|
||||
callSessionId: "",
|
||||
callStatus: "watting",//房间状态
|
||||
callStatus: "0",//房间状态 1 未开始等待 2已开始 3已关闭
|
||||
callRoomInfoRequetTimes:0,//房间拉取次数
|
||||
client:"",
|
||||
uuid:""
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
this.uuid=uuidv4,
|
||||
console.log(location.href)
|
||||
console.log(location.href)
|
||||
console.log(location.href)
|
||||
@@ -114,8 +117,14 @@ export default {
|
||||
this.showInviteConfirmDialog = getUrlParam("showInviteConfirmDialog");
|
||||
this.hasVideo = getUrlParam("hasVideo");
|
||||
this.isForce = getUrlParam("isForce");
|
||||
this.client = getUrlParam("client");
|
||||
|
||||
|
||||
let hd_gps_location = localStorage.getItem("hd_gps_location")
|
||||
if (hd_gps_location) {
|
||||
this.client="app"
|
||||
}
|
||||
|
||||
this.voiceImg = getStatisFileUrl("/media/voice_open.png")
|
||||
this.cameraImg = getStatisFileUrl("/media/camera_open.png")
|
||||
this.switchCameraImg = getStatisFileUrl("/media/switch.png")
|
||||
@@ -130,9 +139,12 @@ export default {
|
||||
|
||||
}
|
||||
|
||||
this.token = this.$route.query.token || "";
|
||||
if (this.token > 10) {
|
||||
this.token = getUrlParam("token");
|
||||
console.log("token" + this.token)
|
||||
if (this.token!=null) {
|
||||
localStorage.setItem("hd_token", this.token)
|
||||
}else {
|
||||
console.warn("url中未获取到token")
|
||||
}
|
||||
|
||||
if (this.showConfirmDialog == 1) {
|
||||
@@ -141,8 +153,8 @@ export default {
|
||||
message: `${this.inviteName}邀请你加入${this.videoTitle}聊天`,
|
||||
})
|
||||
.then(() => {
|
||||
this.callBegin();
|
||||
this.init();
|
||||
this.callStatus=1
|
||||
// on confirm
|
||||
})
|
||||
.catch(() => {
|
||||
@@ -160,6 +172,7 @@ export default {
|
||||
this.callSessionId = uuidv4();
|
||||
this.sendInvite();
|
||||
this.init();
|
||||
this.callStatus=1
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
@@ -225,9 +238,11 @@ export default {
|
||||
}
|
||||
if (this.isPlayer == 1) {
|
||||
this.getRoomVideoList();
|
||||
|
||||
this.roomTimer = setInterval(() => {
|
||||
this.getRoomVideoList();
|
||||
}, 2000)
|
||||
|
||||
}
|
||||
this.swiperInstance = new Swiper('.swiper-container', {
|
||||
slidesPerView: 4,
|
||||
@@ -274,6 +289,13 @@ export default {
|
||||
this.beginPublish()
|
||||
},
|
||||
switchCamera() {
|
||||
/* if(this.client="app"){
|
||||
location.href = "uniwebview://action?function=callRoomFuns¶ms1=switchCamara"
|
||||
console.log("发送切换摄像头通知")
|
||||
return false;
|
||||
}
|
||||
*/
|
||||
|
||||
let self = this;
|
||||
self.cameraIndex = self.cameraIndex + 1 == self.cameraDevices.length ? 0 : self.cameraIndex + 1
|
||||
let deviceId = {
|
||||
@@ -307,6 +329,8 @@ export default {
|
||||
console.log('navigator.getUserMedia error: ', error);
|
||||
},
|
||||
beginPublish() {
|
||||
|
||||
|
||||
let _this = this;
|
||||
//http://localhost:8080/hd-glasses-app/#/call_room?isPublish=1&isPlayer=1&uid=123&room=call_room
|
||||
|
||||
@@ -318,7 +342,25 @@ export default {
|
||||
|
||||
navigator.mediaDevices.enumerateDevices().then(this.gotDevices).catch(this.handleError);
|
||||
|
||||
/* if(this.client=="app"){
|
||||
if(this.constraints.video==false){
|
||||
console.log("发送关闭摄像头通知")
|
||||
location.href = "uniwebview://action?function=callRoomFuns¶ms1=closeCamara"
|
||||
}else {
|
||||
console.log("发送打开摄像头通知")
|
||||
location.href = "uniwebview://action?function=callRoomFuns¶ms1=openCamara"
|
||||
}
|
||||
if(this.constraints.audio==false){
|
||||
console.log("发送关闭麦克风通知")
|
||||
location.href = "uniwebview://action?function=callRoomFuns¶ms1=closeVoice"
|
||||
}else {
|
||||
console.log("发送打开麦克风通知")
|
||||
location.href = "uniwebview://action?function=callRoomFuns¶ms1=openVoice"
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
*/
|
||||
if (_this.publishSdk) {
|
||||
_this.publishSdk.close();
|
||||
}
|
||||
@@ -435,7 +477,30 @@ export default {
|
||||
},
|
||||
}).then(res => {
|
||||
if (res.status == 200) {
|
||||
if(this.isPublish==1){
|
||||
if(res.data.data.length==2){
|
||||
if(this.callStatus==1){
|
||||
this.callBegin();
|
||||
}
|
||||
this.callStatus=2
|
||||
}
|
||||
}else {
|
||||
if(res.data.data.length==1){
|
||||
if(this.callStatus==1){
|
||||
this.callBegin();
|
||||
}
|
||||
this.callStatus=2
|
||||
}
|
||||
}
|
||||
this.generateVideoRoomStream(res.data.data)
|
||||
if(this.client=="app"){
|
||||
try {
|
||||
location.href = "uniwebview://action?function=domMockClick¶ms1=300¶ms2=300";
|
||||
}catch (e) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}else {
|
||||
this.generateVideoRoomStream([])
|
||||
}
|
||||
@@ -459,12 +524,13 @@ export default {
|
||||
})
|
||||
},
|
||||
callBegin() {
|
||||
let passiveId=this.roomId==this.uid?this.tuid:this.tuid
|
||||
|
||||
let roomInfo = {
|
||||
id:uuidv4(),
|
||||
inviteId: this.roomId,//后面改成发起人的手机号或者id
|
||||
roomId: this.roomId,
|
||||
passiveId: this.uid,
|
||||
passiveId: passiveId,
|
||||
isForce: this.isForce,
|
||||
type: this.hasVideo == 1 ? "video" : "voice",
|
||||
}
|
||||
@@ -482,10 +548,14 @@ export default {
|
||||
})
|
||||
},
|
||||
callHangUp() {
|
||||
if(this.callStatus==3){
|
||||
return false;
|
||||
}
|
||||
|
||||
let roomInfo = {
|
||||
sessionId: this.roomId,
|
||||
roomId:this.roomId
|
||||
roomId:this.roomId,
|
||||
_uuid:this.uuid,
|
||||
}
|
||||
|
||||
axios({
|
||||
@@ -504,13 +574,15 @@ export default {
|
||||
cmd: "hangUp",
|
||||
msgTxt: this.uname || ""
|
||||
}).then((res) => {
|
||||
if (res.status == 200) {
|
||||
try {
|
||||
this.publishSdk.close();
|
||||
}catch (e) {
|
||||
|
||||
}
|
||||
this.callStatus=3;
|
||||
clearInterval(this.roomTimer)
|
||||
})
|
||||
|
||||
|
||||
console.log(res)
|
||||
})
|
||||
},
|
||||
joinRoom() {
|
||||
@@ -533,12 +605,80 @@ export default {
|
||||
},
|
||||
generateVideoRoomStream(videoList) {
|
||||
this.callRoomInfoRequetTimes=this.callRoomInfoRequetTimes+1;
|
||||
if(this.callRoomInfoRequetTimes>5){
|
||||
if(videoList.length==0){
|
||||
//如果电话一直未拨通
|
||||
if(this.callStatus==1){
|
||||
if(this.callRoomInfoRequetTimes>12){
|
||||
if(videoList.length==0){
|
||||
// 拉取5次房间列表之后,如果房间里面视频流的数量为0,则关掉房间
|
||||
this.videoDownAction()
|
||||
}
|
||||
Notify({
|
||||
message: '通讯异常,即将挂断',
|
||||
duration: 2,
|
||||
type: 'primary'
|
||||
});
|
||||
setTimeout(()=>{
|
||||
this.videoDownAction()
|
||||
},1500)
|
||||
}
|
||||
if(videoList.length==1){
|
||||
// 拉取5次房间列表之后,如果房间里面视频流的数量为1,并且是自己的流,则关闭房间
|
||||
if(videoList[0].publishId==this.uid){
|
||||
Notify({
|
||||
message: '通讯异常,即将挂断',
|
||||
duration: 2,
|
||||
type: 'primary'
|
||||
});
|
||||
setTimeout(()=>{
|
||||
this.videoDownAction()
|
||||
},1500)
|
||||
}
|
||||
//如果房间里面只有一路流,并且是查岗模式,则表示正常
|
||||
if(this.isPublish==0){
|
||||
this.callRoomInfoRequetTimes=0;
|
||||
}
|
||||
}
|
||||
if(videoList.length==2){
|
||||
this.callRoomInfoRequetTimes=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
//如果电话打通过一次
|
||||
if(this.callStatus==2){
|
||||
if(this.callRoomInfoRequetTimes>2){
|
||||
if(videoList.length==0){
|
||||
// 拉取5次房间列表之后,如果房间里面视频流的数量为0,则关掉房间
|
||||
Notify({
|
||||
message: '通讯异常,即将挂断',
|
||||
duration: 2,
|
||||
type: 'primary'
|
||||
});
|
||||
setTimeout(()=>{
|
||||
this.videoDownAction()
|
||||
},1500)
|
||||
}
|
||||
if(videoList.length==1){
|
||||
// 拉取5次房间列表之后,如果房间里面视频流的数量为1,并且是自己的流,则关闭房间
|
||||
if(videoList[0].publishId==this.uid){
|
||||
Notify({
|
||||
message: '通讯异常,即将挂断',
|
||||
duration: 2,
|
||||
type: 'primary'
|
||||
});
|
||||
setTimeout(()=>{
|
||||
this.videoDownAction()
|
||||
},1500)
|
||||
}
|
||||
//如果房间里面只有一路流,并且是查岗模式,则表示正常
|
||||
if(this.isPublish==0){
|
||||
this.callRoomInfoRequetTimes=0;
|
||||
}
|
||||
}
|
||||
if(videoList.length==2){
|
||||
this.callRoomInfoRequetTimes=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
let hasUpdate = false;
|
||||
if (this.oldVideoStreamList == null) {
|
||||
@@ -566,6 +706,12 @@ export default {
|
||||
}, 1000)
|
||||
//videoSteamList
|
||||
},
|
||||
videoClick(){
|
||||
this.videoRoomSteamList.map(item=>{
|
||||
var video = eval('this.$refs.videoStream' + item.publishId)[0]
|
||||
video.play();
|
||||
})
|
||||
},
|
||||
videoClickAction(publishId) {
|
||||
this.topVideo = publishId;
|
||||
var video = eval('this.$refs.videoStream' + publishId)[0]
|
||||
|
||||
@@ -145,6 +145,7 @@ export default {
|
||||
isCanDraw: true,
|
||||
from: "",
|
||||
routeType: "car",
|
||||
longpress: false
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
@@ -180,7 +181,6 @@ export default {
|
||||
case "pcPlanningPath":
|
||||
this.pcDrawType = "LineString";
|
||||
window.addEventListener('message', (event) => {
|
||||
|
||||
this.isCanDraw = false
|
||||
console.log(event.data)
|
||||
if (this.parentPostMessageData.length == 0) {
|
||||
@@ -205,7 +205,7 @@ export default {
|
||||
if (event.data instanceof Array) {
|
||||
this.map.removeLayer(this.drawPlanningPathLayer);
|
||||
this.parentPostMessageData = event.data;
|
||||
this.drawPcPostMessageDataLayer()
|
||||
this.drawPcPostMessageDataLayer();
|
||||
} else {
|
||||
this.isCanDraw = true;
|
||||
}
|
||||
@@ -360,22 +360,68 @@ export default {
|
||||
zoom: 16,
|
||||
}),
|
||||
});
|
||||
this.map.on('singleclick', e => {
|
||||
this.map.forEachFeatureAtPixel(
|
||||
e.pixel,
|
||||
(feature) => {
|
||||
console.log("Feature被点击了")
|
||||
console.log(feature)
|
||||
if (feature.values_.type == 'alarm') {
|
||||
this.alarmDetailsData = feature.values_.data;
|
||||
this.alarmDetailsOverlay = true;
|
||||
|
||||
if (this.pageType == "mini") {
|
||||
|
||||
var _this = this;
|
||||
this.map.on("click", function (e) {
|
||||
(_this.longpress) ? console.log("Long Press") : console.log("Short Press")
|
||||
|
||||
if (_this.longpress) {
|
||||
|
||||
console.log(e)
|
||||
console.log(e.coordinate)
|
||||
|
||||
const startPoint = ol.proj.transform(e.coordinate, 'EPSG:3857', 'EPSG:4326');
|
||||
location.href = "uniwebview://action?function=homeAddAlarmPoint¶ms1=" + JSON.stringify(startPoint);
|
||||
|
||||
} else {
|
||||
_this.map.forEachFeatureAtPixel(
|
||||
e.pixel,
|
||||
(feature) => {
|
||||
console.log("Feature被点击了")
|
||||
console.log(feature)
|
||||
if (feature.values_.type == 'alarm') {
|
||||
_this.alarmDetailsData = feature.values_.data;
|
||||
_this.alarmDetailsOverlay = true;
|
||||
}
|
||||
},
|
||||
{
|
||||
hitTolerance: 30
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
});
|
||||
var startTime, endTime;
|
||||
this.map.on('pointerdown', function () {
|
||||
|
||||
startTime = new Date().getTime();
|
||||
});
|
||||
this.map.on('pointerup', function () {
|
||||
endTime = new Date().getTime();
|
||||
console.log(endTime - startTime);
|
||||
_this.longpress = (endTime - startTime < 500) ? false : true;
|
||||
});
|
||||
|
||||
} else {
|
||||
this.map.on('singleclick', e => {
|
||||
this.map.forEachFeatureAtPixel(
|
||||
e.pixel,
|
||||
(feature) => {
|
||||
console.log("Feature被点击了")
|
||||
console.log(feature)
|
||||
if (feature.values_.type == 'alarm') {
|
||||
this.alarmDetailsData = feature.values_.data;
|
||||
this.alarmDetailsOverlay = true;
|
||||
}
|
||||
},
|
||||
{
|
||||
hitTolerance: 30
|
||||
}
|
||||
},
|
||||
{
|
||||
hitTolerance: 30
|
||||
}
|
||||
);
|
||||
});
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
},
|
||||
/**
|
||||
@@ -388,11 +434,99 @@ export default {
|
||||
this.addPoints(e.coordinate);
|
||||
}
|
||||
});
|
||||
},
|
||||
planningPathCar() {
|
||||
const startPoint = ol.proj.transform(this.navigationStartPoint, 'EPSG:4326', 'EPSG:3857');
|
||||
const endPoint = ol.proj.transform(this.navigationEndPoint, 'EPSG:4326', 'EPSG:3857');
|
||||
let _url = process.env.VUE_APP_MAP_ROUTE +"/v0/driving/"
|
||||
_url = _url + this.navigationStartPoint[0] + ","
|
||||
_url = _url + this.navigationStartPoint[1] + ";"
|
||||
_url = _url + this.navigationEndPoint[0] + ","
|
||||
_url = _url + this.navigationEndPoint[1]
|
||||
_url = _url + "?" + "alternatives=true&steps=true&geometries=geojson";
|
||||
|
||||
|
||||
axios({
|
||||
method: "get",
|
||||
url: _url,
|
||||
headers: {
|
||||
'Content-Type': 'application/json;charset=utf-8'
|
||||
},
|
||||
}).then(res => {
|
||||
console.log("================================获取到了导航结果")
|
||||
|
||||
res = res.data;
|
||||
|
||||
/*
|
||||
console.log(res)
|
||||
if (res.code != "OK") {
|
||||
return false;
|
||||
}else {
|
||||
console.log("================================获取到了导航结果,开始步行导航")
|
||||
}
|
||||
*/
|
||||
let pathList = [startPoint];
|
||||
|
||||
const coordinates = res.routes[0].geometry.coordinates
|
||||
|
||||
coordinates.map(item1 => {
|
||||
const _point = ol.proj.transform(item1, 'EPSG:4326', 'EPSG:3857');
|
||||
pathList.push(_point)
|
||||
})
|
||||
|
||||
// let _list=res.route[0].legs[0].steps[0].intersections
|
||||
//
|
||||
// _list.map((item, index) => {
|
||||
//
|
||||
// })
|
||||
pathList.push(endPoint)
|
||||
console.log("==============================pathList")
|
||||
console.log(pathList)
|
||||
|
||||
const route = new LineString(pathList)
|
||||
|
||||
const geometryMove = new Point(route.getFirstCoordinate());
|
||||
|
||||
const featureMove = new Feature({
|
||||
type: "featureMove",
|
||||
geometry: geometryMove,
|
||||
});
|
||||
// this.planningVectorLayer.set('id', 'planningVectorLayer');
|
||||
//先清空 再清除
|
||||
this.map.removeLayer(this.planningVectorLayer)
|
||||
this.planningVectorLayer = new VectorLayer({
|
||||
source: new VectorSource({
|
||||
features: [
|
||||
new Feature({
|
||||
type: "route",
|
||||
geometry: route,
|
||||
}),
|
||||
featureMove,
|
||||
new Feature({
|
||||
type: "icon",
|
||||
geometry: new Point(route.getFirstCoordinate()),
|
||||
}),
|
||||
new Feature({
|
||||
type: "icon",
|
||||
geometry: new Point(route.getLastCoordinate()),
|
||||
}),
|
||||
],
|
||||
}),
|
||||
style: (feature) => {
|
||||
return this.styles[feature.get("type")];
|
||||
},
|
||||
});
|
||||
|
||||
this.map.addLayer(this.planningVectorLayer)
|
||||
})
|
||||
|
||||
|
||||
},
|
||||
planningPathFoot() {
|
||||
const startPoint = ol.proj.transform(this.navigationStartPoint, 'EPSG:4326', 'EPSG:3857');
|
||||
const endPoint = ol.proj.transform(this.navigationEndPoint, 'EPSG:4326', 'EPSG:3857');
|
||||
let _url = "https://172.16.3.18/route/v1/driving/"
|
||||
// let _url = "https://192.168.2.181/route/v1/driving/"
|
||||
let _url = process.env.VUE_APP_MAP_ROUTE +"/v1/driving/"
|
||||
_url = _url + this.navigationStartPoint[0] + ","
|
||||
_url = _url + this.navigationStartPoint[1] + ";"
|
||||
_url = _url + this.navigationEndPoint[0] + ","
|
||||
@@ -841,10 +975,12 @@ export default {
|
||||
// 图层添加到地图上
|
||||
this.map.addLayer(this.alarmLayer);
|
||||
var flag = true
|
||||
this.alarmAnimation = setInterval(() => {
|
||||
flag = !flag
|
||||
this.alarmLayer.setVisible(flag)
|
||||
}, 1500);
|
||||
/*
|
||||
this.alarmAnimation = setInterval(() => {
|
||||
flag = !flag
|
||||
this.alarmLayer.setVisible(flag)
|
||||
}, 1500);
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
@@ -857,6 +993,7 @@ export default {
|
||||
//临时智慧所,小红旗
|
||||
if (record.alarmCategory == "1706273001850601474") {
|
||||
// 设置要素的图标
|
||||
|
||||
feature.setStyle(
|
||||
new Style({
|
||||
// 设置图片效果
|
||||
@@ -998,12 +1135,22 @@ export default {
|
||||
|
||||
},
|
||||
alarmClickAction(index) {
|
||||
if (index == 1) {
|
||||
location.href = "uniwebview://action?function=alarmConfirmAction¶ms1=" + this.alarmDetailsData.id;
|
||||
}
|
||||
if (index == 2) {
|
||||
location.href = "uniwebview://action?function=alarmPlanningAction¶ms1=" + this.alarmDetailsData.id + "¶ms2=" + this.alarmDetailsData.location;
|
||||
try {
|
||||
if (index == 1) {
|
||||
location.href = "uniwebview://action?function=alarmConfirmAction¶ms1=" + this.alarmDetailsData.id;
|
||||
}
|
||||
if (index == 2) {
|
||||
location.href = "uniwebview://action?function=alarmPlanningAction¶ms1=" + this.alarmDetailsData.id + "¶ms2=" + this.alarmDetailsData.location;
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
this.alarmDetailsOverlay = false
|
||||
}, 1000)
|
||||
|
||||
|
||||
},
|
||||
getAlarmDetails(id) {
|
||||
service.get(`/api/alarm/queryById`, {
|
||||
@@ -1017,7 +1164,7 @@ export default {
|
||||
this.addPointWidthCoordinate(res.data.result.location, "alarm", res.data.result)
|
||||
setInterval(() => {
|
||||
if (this.routeType == "car") {
|
||||
this.planningPath()
|
||||
this.planningPathCar()
|
||||
}
|
||||
if (this.routeType == "foot") {
|
||||
this.planningPathFoot()
|
||||
|
||||
@@ -541,7 +541,6 @@ export default {
|
||||
vectorSource.addFeature(polygonFeature);
|
||||
}
|
||||
|
||||
|
||||
// 矢量地图
|
||||
this.drawPlanningPathLayer = new VectorLayer({
|
||||
source: vectorSource,
|
||||
|
||||
@@ -1151,7 +1151,7 @@ export default {
|
||||
this.getPatrolInstanceRealyPath(res.data.result.actualStartTime,res.data.result.actualEndTime);
|
||||
setInterval(()=>{
|
||||
this.getPatrolInstanceRealyPath(res.data.result.actualStartTime,res.data.result.actualEndTime);
|
||||
},50000)
|
||||
},2000)
|
||||
}
|
||||
|
||||
})
|
||||
@@ -1175,6 +1175,7 @@ export default {
|
||||
|
||||
service.get(`/sys/equipment/trajectory`, {
|
||||
params: {
|
||||
pageSize:1000,
|
||||
uerId: this.moveUserId,
|
||||
startTime:dayjs().startOf('day').format('YYYY-MM-DD HH:mm'),
|
||||
endTime:dayjs().endOf('day').format('YYYY-MM-DD HH:mm'),
|
||||
|
||||
1
hs-im-server/.gitignore
vendored
1
hs-im-server/.gitignore
vendored
@@ -3,5 +3,4 @@
|
||||
/im-service/target
|
||||
/im-common/target
|
||||
/build/**
|
||||
/dev
|
||||
/hd
|
||||
|
||||
BIN
hs-im-server/dev/app-service-1.0-SNAPSHOT.jar
Normal file
BIN
hs-im-server/dev/app-service-1.0-SNAPSHOT.jar
Normal file
Binary file not shown.
77
hs-im-server/dev/docker-compose.yml
Normal file
77
hs-im-server/dev/docker-compose.yml
Normal file
@@ -0,0 +1,77 @@
|
||||
version: '3'
|
||||
services:
|
||||
app-web:
|
||||
image: nginx:1.25
|
||||
restart: always
|
||||
privileged: true
|
||||
container_name: app-web
|
||||
# ports:
|
||||
# - 80:80
|
||||
# - 443:443
|
||||
network_mode: host
|
||||
volumes:
|
||||
- ./:/usr/share/nginx/html/
|
||||
- ./nginx.conf:/etc/nginx/nginx.conf
|
||||
im-tcp:
|
||||
image: 172.16.2.1:8083/java:8_server-jre_unlimited
|
||||
restart: always
|
||||
privileged: true
|
||||
environment:
|
||||
LANG: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
TZ: Asia/Shanghai
|
||||
IM_HOST: 172.16.3.18
|
||||
container_name: im-tcp
|
||||
volumes:
|
||||
- ./:/hd-znzq/config
|
||||
- ./:/hd-znzq/system
|
||||
network_mode: host
|
||||
# ports:
|
||||
# - 29001:29001
|
||||
# - 29000:29000
|
||||
command: java -Dfile.encoding=UTF-8 -jar /hd-znzq/system/im-tcp-1.0.0-SNAPSHOT.jar /hd-znzq/config/hd_1.yml
|
||||
im-message-store:
|
||||
image: 172.16.2.1:8083/java:8_server-jre_unlimited
|
||||
restart: always
|
||||
privileged: true
|
||||
environment:
|
||||
LANG: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
TZ: Asia/Shanghai
|
||||
container_name: im-message-store
|
||||
volumes:
|
||||
- ./:/hd-znzq/system
|
||||
# ports:
|
||||
# - 8990:8990
|
||||
network_mode: host
|
||||
command: java -Dfile.encoding=UTF-8 -jar /hd-znzq/system/im-message-store-1.0.0-SNAPSHOT.jar
|
||||
im-service:
|
||||
image: 172.16.2.1:8083/java:8_server-jre_unlimited
|
||||
restart: always
|
||||
privileged: true
|
||||
environment:
|
||||
LANG: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
TZ: Asia/Shanghai
|
||||
SRS_HOST: 172.16.3.18
|
||||
container_name: im-service
|
||||
volumes:
|
||||
- ./:/hd-znzq/system
|
||||
ports:
|
||||
- 28000:28000
|
||||
# network_mode: host
|
||||
command: java -Dfile.encoding=UTF-8 -jar /hd-znzq/system/im-service-1.0.0-SNAPSHOT.jar
|
||||
app-service:
|
||||
image: 172.16.2.1:8083/java:8_server-jre_unlimited
|
||||
restart: always
|
||||
privileged: true
|
||||
ports:
|
||||
- 8989:8989
|
||||
environment:
|
||||
LANG: en_US.UTF-8
|
||||
LC_ALL: en_US.UTF-8
|
||||
TZ: Asia/Shanghai
|
||||
container_name: app-service
|
||||
volumes:
|
||||
- ./:/hd-znzq/system
|
||||
command: java -Dfile.encoding=UTF-8 -jar /hd-znzq/system/app-service-1.0-SNAPSHOT.jar
|
||||
34
hs-im-server/dev/hd_1.yml
Normal file
34
hs-im-server/dev/hd_1.yml
Normal file
@@ -0,0 +1,34 @@
|
||||
lim:
|
||||
tcpPort: 29000
|
||||
webSocketPort: 29001
|
||||
bossThreadSize: 1
|
||||
workThreadSize: 8
|
||||
heartBeatTime: 20000 #心跳超时时间 单位毫秒
|
||||
brokerId: 1000
|
||||
loginModel: 3
|
||||
logicUrl: http://172.16.3.18:28000/v1
|
||||
# * 多端同步模式:1 只允许一端在线,手机/电脑/web 踢掉除了本client+imel的设备
|
||||
# * 2 允许手机/电脑的一台设备 + web在线 踢掉除了本client+imel的非web端设备
|
||||
# * 3 允许手机和电脑单设备 + web 同时在线 踢掉非本client+imel的同端设备
|
||||
# * 4 允许所有端多设备登录 不踢任何设备
|
||||
|
||||
redis:
|
||||
mode: single # 单机模式:single 哨兵模式:sentinel 集群模式:cluster
|
||||
database: 8
|
||||
password: Mars@23600800
|
||||
timeout: 3000 # 超时时间
|
||||
poolMinIdle: 8 #最小空闲数
|
||||
poolConnTimeout: 3000 # 连接超时时间(毫秒)
|
||||
poolSize: 10 # 连接池大小
|
||||
single: #redis单机配置
|
||||
address: 172.16.2.3:6379
|
||||
rabbitmq:
|
||||
host: 172.16.2.1
|
||||
port: 5672
|
||||
virtualHost: /
|
||||
userName: guest
|
||||
password: guest
|
||||
|
||||
zkConfig:
|
||||
zkAddr: 172.16.2.1:2181
|
||||
zkConnectTimeOut: 5000
|
||||
BIN
hs-im-server/dev/im-message-store-1.0.0-SNAPSHOT.jar
Normal file
BIN
hs-im-server/dev/im-message-store-1.0.0-SNAPSHOT.jar
Normal file
Binary file not shown.
BIN
hs-im-server/dev/im-service-1.0.0-SNAPSHOT.jar
Normal file
BIN
hs-im-server/dev/im-service-1.0.0-SNAPSHOT.jar
Normal file
Binary file not shown.
BIN
hs-im-server/dev/im-tcp-1.0.0-SNAPSHOT.jar
Normal file
BIN
hs-im-server/dev/im-tcp-1.0.0-SNAPSHOT.jar
Normal file
Binary file not shown.
BIN
hs-im-server/hs-im-server.zip
Normal file
BIN
hs-im-server/hs-im-server.zip
Normal file
Binary file not shown.
@@ -1,75 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
||||
<module version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="Spring" name="Spring">
|
||||
<configuration />
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
||||
<output url="file://$MODULE_DIR$/target/classes" />
|
||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-all:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.51" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.lld:im-common:1.0.0-SNAPSHOT" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.9" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.12.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-access:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.redisson:redisson:3.15.6" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.cache:cache-api:1.1.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.reactivex.rxjava3:rxjava:3.0.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jboss.marshalling:jboss-marshalling-river:2.0.11.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jboss.marshalling:jboss-marshalling:2.0.11.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.13" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jodd:jodd-bean:5.1.6" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jodd:jodd-core:5.1.6" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.rabbitmq:amqp-client:5.6.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.github.sgroschupf:zkclient:0.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.zookeeper:zookeeper:3.3.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: jline:jline:0.9.94" level="project" />
|
||||
<orderEntry type="library" name="Maven: junit:junit:4.13" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:2.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: log4j:log4j:1.2.14" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.netflix.feign:feign-core:8.18.0" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="Maven: org.jvnet:animal-sniffer-annotation:1.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.netflix.feign:feign-jackson:8.18.0" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -1,101 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
|
||||
<module version="4">
|
||||
<component name="FacetManager">
|
||||
<facet type="Spring" name="Spring">
|
||||
<configuration />
|
||||
</facet>
|
||||
</component>
|
||||
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
|
||||
<output url="file://$MODULE_DIR$/target/classes" />
|
||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
<orderEntry type="module" module-name="common" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-amqp:2.3.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.3.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.3.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.3.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.13.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.13.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
|
||||
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-messaging:5.2.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.amqp:spring-rabbit:2.2.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.amqp:spring-amqp:2.2.9.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.retry:spring-retry:1.2.5.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:2.3.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.5" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="Maven: mysql:mysql-connector-java:8.0.21" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-boot-starter:3.4.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus:3.4.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-extension:3.4.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-core:3.4.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.baomidou:mybatis-plus-annotation:3.4.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.github.jsqlparser:jsqlparser:4.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.mybatis:mybatis:3.5.6" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.mybatis:mybatis-spring:2.0.5" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.3.2.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.github.jeffreyning:mybatisplus-plus:1.5.1-RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: cn.hutool:hutool-all:5.0.6" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.lld:im-common:1.0.0-SNAPSHOT" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpclient:4.5.9" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.httpcomponents:httpcore:4.4.13" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-logging:commons-logging:1.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.14" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.12.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: ch.qos.logback:logback-access:1.2.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.alibaba:fastjson:1.2.51" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-all:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.27" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.redisson:redisson:3.15.6" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-common:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-codec:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-buffer:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-transport:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-resolver:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-resolver-dns:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-codec-dns:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.netty:netty-handler:4.1.35.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: javax.cache:cache-api:1.1.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.projectreactor:reactor-core:3.3.8.RELEASE" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.reactivestreams:reactive-streams:1.0.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: io.reactivex.rxjava3:rxjava:3.0.12" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jboss.marshalling:jboss-marshalling-river:2.0.11.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jboss.marshalling:jboss-marshalling:2.0.11.Final" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.11.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.13" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jodd:jodd-bean:5.1.6" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.jodd:jodd-core:5.1.6" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.rabbitmq:amqp-client:5.6.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.github.sgroschupf:zkclient:0.1" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.apache.zookeeper:zookeeper:3.3.3" level="project" />
|
||||
<orderEntry type="library" name="Maven: jline:jline:0.9.94" level="project" />
|
||||
<orderEntry type="library" name="Maven: junit:junit:4.13" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:2.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
|
||||
<orderEntry type="library" name="Maven: log4j:log4j:1.2.14" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.netflix.feign:feign-core:8.18.0" level="project" />
|
||||
<orderEntry type="library" scope="RUNTIME" name="Maven: org.jvnet:animal-sniffer-annotation:1.0" level="project" />
|
||||
<orderEntry type="library" name="Maven: com.netflix.feign:feign-jackson:8.18.0" level="project" />
|
||||
</component>
|
||||
</module>
|
||||
@@ -4,11 +4,11 @@ spring:
|
||||
datasource:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
password: beAs0LHX2GyTxMw4
|
||||
url: jdbc:mysql://43.139.191.204:3306:3306/im-core?serverTimezone=UTC&useSSL=false&characterEncoding=UTF8
|
||||
url: jdbc:mysql://43.139.208.48:3306/im-core?serverTimezone=UTC&useSSL=false&characterEncoding=UTF8
|
||||
username: root
|
||||
|
||||
redis:
|
||||
host: 43.139.191.204
|
||||
host: 43.139.208.48
|
||||
port: 6379
|
||||
database: 8
|
||||
jedis:
|
||||
@@ -19,9 +19,9 @@ spring:
|
||||
min-idle: 10
|
||||
password: dSMIXBQrCBXiHHjk123
|
||||
rabbitmq:
|
||||
host: 119.45.242.222
|
||||
host: 43.139.208.48
|
||||
port: 5672
|
||||
addresses: 119.45.242.222
|
||||
addresses: 43.139.208.48
|
||||
username: guest
|
||||
password: guest
|
||||
# virtual-host:
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
spring:
|
||||
profiles:
|
||||
active: prod
|
||||
active: local
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
package com.lld.im.service.call.controller;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.lld.im.common.ResponseVO;
|
||||
@@ -20,6 +22,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@RestController
|
||||
@@ -61,9 +64,26 @@ public class ImCallHistoryController {
|
||||
|
||||
@PostMapping("/callBegin")
|
||||
public ResponseVO callBegin(@RequestBody ImCallHistoryEntity imCallHistoryEntity) {
|
||||
log.info("===========callBegin ");
|
||||
log.info(JSONObject.toJSONString(imCallHistoryEntity));
|
||||
//判断当前房间是否有通话
|
||||
QueryWrapper<ImCallHistoryEntity> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("session_id",imCallHistoryEntity.getSessionId());
|
||||
queryWrapper.eq("status",1);
|
||||
|
||||
List<ImCallHistoryEntity> imCallHistoryEntityList = callHistoryMapper.selectList(queryWrapper);
|
||||
|
||||
//如果存在则直接返回旧的记录
|
||||
if(imCallHistoryEntityList.size()>0){
|
||||
return ResponseVO.successResponse(imCallHistoryEntityList.get(0));
|
||||
}
|
||||
|
||||
// 如果不存在则插入新的记录
|
||||
imCallHistoryEntity.setCreateTime(new Date());
|
||||
imCallHistoryEntity.setStatus("1");
|
||||
|
||||
|
||||
|
||||
ResponseVO<ImUserDataEntity> inviteUserInfo = imUserService.getSingleUserInfo(imCallHistoryEntity.getRoomId(), 10000);
|
||||
ResponseVO<ImUserDataEntity> passiveUserInfo = imUserService.getSingleUserInfo(imCallHistoryEntity.getPassiveId(), 10000);
|
||||
|
||||
@@ -82,6 +102,8 @@ public class ImCallHistoryController {
|
||||
|
||||
@PostMapping("/callHangUp")
|
||||
public ResponseVO callHangUp(@RequestBody ImCallHistoryEntity imCallHistoryEntity) {
|
||||
log.info("===========callHangUp ");
|
||||
log.info(JSONObject.toJSONString(imCallHistoryEntity));
|
||||
imCallHistoryEntity.setStatus("1");
|
||||
|
||||
callHistoryService.updateBySessionId(imCallHistoryEntity);
|
||||
|
||||
@@ -28,5 +28,6 @@ public class ImCallHistoryEntity {
|
||||
|
||||
// 持续时间(秒)
|
||||
private Integer continueSecond;
|
||||
private Integer checkTimes;
|
||||
|
||||
}
|
||||
|
||||
@@ -39,12 +39,15 @@ public class ImCallHistoryService {
|
||||
|
||||
List<ImCallHistoryEntity> imCallHistoryEntityList = callHistoryMapper.selectList(queryWrapper);
|
||||
|
||||
for(ImCallHistoryEntity imCallHistory: imCallHistoryEntityList){
|
||||
imCallHistory.setStatus("2");
|
||||
callHistoryMapper.updateById(imCallHistory);
|
||||
if(imCallHistoryEntityList.size()>0){
|
||||
for(ImCallHistoryEntity imCallHistory: imCallHistoryEntityList){
|
||||
imCallHistory.setStatus("1");
|
||||
callHistoryMapper.updateById(imCallHistory);
|
||||
}
|
||||
}else {
|
||||
callHistoryMapper.insert(callHistory);
|
||||
}
|
||||
|
||||
callHistoryMapper.insert(callHistory);
|
||||
}
|
||||
|
||||
public List<ImCallHistoryEntity> queryListByStatus(String status){
|
||||
@@ -55,6 +58,64 @@ public class ImCallHistoryService {
|
||||
}
|
||||
|
||||
|
||||
public void updateCallHistory(ImCallHistoryEntity callHistory){
|
||||
callHistoryMapper.updateById(callHistory);
|
||||
}
|
||||
|
||||
|
||||
public void closeCallRoomWithError(ImCallHistoryEntity callHistory){
|
||||
log.info("closeCallRoomWithError");
|
||||
log.info(JSONObject.toJSONString(callHistory));
|
||||
Date _now=new Date();
|
||||
QueryWrapper<ImCallHistoryEntity> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("session_id",callHistory.getSessionId());
|
||||
queryWrapper.eq("status",1);
|
||||
|
||||
// end_time
|
||||
ImCallHistoryEntity imCallHistory = callHistoryMapper.selectOne(queryWrapper);
|
||||
|
||||
if(!ObjectUtils.isEmpty(imCallHistory)){
|
||||
imCallHistory.setEndTime(_now);
|
||||
imCallHistory.setStatus("3");
|
||||
Duration duration = Duration.between(imCallHistory.getCreateTime().toInstant(),_now.toInstant());
|
||||
long seconds = TimeUnit.MILLISECONDS.toSeconds(duration.toMillis());
|
||||
Integer i = Long.valueOf(seconds).intValue();
|
||||
imCallHistory.setContinueSecond(i);
|
||||
|
||||
|
||||
//TODO 结束之后通知客户端
|
||||
SendMessageReq req= new SendMessageReq();
|
||||
req.setAppId(10000);
|
||||
req.setFromId(imCallHistory.getInviteId());
|
||||
req.setToId(imCallHistory.getPassiveId());
|
||||
req.setMessageTime(System.currentTimeMillis());
|
||||
// req.setMessageRandom();
|
||||
|
||||
req.setMessageId(UUID.randomUUID().toString().replace("-", ""));
|
||||
req.setImei("uniapp");
|
||||
req.setClientType(1);
|
||||
|
||||
|
||||
Map<String, Object> data = new HashMap<String, Object>();
|
||||
data.put("userId", imCallHistory.getInviteId());
|
||||
data.put("msgType", "CALL_"+imCallHistory.getType());
|
||||
data.put("content", JSONObject.toJSONString(imCallHistory));
|
||||
|
||||
req.setMessageBody(JSONObject.toJSONString(data));
|
||||
|
||||
p2PMessageService.send(req);
|
||||
|
||||
|
||||
callHistoryMapper.updateById(imCallHistory);
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void updateBySessionId(ImCallHistoryEntity callHistory){
|
||||
Date _now=new Date();
|
||||
QueryWrapper<ImCallHistoryEntity> queryWrapper = new QueryWrapper<>();
|
||||
|
||||
@@ -26,6 +26,7 @@ public class WebConfig implements WebMvcConfigurer {
|
||||
.excludePathPatterns("/v1/file/**")
|
||||
.excludePathPatterns("/v1/room/**")
|
||||
.excludePathPatterns("/v1/im_call_history/**")
|
||||
.excludePathPatterns("/v1/message/listMessage")
|
||||
.excludePathPatterns("/v1/message/checkSend");
|
||||
}
|
||||
|
||||
|
||||
@@ -221,9 +221,9 @@ public class MessageSyncService {
|
||||
.collect(Collectors.toMap(ImMessageHistoryEntity::getToId, x -> x));
|
||||
// 合并map到toId
|
||||
fromIdMap.forEach((key,value) -> {
|
||||
toIdMap.merge(key,value,(x,y) -> {
|
||||
if (value.getMessageKey() > y.getMessageKey()) return value;
|
||||
return y;
|
||||
toIdMap.merge(key,value,(v1,v2) -> {
|
||||
if (v1.getMessageKey() > v2.getMessageKey()) return v1;
|
||||
return v2;
|
||||
});
|
||||
});
|
||||
|
||||
@@ -268,7 +268,7 @@ public class MessageSyncService {
|
||||
sessionVos.sort(new Comparator<ImMessageHistoryVo>() {
|
||||
@Override
|
||||
public int compare(ImMessageHistoryVo o1, ImMessageHistoryVo o2) {
|
||||
return o1.getCreateTime().compareTo(o2.getCreateTime());
|
||||
return o2.getCreateTime().compareTo(o1.getCreateTime());
|
||||
}
|
||||
});
|
||||
return sessionVos;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.lld.im.service.room.controller;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.lld.im.common.ResponseVO;
|
||||
import com.lld.im.service.message.model.req.SendMessageReq;
|
||||
import com.lld.im.service.message.service.P2PMessageService;
|
||||
@@ -29,11 +30,15 @@ public class RoomController {
|
||||
|
||||
@PostMapping("/createRoom")
|
||||
public ResponseVO createRoom(@RequestBody ImRoomEntity roomEntity, Integer appId) {
|
||||
log.info("===========createRoom ");
|
||||
log.info(JSONObject.toJSONString(roomEntity));
|
||||
return ResponseVO.successResponse(roomService.createRoom(roomEntity));
|
||||
}
|
||||
|
||||
@PostMapping("/joinRoom")
|
||||
public ResponseVO joinRoom(@RequestBody ImRoomEntity roomEntity, Integer appId) {
|
||||
log.info("===========joinRoom");
|
||||
log.info(roomEntity.toString());
|
||||
return ResponseVO.successResponse(roomService.joinRoom(roomEntity));
|
||||
}
|
||||
|
||||
@@ -44,14 +49,15 @@ public class RoomController {
|
||||
|
||||
@PostMapping("/leaveRoom")
|
||||
public ResponseVO leaveRoom(@RequestBody ImRoomEntity roomEntity, Integer appId) {
|
||||
log.info("===========leaveRoom");
|
||||
roomService.leaveRoom(roomEntity);
|
||||
return ResponseVO.successResponse(roomEntity.getPublishName()+"离开视频房间");
|
||||
}
|
||||
|
||||
@PostMapping("/unpublish")
|
||||
public ResponseVO unpublish(@RequestBody SRSCallBackReq callBackReq) {
|
||||
log.info(callBackReq.toString());
|
||||
|
||||
log.info("===========srs 回调");
|
||||
log.info(JSONObject.toJSONString(callBackReq));
|
||||
try {
|
||||
ImRoomEntity roomEntity = new ImRoomEntity();
|
||||
roomEntity.setRoomId(callBackReq.getApp());
|
||||
|
||||
@@ -1,18 +1,23 @@
|
||||
package com.lld.im.service.room.service;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.lld.im.common.enums.DelFlagEnum;
|
||||
import com.lld.im.service.message.dao.mapper.ImMessageBodyMapper;
|
||||
import com.lld.im.service.room.dao.ImRoomEntity;
|
||||
import com.lld.im.service.room.dao.mapper.ImRoomMapper;
|
||||
import com.lld.im.service.user.dao.ImUserDataEntity;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import lombok.val;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class ImRoomService {
|
||||
@Autowired
|
||||
@@ -20,12 +25,17 @@ public class ImRoomService {
|
||||
|
||||
@Transactional
|
||||
public ImRoomEntity createRoom(ImRoomEntity entity) {
|
||||
log.info("createRoom");
|
||||
log.info(JSONObject.toJSONString(entity));
|
||||
QueryWrapper<ImRoomEntity> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("room_id",entity.getRoomId());
|
||||
queryWrapper.eq("publish_id",entity.getPublishId());
|
||||
List<ImRoomEntity> roomEntityList = imRoomMapper.selectList(queryWrapper);
|
||||
if(roomEntityList.size()>0){
|
||||
imRoomMapper.delete(queryWrapper);
|
||||
ImRoomEntity roomEntity = roomEntityList.get(0);
|
||||
roomEntity.setWebrtcUrl(entity.getWebrtcUrl());
|
||||
imRoomMapper.updateById(roomEntity);
|
||||
return roomEntity;
|
||||
}
|
||||
imRoomMapper.insert(entity);
|
||||
return entity;
|
||||
@@ -33,15 +43,26 @@ public class ImRoomService {
|
||||
|
||||
@Transactional
|
||||
public ImRoomEntity joinRoom(ImRoomEntity entity) {
|
||||
log.info("joinRoom");
|
||||
log.info(JSONObject.toJSONString(entity));
|
||||
|
||||
QueryWrapper<ImRoomEntity> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("room_id",entity.getRoomId());
|
||||
queryWrapper.eq("publish_id",entity.getPublishId());
|
||||
List<ImRoomEntity> roomEntityList = imRoomMapper.selectList(queryWrapper);
|
||||
if(roomEntityList.size()>0){
|
||||
roomEntityList.get(0).setIsOver(0);
|
||||
roomEntityList.get(0).setOffline(0);
|
||||
roomEntityList.get(0).setWebrtcUrl(entity.getWebrtcUrl());
|
||||
imRoomMapper.updateById(roomEntityList.get(0));
|
||||
log.info("=============joinRoom:{}",entity.getWebrtcUrl());
|
||||
if(StringUtils.isBlank(entity.getWebrtcUrl())){
|
||||
return roomEntityList.get(0);
|
||||
}else {
|
||||
roomEntityList.get(0).setIsOver(0);
|
||||
roomEntityList.get(0).setOffline(0);
|
||||
roomEntityList.get(0).setWebrtcUrl(entity.getWebrtcUrl());
|
||||
imRoomMapper.updateById(roomEntityList.get(0));
|
||||
|
||||
return roomEntityList.get(0);
|
||||
}
|
||||
|
||||
}else {
|
||||
entity.setOffline(0);
|
||||
entity.setIsOver(0);
|
||||
@@ -52,6 +73,9 @@ public class ImRoomService {
|
||||
|
||||
|
||||
public void deleteUserFromRoom(ImRoomEntity entity){
|
||||
log.info("deleteUserFromRoom");
|
||||
log.info(JSONObject.toJSONString(entity));
|
||||
|
||||
QueryWrapper<ImRoomEntity> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("room_id",entity.getRoomId());
|
||||
queryWrapper.eq("publish_id",entity.getPublishId());
|
||||
@@ -62,12 +86,18 @@ public class ImRoomService {
|
||||
}
|
||||
|
||||
public void deleteRoomById(Integer id){
|
||||
log.info("deleteRoomById");
|
||||
log.info(id.toString());
|
||||
|
||||
QueryWrapper<ImRoomEntity> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("id",id);
|
||||
imRoomMapper.delete(queryWrapper);
|
||||
}
|
||||
|
||||
public void deleteAllUserFromRoom(String roomId){
|
||||
log.info("deleteAllUserFromRoom");
|
||||
log.info(roomId);
|
||||
|
||||
QueryWrapper<ImRoomEntity> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("room_id",roomId);
|
||||
imRoomMapper.delete(queryWrapper);
|
||||
@@ -98,6 +128,9 @@ public class ImRoomService {
|
||||
return roomEntityList;
|
||||
}
|
||||
public void leaveRoom (ImRoomEntity entity){
|
||||
log.info("leaveRoom");
|
||||
log.info(JSONObject.toJSONString(entity));
|
||||
|
||||
QueryWrapper<ImRoomEntity> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("room_id",entity.getRoomId());
|
||||
queryWrapper.eq("publish_id",entity.getPublishId());
|
||||
|
||||
@@ -30,29 +30,29 @@ public class CallHistoryTask {
|
||||
ImRoomService roomService;
|
||||
|
||||
|
||||
@Scheduled(cron="0/10 * * * * ? ")
|
||||
@Scheduled(cron="0/2 * * * * ? ")
|
||||
public void executeTask(){
|
||||
List<ImCallHistoryEntity> callHistoryEntities = callHistoryService.queryListByStatus("1");
|
||||
for(ImCallHistoryEntity callHistoryEntity: callHistoryEntities){
|
||||
ImRoomEntity imRoomEntity = new ImRoomEntity();
|
||||
imRoomEntity.setRoomId(callHistoryEntity.getRoomId());
|
||||
List<ImRoomEntity> serviceRoomInfo = roomService.getRoomInfo(imRoomEntity);
|
||||
if(serviceRoomInfo.size()<2){
|
||||
log.info("{}房间里面的流少于2路,关掉全部视频流并且判断异常中断",callHistoryEntity.getSessionId());
|
||||
//房间里面的流少于2路,关掉全部视频流并且判断异常中断
|
||||
closeAll(callHistoryEntity,serviceRoomInfo);
|
||||
if(callHistoryEntity.getCheckTimes()>2){
|
||||
ImRoomEntity imRoomEntity = new ImRoomEntity();
|
||||
imRoomEntity.setRoomId(callHistoryEntity.getRoomId());
|
||||
List<ImRoomEntity> serviceRoomInfo = roomService.getRoomInfo(imRoomEntity);
|
||||
if(serviceRoomInfo.size()==0){
|
||||
log.info("{}房间里面没有流,关掉全部视频流并且设置状态为异常中断",callHistoryEntity.getSessionId());
|
||||
//房间里面没有流,关掉全部视频流并且判断异常中断
|
||||
closeAll(callHistoryEntity,serviceRoomInfo);
|
||||
}
|
||||
}else {
|
||||
callHistoryEntity.setCheckTimes(callHistoryEntity.getCheckTimes()+1);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void closeAll(ImCallHistoryEntity callHistoryEntity,List<ImRoomEntity> roomList){
|
||||
callHistoryEntity.setStatus("3");
|
||||
callHistoryService.updateBySessionId(callHistoryEntity);
|
||||
|
||||
if(roomList.size()>0){
|
||||
roomService.deleteAllUserFromRoom(roomList.get(0).getRoomId());
|
||||
}
|
||||
callHistoryService.closeCallRoomWithError(callHistoryEntity);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ public class SRSStreamTask {
|
||||
ImRoomService roomService;
|
||||
|
||||
|
||||
@Scheduled(cron="0/2 * * * * ? ")
|
||||
@Scheduled(cron="0/200 * * * * ? ")
|
||||
public void executeTask() throws Exception {
|
||||
log.info("====================== 执行定时任务 SRSStreamTask");
|
||||
String _url = "http://"+host+":1985/api/v1/streams";
|
||||
@@ -53,12 +53,14 @@ public class SRSStreamTask {
|
||||
List<ImRoomEntity> roomList = roomService.getAllRoomList();
|
||||
for (ImRoomEntity roomEntity:roomList){
|
||||
if(StringUtils.isBlank(roomEntity.getWebrtcUrl())){
|
||||
log.info("webRTC地址为空,移除房间{}",roomEntity.getRoomId());
|
||||
roomService.deleteRoomById(roomEntity.getId());
|
||||
}else {
|
||||
Boolean hasStream=false;
|
||||
List<StreamEntity> streamEntityList = response.getStreams();
|
||||
for (StreamEntity streamEntity:streamEntityList){
|
||||
String webRTCUrl=streamEntity.getTcUrl()+"/"+streamEntity.getName();
|
||||
//如果流存在,则
|
||||
if(StringUtils.equals(roomEntity.getWebrtcUrl(),webRTCUrl)){
|
||||
hasStream=true;
|
||||
break;
|
||||
|
||||
@@ -8,11 +8,11 @@ spring:
|
||||
datasource:
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
password: beAs0LHX2GyTxMw4
|
||||
url: jdbc:mysql://43.139.191.204:3306/im-core?serverTimezone=Asia/Shanghai&useSSL=false&characterEncoding=UTF8
|
||||
url: jdbc:mysql://43.139.208.48:3306/im-core?serverTimezone=Asia/Shanghai&useSSL=false&characterEncoding=UTF8
|
||||
username: root
|
||||
|
||||
redis:
|
||||
host: 43.139.191.204
|
||||
host: 43.139.208.48
|
||||
port: 6379
|
||||
database: 8
|
||||
jedis:
|
||||
@@ -23,9 +23,9 @@ spring:
|
||||
min-idle: 10
|
||||
password: dSMIXBQrCBXiHHjk123
|
||||
rabbitmq:
|
||||
host: 119.45.242.222
|
||||
host: 43.139.208.48
|
||||
port: 5672
|
||||
addresses: 119.45.242.222
|
||||
addresses: 192.168.2.181
|
||||
username: guest
|
||||
password: guest
|
||||
# virtual-host:
|
||||
@@ -59,7 +59,7 @@ server:
|
||||
appConfig:
|
||||
appId: 10000
|
||||
privateKey: 123456
|
||||
zkAddr: 119.45.242.222:2181 # zk连接地址
|
||||
zkAddr: 43.139.208.48:2181 # zk连接地址
|
||||
zkConnectTimeOut: 50000 #zk超时时间
|
||||
imRouteWay: 3 # 路由策略1轮训 2随机 3hash
|
||||
consistentHashWay: 1 # 如果选用一致性hash的话具体hash算法 1 TreeMap 2 自定义Map
|
||||
@@ -75,7 +75,7 @@ appConfig:
|
||||
groupMaxMemberCount: 500
|
||||
sendMessageCheckFriend: false # 发送消息是否校验关系链
|
||||
sendMessageCheckBlack: false # 发送消息是否校验黑名单
|
||||
callbackUrl: http://127.0.0.1:8000/callback
|
||||
callbackUrl: http://43.139.208.48:8000/callback
|
||||
modifyUserAfterCallback: false # 用户资料变更之后回调开关
|
||||
addFriendAfterCallback: false # 添加好友之后回调开关
|
||||
addFriendBeforeCallback: false # 添加好友之前回调开关
|
||||
@@ -130,4 +130,4 @@ minio:
|
||||
bucketName: hd-im
|
||||
|
||||
custom:
|
||||
host: 119.45.242.222
|
||||
host: 43.139.208.48
|
||||
|
||||
@@ -101,8 +101,8 @@ mqQueueName: 123
|
||||
|
||||
mybatis-plus:
|
||||
configuration:
|
||||
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 会正常输出日志
|
||||
# log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
|
||||
#log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 会正常输出日志
|
||||
log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
|
||||
mapper-locations: classpath*:mapper/*.xml
|
||||
global-config:
|
||||
db-config:
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
spring:
|
||||
jackson:
|
||||
time-zone: GMT+8
|
||||
|
||||
profiles:
|
||||
active: prod
|
||||
active: local
|
||||
|
||||
@@ -6,7 +6,7 @@ lim:
|
||||
heartBeatTime: 20000 #心跳超时时间 单位毫秒
|
||||
brokerId: 1000
|
||||
loginModel: 3
|
||||
logicUrl: http://172.16.2.3:28000/v1
|
||||
logicUrl: http://192.168.2.181:28000/v1
|
||||
# * 多端同步模式:1 只允许一端在线,手机/电脑/web 踢掉除了本client+imel的设备
|
||||
# * 2 允许手机/电脑的一台设备 + web在线 踢掉除了本client+imel的非web端设备
|
||||
# * 3 允许手机和电脑单设备 + web 同时在线 踢掉非本client+imel的同端设备
|
||||
@@ -15,20 +15,20 @@ lim:
|
||||
redis:
|
||||
mode: single # 单机模式:single 哨兵模式:sentinel 集群模式:cluster
|
||||
database: 8
|
||||
password: Mars@23600800
|
||||
password: dSMIXBQrCBXiHHjk123
|
||||
timeout: 3000 # 超时时间
|
||||
poolMinIdle: 8 #最小空闲数
|
||||
poolConnTimeout: 3000 # 连接超时时间(毫秒)
|
||||
poolSize: 10 # 连接池大小
|
||||
single: #redis单机配置
|
||||
address: 172.16.2.3:6379
|
||||
address: 43.139.208.48
|
||||
rabbitmq:
|
||||
host: 172.16.2.1
|
||||
host: 192.168.2.181
|
||||
port: 5672
|
||||
virtualHost: /
|
||||
userName: guest
|
||||
password: guest
|
||||
|
||||
zkConfig:
|
||||
zkAddr: 172.16.2.1:2181
|
||||
zkAddr: 192.168.2.181:2181
|
||||
zkConnectTimeOut: 5000
|
||||
|
||||
@@ -96,6 +96,16 @@
|
||||
<groupId>com.netflix.feign</groupId>
|
||||
<artifactId>feign-jackson</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-core</artifactId>
|
||||
<version>3.4.2</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
console.log('App Show')
|
||||
|
||||
appInit(500).then((res) => {
|
||||
// getAddressList
|
||||
console.log("获取到token,创建长链接")
|
||||
this.$store.dispatch('getAddressList');
|
||||
setTimeout(() => {
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
export default class config{
|
||||
static prod="online_not"
|
||||
static prod="online"
|
||||
static getZnzqApiUrl(){
|
||||
if(process.env.NODE_ENV === 'development' ){
|
||||
return 'http://work.ii999.live:19002/znzq'
|
||||
}else{
|
||||
if(this.prod=="online"){
|
||||
return 'http://work.ii999.live:19002/znzq'
|
||||
return '/znzq'
|
||||
}else{
|
||||
return '/znzq'
|
||||
}
|
||||
@@ -28,7 +28,7 @@ export default class config{
|
||||
return `http://localhost:8080/hd-glasses-app/#/call_room?showInviteConfirmDialog=1&isForce=0&isPublish=${isPublish}&isPlayer=${isPlayer}&uid=${userid}&room=${room}&hasVideo=${hasVideo}&uname=${uname}&tuid=${tuid}`
|
||||
}else{
|
||||
if(this.prod=="online"){
|
||||
return `https://119.45.242.222/hd-glasses-app/#/call_room?showInviteConfirmDialog=1&isForce=0&isPublish=${isPublish}&isPlayer=${isPlayer}&uid=${userid}&room=${room}&hasVideo=${hasVideo}&uname=${uname}&tuid=${tuid}`
|
||||
return `https://43.139.208.48/hd-glasses-app/#/call_room?showInviteConfirmDialog=1&isForce=0&isPublish=${isPublish}&isPlayer=${isPlayer}&uid=${userid}&room=${room}&hasVideo=${hasVideo}&uname=${uname}&tuid=${tuid}`
|
||||
}else{
|
||||
return `https://172.16.3.18/hd-glasses-app/#/call_room?showInviteConfirmDialog=1&isForce=0&isPublish=${isPublish}&isPlayer=${isPlayer}&uid=${userid}&room=${room}&hasVideo=${hasVideo}&uname=${uname}&tuid=${tuid}`
|
||||
}
|
||||
@@ -39,7 +39,7 @@ export default class config{
|
||||
return 'webrtc://119.45.242.222/'
|
||||
}else{
|
||||
if(this.prod=="online"){
|
||||
return 'webrtc://119.45.242.222/'
|
||||
return 'webrtc://43.139.208.48/'
|
||||
}else{
|
||||
return 'webrtc://172.16.3.18/'
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -540,15 +540,21 @@ export default {
|
||||
}
|
||||
}
|
||||
//TODO 需要请求接口获取真实的消息时间
|
||||
/*
|
||||
chatWindowData.push(msgOffline)
|
||||
store.dispatch('updateChatById', {
|
||||
userId: userId,
|
||||
data: chatWindowData
|
||||
store.dispatch('updateChatById', {
|
||||
userId: userId,
|
||||
data: chatWindowData
|
||||
})
|
||||
store.dispatch('updateChatListInfoById', {
|
||||
userId: userId,
|
||||
data: msgList
|
||||
})
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
store.dispatch('tabBarpull')
|
||||
store.dispatch('updateChatDataState', userId);
|
||||
});
|
||||
|
||||
@@ -139,9 +139,7 @@ export default {
|
||||
// console.warn(res)
|
||||
// })
|
||||
|
||||
sdk.getUserConversationList(0).then(res => {
|
||||
console.warn(res)
|
||||
})
|
||||
store.dispatch('queryConversationList')
|
||||
|
||||
|
||||
} else {
|
||||
|
||||
@@ -16,7 +16,6 @@ import App from './App'
|
||||
|
||||
|
||||
|
||||
|
||||
Vue.config.productionTip = false
|
||||
|
||||
Vue.prototype.$socketTask = socketTask;
|
||||
|
||||
@@ -138,6 +138,70 @@ const store = new Vuex.Store({
|
||||
})
|
||||
})
|
||||
},
|
||||
queryConversationList(context){
|
||||
const userId = uni.getStorageSync("userId")
|
||||
console.log("==================开始 获取会话列表")
|
||||
_im.queryConversationList().then((res) => {
|
||||
console.log("==================已经获取到会话列表")
|
||||
console.log(res)
|
||||
if(res.code==200){
|
||||
var retdata = publicFc.getKeyObjectStorage(userId + '_' +
|
||||
'chatlistData')
|
||||
var _newConversationList=[]
|
||||
res.data.map((item)=>{
|
||||
console.log(item)
|
||||
var _userId=item.ownerId==item.fromId?item.toId:item.fromId
|
||||
|
||||
console.log("会话对方id:",_userId)
|
||||
|
||||
_im.getSingleUserInfo(_userId).then((userInfo) => {
|
||||
var detail = userInfo.data
|
||||
console.log("会话对方nickName:",detail.nickName)
|
||||
|
||||
item.messageBody = JSON.parse(item.messageBody)
|
||||
|
||||
|
||||
try {
|
||||
if (item.messageBody.msgType == "CALL_video") {
|
||||
item.messageBody.content = "【视频通话】"
|
||||
}
|
||||
|
||||
if (item.messageBody.msgType == "CALL_voice") {
|
||||
item.messageBody.content = "【语音通话】"
|
||||
}
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
}
|
||||
|
||||
|
||||
context.dispatch('updateChatListInfoById', {
|
||||
userId: _userId,
|
||||
data: {
|
||||
content: item.messageBody.content,
|
||||
userId: _userId,
|
||||
personId: _userId,
|
||||
nickName: detail.nickName,
|
||||
portrait: detail.photo,
|
||||
time: dayjs(item.createTime).format(
|
||||
"YYYY/MM/DD HH:mm:ss"),
|
||||
num: item.num,
|
||||
windowType: 'SINGLE',
|
||||
disturb: 'N', //是否静默消息
|
||||
top: 'N', //是否置顶
|
||||
userType: 'SINGLE'
|
||||
}
|
||||
})
|
||||
|
||||
context.dispatch('tabBarpull')
|
||||
|
||||
|
||||
})
|
||||
|
||||
})
|
||||
|
||||
}
|
||||
})
|
||||
},
|
||||
updateChartHistoryFromServerLimit5(context, data) {
|
||||
const _userId = uni.getStorageSync("userId")
|
||||
const _userInfo = uni.getStorageSync("userInfo")
|
||||
@@ -160,7 +224,7 @@ const store = new Vuex.Store({
|
||||
list: []
|
||||
}
|
||||
var _serverMsgList = []
|
||||
_im.getChatMessageHistoryList(data.userId, 1, 5).then((res) => {
|
||||
_im.getChatMessageHistoryList(data.userId, 1, 3).then((res) => {
|
||||
res.data.map((item) => {
|
||||
item.messageBody = JSON.parse(item.messageBody)
|
||||
var obj = {
|
||||
@@ -212,44 +276,6 @@ const store = new Vuex.Store({
|
||||
})
|
||||
}
|
||||
|
||||
const _obj = newCurrentUserMsgList[newCurrentUserMsgList
|
||||
.length - 1]
|
||||
|
||||
try {
|
||||
var _content = JSON.parse(_obj.content)
|
||||
|
||||
if (_obj.msgType == "CALL_video") {
|
||||
_obj.content = "【视频通话】"
|
||||
}
|
||||
|
||||
if (_obj.msgType == "CALL_voice") {
|
||||
_obj.content = "【语音通话】"
|
||||
}
|
||||
//判断头像是谁的
|
||||
|
||||
context.dispatch('updateChatListInfoById', {
|
||||
userId: data.userId,
|
||||
data: {
|
||||
content: _obj.content,
|
||||
userId: data.userId,
|
||||
personId: _userId,
|
||||
nickName: detail.nickName,
|
||||
portrait: _userId == _obj.fromId ? _userInfo
|
||||
.photo : detail.photo,
|
||||
time: dayjs(_obj.time).format(
|
||||
"YYYY/MM/DD HH:mm:ss"),
|
||||
num: 0,
|
||||
windowType: 'SINGLE',
|
||||
disturb: 'N', //是否静默消息
|
||||
top: 'N', //是否置顶
|
||||
userType: 'SINGLE'
|
||||
}
|
||||
})
|
||||
} catch (e) {
|
||||
console.log(e)
|
||||
//TODO handle the exception
|
||||
}
|
||||
|
||||
})
|
||||
})
|
||||
},
|
||||
@@ -307,38 +333,6 @@ const store = new Vuex.Store({
|
||||
|
||||
context.dispatch('getchatDatalist');
|
||||
|
||||
const _obj = _serverMsgList[_serverMsgList.length - 1]
|
||||
|
||||
var _content = JSON.parse(_obj.content)
|
||||
|
||||
if (_obj.msgType == "CALL_video") {
|
||||
_obj.content = "【视频通话】"
|
||||
}
|
||||
|
||||
if (_obj.msgType == "CALL_voice") {
|
||||
_obj.content = "【语音通话】"
|
||||
}
|
||||
//判断头像是谁的
|
||||
|
||||
|
||||
context.dispatch('updateChatListInfoById', {
|
||||
userId: data.userId,
|
||||
data: {
|
||||
content: _obj.content,
|
||||
userId: data.userId,
|
||||
personId: _userId,
|
||||
nickName: detail.nickName,
|
||||
portrait: _userId == _obj.fromId ? _userInfo
|
||||
.photo : detail.photo,
|
||||
time: dayjs(_obj.time).format(
|
||||
"YYYY/MM/DD HH:mm:ss"),
|
||||
num: 0,
|
||||
windowType: 'SINGLE',
|
||||
disturb: 'N', //是否静默消息
|
||||
top: 'N', //是否置顶
|
||||
userType: 'SINGLE'
|
||||
}
|
||||
})
|
||||
|
||||
})
|
||||
})
|
||||
@@ -561,7 +555,9 @@ const store = new Vuex.Store({
|
||||
getAddressList(context) {
|
||||
//获取通讯录,存储通讯录数据到本地
|
||||
customHttp.customHttp.get('/api/im/app/addressList', {
|
||||
params: {},
|
||||
params: {
|
||||
|
||||
},
|
||||
/* 会加在url上 */
|
||||
header: {},
|
||||
/* 会与全局header合并,如有同名属性,局部覆盖全局 */
|
||||
@@ -577,6 +573,8 @@ const store = new Vuex.Store({
|
||||
if (res.data.code == 200) {
|
||||
var records = res.data.result.records
|
||||
context.state.addressList = records
|
||||
localForage.setItem("addressList", records)
|
||||
|
||||
}
|
||||
}
|
||||
}).catch(err => {
|
||||
|
||||
@@ -28,10 +28,10 @@
|
||||
<view v-if="showtool || showEmojitool" :style="'height:558rpx'"></view>
|
||||
<view class="zfb-tk-send-tool" :style="'transform: translateY(-' + keyboardHeight + 'px)'">
|
||||
<view class="zfb-tk-send-tool-c">
|
||||
<view class="zfb-tk-send-tool-icon wxfont" @click="changeShowVice"
|
||||
:class="showVice ? 'jianpan' : 'yuyin2'"></view>
|
||||
<!-- <view class="zfb-tk-send-tool-icon wxfont" @click="changeShowVice"
|
||||
:class="showVice ? 'jianpan' : 'yuyin2'"></view> -->
|
||||
<view class="zfb-tk-send-tool-vioce" v-if="showVice">
|
||||
<view class="zfb-tk-send-tool-vioce-item" @longpress="startRecord" @touchend="endRecord">按住说话</view>
|
||||
<!-- <view class="zfb-tk-send-tool-vioce-item" @longpress="startRecord" @touchend="endRecord">按住说话</view> -->
|
||||
</view>
|
||||
<view v-else class="zfb-tk-send-tool-input-box" @click="msgFocus = true"><textarea
|
||||
@focus="showtool = false" :focus="msgFocus" class="zfb-tk-send-tool-input"
|
||||
@@ -49,7 +49,7 @@
|
||||
发送</view>
|
||||
</template>
|
||||
|
||||
<view v-else @click="changeTool" class="zfb-tk-send-tool-more wxfont gengduo"></view>
|
||||
<view @click="changeTool" class="zfb-tk-send-tool-more wxfont gengduo"></view>
|
||||
</view>
|
||||
<view v-if="showtool" class="zfb-tk-send-tools">
|
||||
<template v-for="(v, i) in toolist">
|
||||
@@ -199,7 +199,7 @@
|
||||
},
|
||||
onLoad(e) {
|
||||
|
||||
uni.$on('PageScroll', ()=>{
|
||||
uni.$on('PageScroll', () => {
|
||||
this.scrolltoBottom()
|
||||
})
|
||||
|
||||
@@ -280,12 +280,12 @@
|
||||
// updateChartHistoryFromServer
|
||||
},
|
||||
onShow() {
|
||||
const hd_gps_location = localStorage.getItem("hd_gps_location")
|
||||
if (hd_gps_location != null) {
|
||||
const client = localStorage.getItem("client")
|
||||
if (client == "app") {
|
||||
this.isMobile = true
|
||||
}
|
||||
// TODO PC开发
|
||||
this.isMobile = true
|
||||
// this.isMobile = true
|
||||
|
||||
if (this.chatListInfo && this.chatListInfo.nickName) {
|
||||
uni.setNavigationBarTitle({
|
||||
@@ -363,6 +363,19 @@
|
||||
console.log("########### 此时需要发送已读回执 ###########")
|
||||
this.$store.dispatch('sendP2PMessageReciveAck', message)
|
||||
|
||||
setTimeout(() => {
|
||||
this.$store.dispatch('updateChartHistoryFromServerLimit5', {
|
||||
userId: this.talkTo.userId,
|
||||
data: ""
|
||||
})
|
||||
setTimeout(() => {
|
||||
this.$store.dispatch('updateChartHistoryFromServerLimit5', {
|
||||
userId: this.talkTo.userId,
|
||||
data: ""
|
||||
})
|
||||
}, 1000)
|
||||
}, 1500)
|
||||
|
||||
},
|
||||
addMsg(e) {
|
||||
this.msg += e;
|
||||
@@ -999,7 +1012,7 @@
|
||||
}
|
||||
|
||||
.zfb-tk-main {
|
||||
padding: 55rpx 12px;
|
||||
padding: 80rpx 12px;
|
||||
padding-bottom: 112rpx;
|
||||
}
|
||||
|
||||
|
||||
@@ -61,6 +61,16 @@
|
||||
console.log("首页获取到url参数")
|
||||
console.log(options)
|
||||
console.log(location.href)
|
||||
|
||||
// // 监听接收聊天信息
|
||||
uni.$on('onP2PMessage', this.onMessage)
|
||||
|
||||
//
|
||||
if (options.client) {
|
||||
uni.setStorageSync("client", options.client)
|
||||
}
|
||||
|
||||
|
||||
if (options.imUserSign) {
|
||||
uni.showLoading({
|
||||
title: "数据加载中...",
|
||||
@@ -185,6 +195,7 @@
|
||||
},
|
||||
onShow() {
|
||||
var i=0
|
||||
this.$store.dispatch('queryConversationList');
|
||||
this.$store.dispatch('tabBarpull');
|
||||
this.timer = setInterval(() => {
|
||||
i=i+1;
|
||||
@@ -204,6 +215,11 @@
|
||||
console.log('beforeUnmount');
|
||||
},
|
||||
methods: {
|
||||
onMessage(){
|
||||
setTimeout(() => {
|
||||
this.$store.dispatch('queryConversationList')
|
||||
}, 1000)
|
||||
},
|
||||
longpressItem(e, i, v) {
|
||||
// console.log(e,i,v)
|
||||
this.longTapItemKey = i;
|
||||
|
||||
@@ -72,7 +72,9 @@
|
||||
|
||||
// 局部修改配置,局部配置优先级高于全局配置
|
||||
customHttp.customHttp.get('/api/im/app/addressList', {
|
||||
params: {}, /* 会加在url上 */
|
||||
params: {
|
||||
pageSize:1000
|
||||
}, /* 会加在url上 */
|
||||
header: {}, /* 会与全局header合并,如有同名属性,局部覆盖全局 */
|
||||
dataType: 'json',
|
||||
// 注:如果局部custom与全局custom有同名属性,则后面的属性会覆盖前面的属性,相当于Object.assign(全局,局部)
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
依赖安装
|
||||
|
||||
yarn install
|
||||
|
||||
核心SDK使用Typescript开发, 使用js-conditional-compile-loader插件条件编译出微信小程序端, Web网页端使用的js sdk
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
"description": "",
|
||||
"main": "src/lim.ts",
|
||||
"scripts": {
|
||||
"preview": "yarn install",
|
||||
"build:weblib": "cross-env NODE_ENV=production platform=web webpack --mode=production --config ./build/webpack.lib.config.js",
|
||||
"build:unilib": "cross-env NODE_ENV=production platform=uniapp webpack --mode=production --config ./build/webpack.lib.config.js",
|
||||
"build:wxlib": "cross-env NODE_ENV=production platform=wx webpack --mode=production --config ./build/webpack.lib.config.js",
|
||||
|
||||
@@ -325,24 +325,8 @@ export class ImClient {
|
||||
}
|
||||
|
||||
|
||||
public getUserConversationList(lastSequence:Long): Promise<any> {
|
||||
return new Promise((resolve, _) => {
|
||||
let api = new HttpApi(this.httpUrl);
|
||||
let resp = api.call("/conversation/syncConversationList", this.getRequestParams(), { userId: this.userId,appId:this.appId,maxLimit:100, lastSequence:lastSequence,operater:this.userId })
|
||||
resolve(resp);
|
||||
})
|
||||
}
|
||||
|
||||
public queryMsgDetailsByMessageKey(messageKey:Long): Promise<any> {
|
||||
return new Promise((resolve, _) => {
|
||||
let api = new HttpApi(this.httpUrl);
|
||||
let resp = api.call("/message/queryMsgDetailsByMessageKey", this.getRequestParams(), { appId:this.appId, messageKey:messageKey,operater:this.userId })
|
||||
resolve(resp);
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
public getChatMessageHistoryList(uid:String,offset:Long,limit:Long): Promise<any> {
|
||||
public getChatMessageHistoryList(uid:String,offset:any,limit:any): Promise<any> {
|
||||
return new Promise((resolve, _) => {
|
||||
let api = new HttpApi(this.httpUrl);
|
||||
let resp = api.call("/message/chatHistory", this.getRequestParams(), { userId: uid,appId:this.appId,offset:offset, limit:limit,operater:this.userId })
|
||||
@@ -350,6 +334,13 @@ export class ImClient {
|
||||
})
|
||||
}
|
||||
|
||||
public queryConversationList():Promise<any>{
|
||||
return new Promise((resolve, _) => {
|
||||
let api = new HttpApi(this.httpUrl);
|
||||
let resp = api.call("/message/listMessage", this.getRequestParams(), { userId: this.userId,appId:this.appId,maxLimit:100, lastSequence:0,operater:this.userId })
|
||||
resolve(resp);
|
||||
})
|
||||
}
|
||||
|
||||
public createRoom(room:any): Promise<any> {
|
||||
return new Promise((resolve,_)=>{
|
||||
@@ -358,6 +349,7 @@ export class ImClient {
|
||||
return resp;
|
||||
})
|
||||
}
|
||||
|
||||
public joinRoom(room:any): Promise<any> {
|
||||
return new Promise((resolve,_)=>{
|
||||
let api = new HttpApi(this.httpUrl);
|
||||
@@ -477,6 +469,7 @@ export class ImClient {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
export let limLogin = async (url: string, req: LoginPack, imClient: ImClient): Promise<{ success: boolean, err?: Error, conn: w3cwebsocket }> => {
|
||||
|
||||
Reference in New Issue
Block a user