159 lines
4.6 KiB
Vue
159 lines
4.6 KiB
Vue
|
/**
|
|||
|
* 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
|