153 lines
4.7 KiB
JavaScript
153 lines
4.7 KiB
JavaScript
/**
|
||
* Description: atmosphere服务类
|
||
* Author: tiansiyuan
|
||
* Date: 2020/5/16 13:49:15
|
||
*/
|
||
|
||
import store from '@/store';
|
||
import { updateStatusbyRoomIdAndUserId } from '@/api/plotting/plotting';
|
||
|
||
const atmosphere = window.atmosphere || {};
|
||
|
||
const RoomService = {
|
||
/**
|
||
* 创建标绘对象
|
||
* url:标绘room的地址
|
||
*/
|
||
create(url) {
|
||
|
||
const service = {
|
||
showPrompt: true,
|
||
parent: null,
|
||
message: {
|
||
onOpen: "连接标绘房间成功",
|
||
onClientTimeout: "消息发送失败",
|
||
onError: "标绘服务器内部错误,请刷新页面重新接入",
|
||
onReconnect: "掉线重连....请稍候",
|
||
onTransportFailure: "客户端不支持websocket,请更换浏览器",
|
||
},
|
||
onMessage(msg) {},
|
||
onReopen() {}
|
||
};
|
||
|
||
let connectedEndPoint = null;
|
||
|
||
service.join = function(userType, id, roomId) {
|
||
debugger;
|
||
// 如果url为空,说明还没有创建协同标绘房间。
|
||
// 如果connectedEndPoint不为空,说明当前已经连接到一个协同标绘房间,重新连接需要先退出当前房间。
|
||
if (url !== '' && connectedEndPoint == null) {
|
||
let request = {
|
||
url: url,
|
||
transport: 'websocket',
|
||
fallbackTransport: 'websocket', // 只支持websocket方式
|
||
logLevel: 'debug',
|
||
maxReconnectOnClose: 3, // 重连三次
|
||
reconnectInterval: 15000, // 每次重连的时间间隔为2秒
|
||
reconnectOnServerError: true,
|
||
// 成功建立连接回调函数
|
||
onOpen(response) {
|
||
console.log('成功链接', response);
|
||
if (service.showPrompt) {
|
||
console.log('标绘房间连接成功!');
|
||
}
|
||
switch (userType) {
|
||
case 'platform':
|
||
if (id !== store.getters.hostOrgId) {
|
||
service.send({
|
||
id: id,
|
||
status: 1,
|
||
userType: userType,
|
||
roomId: roomId,
|
||
type: 'status',
|
||
});
|
||
}
|
||
break;
|
||
case 'app':
|
||
service.send({
|
||
id: id,
|
||
status: 1,
|
||
userType: userType,
|
||
roomId: roomId,
|
||
type: 'status',
|
||
});
|
||
updateStatusbyRoomIdAndUserId(roomId, id, 1);
|
||
break;
|
||
default:
|
||
}
|
||
},
|
||
onReopen(request, response) {
|
||
location.reload();
|
||
},
|
||
// 收到atmosphere消息的回调函数
|
||
onMessage(response) {
|
||
if (response.state === 'messageReceived' && response.status === 200) {
|
||
if (service.onMessage != null && typeof (service.onMessage) == 'function') {
|
||
service.onMessage(response.responseBody);
|
||
}
|
||
}
|
||
},
|
||
// 客户端request超时回调函数
|
||
onClientTimeout(request) {
|
||
if (service.showPrompt) {
|
||
console.log('onClientTimeout');
|
||
}
|
||
},
|
||
// 收到未知错误回调函数
|
||
onError(response) {
|
||
console.log('res', response);
|
||
if (service.showPrompt) {
|
||
console.log('onError');
|
||
}
|
||
},
|
||
// 成功重建连接回调函数
|
||
onReconnect(request, response) {
|
||
if (service.showPrompt) {
|
||
}
|
||
},
|
||
// transport类型不支持回调函数
|
||
onTransportFailure(errMsg, request) {
|
||
if (service.showPrompt) {
|
||
}
|
||
}
|
||
|
||
};
|
||
|
||
connectedEndPoint = atmosphere.subscribe(request);
|
||
} else {
|
||
console.log('No room has been created or connection has been established already!');
|
||
}
|
||
};
|
||
|
||
/**
|
||
* 退出标绘room
|
||
*/
|
||
service.leave = function() {
|
||
atmosphere.unsubscribe();
|
||
connectedEndPoint = null;
|
||
};
|
||
|
||
/**
|
||
* 发送标绘内容
|
||
*/
|
||
service.send = function(message) {
|
||
console.log('通过atmosphere发送的消息:%o', message);
|
||
if (connectedEndPoint == null) {
|
||
console.log('please establish the connection before sending message!');
|
||
return false;
|
||
}
|
||
|
||
if (connectedEndPoint.request.isOpen === false) {
|
||
console.log('current connection is closed!');
|
||
return false;
|
||
}
|
||
const msg = JSON.stringify(message);
|
||
connectedEndPoint.push(msg);
|
||
};
|
||
|
||
return service;
|
||
}
|
||
};
|
||
|
||
export default RoomService;
|