WGShare.Client.Wx/utils/singlr.ts

267 lines
6.6 KiB
TypeScript

let connection = '' as any;
// let url = 'http://192.168.2.9:5192'
let url = 'https://meeting-api.23544.com/pc'
// let url = 'https://meeting-api.23544.com/test29'
import * as signalR from "signalr-for-wx";
import { agora } from "./agora";
export const startSignalr = async (callBack: Function) => {
wx.getStorage({
key: "user",
success(res: any) {
connection = new signalR.HubConnectionBuilder()
.withUrl(`${url}/session-manage`, {
skipNegotiation: true,
transport: signalR.HttpTransportType.WebSockets,
accessTokenFactory: () => res.data.token
})
.build();
connection.start().then(() => {
callBack()
}).catch((err) => {
callBack('服务器启动失败!请稍后重试。')
})
connection.onclose(() => {
startConnection()
});
}
})
function startConnection() {
const routes = getCurrentPages()
if (connection.state !== signalR.HubConnectionState.Connected && routes[routes.length - 1].route === 'pages/meeting/index') {
connection.start().then(() => {
}).catch(err => {
setTimeout(startConnection, 3000);
});
}
}
}
export const onInvoke = async (str: string, data: any) => {
switch (str) {
case 'sendChannelMsg':
await connection.invoke(str, data.roomNum, data.msg)
break;
case 'sendOper':
// 4:屏幕共享
await connection.invoke(str, data.roomNum, data.type)
break;
case 'getDrivers':
// 获取某个人的设备列表
await connection.invoke(str, data.uid)
break;
case 'sendDrivers':
// 发送设备列表给某个人
await connection.invoke(str, data.uid, data.driversJsonString)
break;
case 'setDrivers':
// 设置某个人的设备列表
await connection.invoke(str, data.uid, data.driversJsonString)
break;
case 'joinChannel':
// 加入房间
await connection.invoke(str, data.roomNum, data.enableMicr, data.enableCamera, data.isRoomManager || false)
break;
case 'levelChannel':
// 离开房间
await connection.invoke(str, data.roomNum)
break;
case 'SetSpeakerCallback':
// 发言人设置成功
await connection.invoke(str, data)
break;
}
}
export const onSignalr = (callBack: Function) => {
if (connection) {
// 聊天
connection.on("ReceiveMessage", (uid: string, userName: string, message: string, timestamp: string) => {
callBack({
key: 'ReceiveMessage',
uid, message, userName, timestamp
})
});
// 扩展操作
connection.on("Operation", (type: number) => {
callBack({
key: 'Operation',
type
})
});
// 移出会议
connection.on("ForceExitRoom", () => {
callBack({
key: 'ForceExitRoom',
})
});
// 全员离开房间
connection.on("AllLeave", () => {
callBack({
key: 'AllLeave',
})
});
// 全员看他
connection.on("ShowUser", (uid: string, uname: string, operUid: string, operUserName: string) => {
callBack({
key: 'ShowUser',
uid,
uname,
operUid,
operUserName,
})
});
// 更新视图模式
connection.on("RefreshView", (type: string) => {
callBack({
key: 'RefreshView',
type
})
});
// 用户加入频道回调
connection.on("UserJoined", (user: any) => {
callBack({
key: 'UserJoined',
user,
})
});
// 用户退出频道回调
connection.on("UserLeave", (uid: string,) => {
callBack({
key: 'UserLeave',
uid,
})
});
// 所有用户开闭麦
connection.on("OperAllMicr", (enableMicr: boolean, uid: string) => {
callBack({
key: 'OperAllMicr',
enableMicr,
uid
})
});
// 用户关闭开启麦克风
connection.on("OperMicr", (user: any, operUid: string) => {
callBack({
key: 'OperMicr',
user,
operUid
})
});
// 用户开启关闭摄像头
connection.on("OperCamera", (user: any, operUid: string) => {
callBack({
key: 'OperCamera',
user,
operUid
})
});
// 发言人用户信息刷新
connection.on("ManagerRefresh", (user: any, uid: string) => {
callBack({
key: 'ManagerRefresh',
user,
uid
})
});
// 申请发言
connection.on("ApplyToSpeak", (uid: string, uname: string) => {
callBack({
key: 'ApplyToSpeak',
uid,
uname
})
});
// 管理员查看随机用户
connection.on("Watch", (watchUids: string[]) => {
callBack({
key: 'Watch',
watchUids
})
});
// 设备列表
connection.on("DriverList", (callerUid: string) => {
callBack({
key: 'DriverList',
callerUid
})
});
// 设置设备
connection.on("SaveDriver", (driver: string) => {
callBack({
key: 'SaveDriver',
driver
})
});
// 显示设备列表
connection.on("ShowDriverList", (driversJsonString: string) => {
callBack({
key: 'ShowDriverList',
driversJsonString
})
});
// 设置发言人
connection.on("SetSpeaker", (RoomManagerInputDTO) => {
callBack({
key: 'SetSpeaker',
RoomManagerInputDTO
})
});
}
}
export const onStop = async () => {
agora.destroy();
if (connection) {
connection.stop()
connection = '';
}
}
export const getSignIr = () => {
return connection ? connection.state : ''
}
export const onOtherSignalr = (callBack: Function) => {
if (connection) {
// 邀请
connection.on("Invitation", (roomNum: string, roomName: string, InviterName: string) => {
callBack({
key: 'Invitation',
roomNum, roomName, InviterName
})
});
// 退出
connection.on("ForceLogout", (msg: string) => {
callBack({
key: 'ForceLogout',
msg
})
});
}
}
export const offSignalr = () => {
if (connection) {
connection.off('ReceiveMessage');
connection.off('Operation');
connection.off('ForceExitRoom');
connection.off('AllLeave');
connection.off('ShowUser');
connection.off('RefreshView');
connection.off('UserJoined');
connection.off('UserLeave');
connection.off('OperAllMicr');
connection.off('OperMicr');
connection.off('OperCamera');
connection.off('ManagerRefresh');
connection.off('ApplyToSpeak');
connection.off('Watch');
connection.off('DriverList');
connection.off('SetDriver');
connection.off('ShowDriverList');
connection.off('SetSpeaker');
}
}