This commit is contained in:
parent
e2a0427f57
commit
83c337e5c4
|
|
@ -10,10 +10,11 @@ import Meeting from '@/page/Meeting/index'
|
||||||
import NotFound from '@/page/NotFound/index'
|
import NotFound from '@/page/NotFound/index'
|
||||||
import { storage } from '@/utils'
|
import { storage } from '@/utils'
|
||||||
import { Spin } from "antd";
|
import { Spin } from "antd";
|
||||||
import { onInvitation } from "@/utils/package/signalr";
|
import { onInvitation, onInvoke, onReconnected } from "@/utils/package/signalr";
|
||||||
import JoinMeetingModal from "./components/JoinMeetingModal";
|
import JoinMeetingModal from "./components/JoinMeetingModal";
|
||||||
import * as CryptoJS from 'crypto-js';
|
import * as CryptoJS from 'crypto-js';
|
||||||
import { PostLogin } from "@/api/Login";
|
import { PostLogin } from "@/api/Login";
|
||||||
|
import { startSignalr } from '@/utils/package/signalr';
|
||||||
|
|
||||||
const App: React.FC = () => {
|
const App: React.FC = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
@ -55,6 +56,7 @@ const App: React.FC = () => {
|
||||||
if (res.code === 200) {
|
if (res.code === 200) {
|
||||||
storage.setItem('user', JSON.stringify(res.data))
|
storage.setItem('user', JSON.stringify(res.data))
|
||||||
toHome()
|
toHome()
|
||||||
|
startSignalr()
|
||||||
} else {
|
} else {
|
||||||
toLogin()
|
toLogin()
|
||||||
}
|
}
|
||||||
|
|
@ -101,6 +103,11 @@ const App: React.FC = () => {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}, [navigate])
|
}, [navigate])
|
||||||
|
useEffect(() => {
|
||||||
|
onReconnected(async () => {
|
||||||
|
storage.setItem('reconnect', true)
|
||||||
|
})
|
||||||
|
}, [])
|
||||||
const handleResize = (): void => {
|
const handleResize = (): void => {
|
||||||
setWindowSize({
|
setWindowSize({
|
||||||
width: window.innerWidth,
|
width: window.innerWidth,
|
||||||
|
|
|
||||||
|
|
@ -16,4 +16,3 @@ export const PostRefresh = (refreshToken: string) =>
|
||||||
url: `auth/refresh?refreshToken=${refreshToken}`,
|
url: `auth/refresh?refreshToken=${refreshToken}`,
|
||||||
method: 'post',
|
method: 'post',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@ import dayjs from 'dayjs';
|
||||||
import 'dayjs/locale/zh-cn'
|
import 'dayjs/locale/zh-cn'
|
||||||
import { storage } from '@/utils';
|
import { storage } from '@/utils';
|
||||||
import ImageUrl from '@/utils/package/imageUrl'
|
import ImageUrl from '@/utils/package/imageUrl'
|
||||||
import { startSignalr } from '@/utils/package/signalr';
|
|
||||||
import Avatar from '@/components/Avatar';
|
import Avatar from '@/components/Avatar';
|
||||||
dayjs.locale('zh-cn');
|
dayjs.locale('zh-cn');
|
||||||
type navListType = {
|
type navListType = {
|
||||||
|
|
@ -51,7 +50,6 @@ const Home: React.FC = () => {
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const user = JSON.parse(storage.getItem('user') as string);
|
const user = JSON.parse(storage.getItem('user') as string);
|
||||||
setUserInfo(user)
|
setUserInfo(user)
|
||||||
startSignalr(() => { })
|
|
||||||
const updateTime = () => {
|
const updateTime = () => {
|
||||||
setDateInfo({
|
setDateInfo({
|
||||||
work: dayjs().format('ddd'),
|
work: dayjs().format('ddd'),
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import { storage } from '@/utils'
|
||||||
import { GetCheckUser, PostLogin } from '@/api/Login'
|
import { GetCheckUser, PostLogin } from '@/api/Login'
|
||||||
import * as CryptoJS from 'crypto-js';
|
import * as CryptoJS from 'crypto-js';
|
||||||
import ImageUrl from '@/utils/package/imageUrl'
|
import ImageUrl from '@/utils/package/imageUrl'
|
||||||
|
import { startSignalr } from '@/utils/package/signalr';
|
||||||
const Login: React.FC = () => {
|
const Login: React.FC = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const [accountPasswordStatus, setAccountPasswordStatus] = useState<boolean>(false);
|
const [accountPasswordStatus, setAccountPasswordStatus] = useState<boolean>(false);
|
||||||
|
|
@ -130,6 +131,7 @@ const Login: React.FC = () => {
|
||||||
} catch {
|
} catch {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
startSignalr()
|
||||||
navigate('/home')
|
navigate('/home')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ import { GetRoomFile, PostRoomFile, DeleteRoomFile, GetRoomUpFileurl, GetRoomFil
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
import ImageUrl from '@/utils/package/imageUrl'
|
import ImageUrl from '@/utils/package/imageUrl'
|
||||||
import agora from '@/utils/package/agora'
|
import agora from '@/utils/package/agora'
|
||||||
import { onInvoke, onSignalr, offSignalr, startSignalr } from '@/utils/package/signalr';
|
import { onInvoke, onSignalr, offSignalr, onStart } from '@/utils/package/signalr';
|
||||||
import dayjs from 'dayjs';
|
import dayjs from 'dayjs';
|
||||||
import durationPlugin from 'dayjs/plugin/duration';
|
import durationPlugin from 'dayjs/plugin/duration';
|
||||||
import { VideoSourceType } from 'agora-electron-sdk';
|
import { VideoSourceType } from 'agora-electron-sdk';
|
||||||
|
|
@ -249,14 +249,16 @@ const Meeting: React.FC = () => {
|
||||||
const handleNetworkChange = (): void => {
|
const handleNetworkChange = (): void => {
|
||||||
if (navigator.onLine) {
|
if (navigator.onLine) {
|
||||||
message.success('网络已恢复。')
|
message.success('网络已恢复。')
|
||||||
startSignalr(async () => {
|
setTimeout(async () => {
|
||||||
await onInvoke('joinChannel', {
|
await onStart(async () => {
|
||||||
roomNum: state.channelId,
|
await onInvoke('joinChannel', {
|
||||||
enableMicr: true,
|
roomNum: state.channelId,
|
||||||
enableCamera: true
|
enableMicr: true,
|
||||||
|
enableCamera: true
|
||||||
|
})
|
||||||
|
await getRoomUser()
|
||||||
})
|
})
|
||||||
await getRoomUser()
|
}, 1000)
|
||||||
})
|
|
||||||
} else {
|
} else {
|
||||||
message.error('网络已断开!')
|
message.error('网络已断开!')
|
||||||
}
|
}
|
||||||
|
|
@ -451,6 +453,17 @@ const Meeting: React.FC = () => {
|
||||||
case 'meetingMode':
|
case 'meetingMode':
|
||||||
setMeetingMode(e.value)
|
setMeetingMode(e.value)
|
||||||
break;
|
break;
|
||||||
|
case 'reconnect':
|
||||||
|
if (e.value == true) {
|
||||||
|
storage.setItem('reconnect', false)
|
||||||
|
await onInvoke('joinChannel', {
|
||||||
|
roomNum: state.channelId,
|
||||||
|
enableMicr: true,
|
||||||
|
enableCamera: true
|
||||||
|
})
|
||||||
|
await getRoomUser()
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// 聊天发送
|
// 聊天发送
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
import * as signalR from '@microsoft/signalr';
|
import * as signalR from '@microsoft/signalr';
|
||||||
import storage from './storage';
|
import storage from './storage';
|
||||||
let connection = null as any;
|
let connection = '' as any;
|
||||||
export const startSignalr = async (callBack: Function) => {
|
export const startSignalr = async () => {
|
||||||
const user = await JSON.parse(storage.getItem('user') as string);
|
const user = await JSON.parse(storage.getItem('user') as string);
|
||||||
connection = new signalR.HubConnectionBuilder().withAutomaticReconnect()
|
connection = new signalR.HubConnectionBuilder().withAutomaticReconnect()
|
||||||
.withUrl(`${import.meta.env.VITE_BASE_URL_API}/session-manage`, {
|
.withUrl(`${import.meta.env.VITE_BASE_URL_API}/session-manage`, {
|
||||||
|
|
@ -10,12 +10,32 @@ export const startSignalr = async (callBack: Function) => {
|
||||||
accessTokenFactory: () => user.token
|
accessTokenFactory: () => user.token
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
|
onStart()
|
||||||
connection.start()
|
connection.onclose(async () => {
|
||||||
.then(() => callBack())
|
await onStart()
|
||||||
.catch((err: any) => setTimeout(() => startSignalr(() => { }), 5000));
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export const onStart = async (callBack?: Function) => {
|
||||||
|
if (connection.state !== signalR.HubConnectionState.Connected) {
|
||||||
|
try {
|
||||||
|
await connection.start();
|
||||||
|
if (callBack) {
|
||||||
|
callBack()
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
setTimeout(onStart, 5000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export const onReconnected = async (callBack: Function) => {
|
||||||
|
if (connection) {
|
||||||
|
connection.onreconnected(async (newConnectionId: any) => {
|
||||||
|
callBack()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
export const onInvitation = (callBack: Function) => {
|
export const onInvitation = (callBack: Function) => {
|
||||||
if (connection) {
|
if (connection) {
|
||||||
connection.on("Invitation", (roomNum: string, roomName: string, InviterName: string) => {
|
connection.on("Invitation", (roomNum: string, roomName: string, InviterName: string) => {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
import axios, { AxiosInstance, AxiosResponse } from 'axios'
|
import axios, { AxiosInstance, AxiosResponse } from 'axios'
|
||||||
import { RequestConfig, RequestInterceptors } from './types'
|
import { RequestConfig, RequestInterceptors } from './types'
|
||||||
import { request, storage } from '@/utils'
|
import { storage } from '@/utils'
|
||||||
import { constant } from '@/config'
|
import { constant } from '@/config'
|
||||||
import { message } from 'antd';
|
import { message } from 'antd';
|
||||||
import { PostRefresh } from '@/api/Login';
|
import { PostRefresh } from '@/api/Login';
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue