You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.7 KiB
57 lines
1.7 KiB
import * as signalR from '@microsoft/signalr' |
|
export default { |
|
SR: {}, |
|
// 初始化连接 |
|
initSR: function (id) { |
|
const that = this |
|
// // 连接 SignalR |
|
const options: signalR.IHttpConnectionOptions = { |
|
accessTokenFactory: async () => { |
|
return sessionStorage.getItem('token') |
|
} |
|
} |
|
// 1.获取系统中定义的baseURL |
|
const url = '/hubs/taskchat' |
|
// 2.初始化连接 |
|
that.SR = new signalR.HubConnectionBuilder() |
|
.withUrl(url, options) |
|
.configureLogging(signalR.LogLevel.Information) |
|
.build(); |
|
|
|
// 3. 在停止signalR时,不让onclose内的 start执行 |
|
(that.SR as any).flag = true |
|
// 4.启动连接的方法 |
|
async function start() { |
|
try { |
|
await (that.SR as any).start().then(() => { |
|
console.log('加入聊天室',id) |
|
that.SR.send("joinRoom", id) |
|
}); |
|
} catch (err) { |
|
setTimeout(start, 5000); |
|
} |
|
} |
|
// 5.关闭之后重连 |
|
(that.SR as any).onclose(async () => { |
|
if ((that.SR as any).flag) { |
|
await start(); |
|
} |
|
}); |
|
|
|
// 6.启动连接 |
|
start(); |
|
}, |
|
// 停止连接,因为调用that.SR.stop(),同时会触发5操作,所以用了flag |
|
stopSR: function () { |
|
let that = this; |
|
(that.SR as any).flag = false |
|
async function stop() { |
|
try { |
|
await that.SR.stop(); |
|
console.log("signaR退出成功"); |
|
} catch (err) { } |
|
} |
|
stop(); |
|
} |
|
|
|
}; |