mirror of https://github.com/msgbyte/tailchat
feat: 声网插件网络质量检测与双流功能与头像
parent
e27094d0f2
commit
141db8f1cf
@ -0,0 +1,78 @@
|
|||||||
|
import { localTrans } from '@capital/common';
|
||||||
|
import type { NetworkQuality } from 'agora-rtc-react';
|
||||||
|
import React, { useEffect, useState } from 'react';
|
||||||
|
import styled from 'styled-components';
|
||||||
|
import { Translate } from '../translate';
|
||||||
|
import { useClient } from './client';
|
||||||
|
|
||||||
|
const Root = styled.div`
|
||||||
|
display: flex;
|
||||||
|
position: absolute;
|
||||||
|
padding: 4px 8px;
|
||||||
|
z-index: 20;
|
||||||
|
|
||||||
|
div + div {
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
`;
|
||||||
|
|
||||||
|
export const NetworkStats: React.FC = React.memo(() => {
|
||||||
|
const client = useClient();
|
||||||
|
const [stats, setStats] = useState<NetworkQuality>(undefined);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const cb = (stats: NetworkQuality) => {
|
||||||
|
setStats(stats);
|
||||||
|
};
|
||||||
|
|
||||||
|
client.on('network-quality', cb);
|
||||||
|
|
||||||
|
return () => {
|
||||||
|
client.off('network-quality', cb);
|
||||||
|
};
|
||||||
|
}, []);
|
||||||
|
|
||||||
|
if (!stats) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Root>
|
||||||
|
<div>
|
||||||
|
{Translate.uplink}: {parseQualityText(stats.uplinkNetworkQuality)}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
{Translate.downlink}: {parseQualityText(stats.downlinkNetworkQuality)}
|
||||||
|
</div>
|
||||||
|
</Root>
|
||||||
|
);
|
||||||
|
});
|
||||||
|
NetworkStats.displayName = 'NetworkStats';
|
||||||
|
|
||||||
|
function parseQualityText(quality: 0 | 1 | 2 | 3 | 4 | 5 | 6) {
|
||||||
|
if (quality === 1 || quality === 2) {
|
||||||
|
return localTrans({
|
||||||
|
'zh-CN': '优秀',
|
||||||
|
'en-US': 'Good',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quality === 3 || quality === 4) {
|
||||||
|
return localTrans({
|
||||||
|
'zh-CN': '一般',
|
||||||
|
'en-US': 'Normal',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quality === 5 || quality === 6) {
|
||||||
|
return localTrans({
|
||||||
|
'zh-CN': '差',
|
||||||
|
'en-US': 'Bad',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return localTrans({
|
||||||
|
'zh-CN': '未知',
|
||||||
|
'en-US': 'Unknown',
|
||||||
|
});
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
import { localTrans } from '@capital/common';
|
||||||
|
|
||||||
|
export const Translate = {
|
||||||
|
uplink: localTrans({
|
||||||
|
'zh-CN': '上行网络',
|
||||||
|
'en-US': 'Uplink',
|
||||||
|
}),
|
||||||
|
downlink: localTrans({
|
||||||
|
'zh-CN': '下行网络',
|
||||||
|
'en-US': 'Downlink',
|
||||||
|
}),
|
||||||
|
};
|
Loading…
Reference in New Issue