|
@@ -1,8 +1,8 @@
|
|
|
-import React, { Dispatch, useCallback, useEffect, useRef } from 'react';
|
|
|
|
|
|
|
+import React, { Dispatch, useCallback } from 'react';
|
|
|
|
|
|
|
|
import { LocalAction, stateSet } from '../../actions';
|
|
import { LocalAction, stateSet } from '../../actions';
|
|
|
-import { masterStateUpdateTimeout } from '../../constants/system';
|
|
|
|
|
import { DispatchContext, StateContext } from '../../context/state';
|
|
import { DispatchContext, StateContext } from '../../context/state';
|
|
|
|
|
+import { useMaster } from '../../hooks/master';
|
|
|
import { useKeepalive } from '../../hooks/socket';
|
|
import { useKeepalive } from '../../hooks/socket';
|
|
|
import { GlobalState } from '../../reducer/types';
|
|
import { GlobalState } from '../../reducer/types';
|
|
|
import { getSongUrl } from '../../utils/url';
|
|
import { getSongUrl } from '../../utils/url';
|
|
@@ -16,29 +16,12 @@ export type Props = {
|
|
|
dispatch: Dispatch<LocalAction>;
|
|
dispatch: Dispatch<LocalAction>;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-function useMaster(dispatch: Dispatch<LocalAction>, isMaster: boolean): void {
|
|
|
|
|
- const masterUpdateTimer = useRef<number>(0);
|
|
|
|
|
- useEffect(() => {
|
|
|
|
|
- if (isMaster) {
|
|
|
|
|
- masterUpdateTimer.current = window.setInterval(() => {
|
|
|
|
|
- dispatch(stateSet());
|
|
|
|
|
- }, masterStateUpdateTimeout);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return (): void => {
|
|
|
|
|
- window.clearInterval(masterUpdateTimer.current);
|
|
|
|
|
- };
|
|
|
|
|
- }, [dispatch, isMaster]);
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
const uiProvider = UIProvider.Cmus;
|
|
const uiProvider = UIProvider.Cmus;
|
|
|
const UI = uiProviders[uiProvider];
|
|
const UI = uiProviders[uiProvider];
|
|
|
|
|
|
|
|
export const App: React.FC<Props> = ({ socket, state, dispatch }) => {
|
|
export const App: React.FC<Props> = ({ socket, state, dispatch }) => {
|
|
|
- const isMaster = state.player.master === state.myClientName;
|
|
|
|
|
-
|
|
|
|
|
useKeepalive(socket);
|
|
useKeepalive(socket);
|
|
|
- useMaster(dispatch, isMaster);
|
|
|
|
|
|
|
+ const isMaster = useMaster(dispatch, state.player.master, state.myClientName);
|
|
|
|
|
|
|
|
const onTimeUpdate = useCallback(
|
|
const onTimeUpdate = useCallback(
|
|
|
(currentTime: number): void => {
|
|
(currentTime: number): void => {
|