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;
|