refactor: 优化断线重连逻辑,清理缓存会话并重新获取当前会话信息

pull/81/head
moonrailgun 3 years ago
parent 04b92b9f17
commit 5c7c04e296

@ -91,6 +91,13 @@ export class AppSocket {
this.socket.io.on('reconnect', cb); this.socket.io.on('reconnect', cb);
} }
/**
*
*/
disconnect() {
this.socket.disconnect();
}
/** /**
* Socket * Socket
*/ */

@ -81,6 +81,7 @@ export function useConverseMessage(context: ConverseContext) {
const converse = useAppSelector<ChatConverseState | undefined>( const converse = useAppSelector<ChatConverseState | undefined>(
(state) => state.chat.converses[converseId] (state) => state.chat.converses[converseId]
); );
const reconnectNum = useAppSelector((state) => state.global.reconnectNum);
const hasMoreMessage = converse?.hasMoreMessage ?? true; const hasMoreMessage = converse?.hasMoreMessage ?? true;
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const messages = converse?.messages ?? []; const messages = converse?.messages ?? [];
@ -93,7 +94,7 @@ export function useConverseMessage(context: ConverseContext) {
}; };
}, [converseId]); }, [converseId]);
// NOTICE: 该hook只会在converseId变化时执行 // NOTICE: 该hook只会在converseId变化和重新链接时执行
const { loading, error } = useAsync(async () => { const { loading, error } = useAsync(async () => {
if (!converse) { if (!converse) {
// 如果是一个新会话(或者当前会话列表中没有) // 如果是一个新会话(或者当前会话列表中没有)
@ -140,7 +141,7 @@ export function useConverseMessage(context: ConverseContext) {
); );
} }
} }
}, [converseId]); }, [converseId, reconnectNum]);
// 加载更多消息 // 加载更多消息
const [{ loading: isLoadingMore }, handleFetchMoreMessage] = const [{ loading: isLoadingMore }, handleFetchMoreMessage] =

@ -38,6 +38,12 @@ export function setupRedux(socket: AppSocket, store: AppStore) {
socket.onReconnect(() => { socket.onReconnect(() => {
console.warn('因为断线重连触发重新同步远程数据'); console.warn('因为断线重连触发重新同步远程数据');
initial(socket, store); initial(socket, store);
/**
*
* (useConverseMessage)
*/
store.dispatch(chatActions.clearAllConverses());
store.dispatch(globalActions.incReconnectNum());
}); });
sharedEvent.on('updateNetworkStatus', (status) => { sharedEvent.on('updateNetworkStatus', (status) => {

@ -149,6 +149,13 @@ const chatSlice = createSlice({
state.converses[converseId].hasFetchedHistory = true; state.converses[converseId].hasFetchedHistory = true;
}, },
/**
*
*/
clearAllConverses(state) {
state.converses = {};
},
/** /**
* *
*/ */

@ -5,10 +5,12 @@ export interface GlobalState {
* *
*/ */
networkStatus: 'initial' | 'connected' | 'reconnecting' | 'disconnected'; networkStatus: 'initial' | 'connected' | 'reconnecting' | 'disconnected';
reconnectNum: number;
} }
const initialState: GlobalState = { const initialState: GlobalState = {
networkStatus: 'initial', networkStatus: 'initial',
reconnectNum: 0,
}; };
const globalSlice = createSlice({ const globalSlice = createSlice({
@ -21,6 +23,9 @@ const globalSlice = createSlice({
) { ) {
state.networkStatus = action.payload; state.networkStatus = action.payload;
}, },
incReconnectNum(state) {
state.reconnectNum += 1;
},
}, },
}); });

Loading…
Cancel
Save