import * as React from 'react'; import { FunctionComponent, useState } from 'react'; import { BrowserRouter, Routes, Route, } from "react-router-dom"; import FloatingPanel from './components/FloatingPanel'; import GamePage from './routes/GamePage'; import Home from './routes/Home'; import { initContext } from './context/context'; import { RTMTWS } from './rtmt/rtmt_websocket'; import { getColorByBrightness } from './util/ColorUtil'; import { ConnectionState } from './models/ConnectionState'; import { Theme } from './theme/Theme'; import LobyPage from './routes/LobyPage'; import swal from 'sweetalert'; const context = initContext(); const MancalaApp: FunctionComponent = () => { const [userKey, setUserKey] = useState(undefined); const [connectionState, setConnetionState] = useState("connecting"); const [theme, setTheme] = useState(context.themeManager.theme); const onConnectionDone = () => { setConnetionState("connected"); }; const onConnectionLost = () => { setConnetionState("reconnecting"); connectToServer(); }; const onConnectionError = (event: Event) => { setConnetionState("error"); connectToServer(); }; const onThemeChange = (theme: Theme) => { setTheme(theme) } const connectToServer = async () => { try { const userKey = await context.userKeyStore.getUserKey(); setUserKey(userKey); (context.rtmt as RTMTWS).initWebSocket(userKey); } catch (error) { //TODO: check if it is network error! swal(context.texts.Error + "!", context.texts.ErrorWhenRetrievingInformation, "error"); console.error(error); } }; React.useEffect(() => { context.rtmt.on("open", onConnectionDone); context.rtmt.on("close", onConnectionLost); context.rtmt.on("error", onConnectionError); context.themeManager.on("themechange", onThemeChange); setConnetionState("connecting"); connectToServer(); return () => { context.rtmt.dispose(); context.themeManager.off("themechange", onThemeChange); }; }, []); const showConnectionState = connectionState != "connected"; const floatingPanelColor = context.themeManager.theme.boardColor; const connectionStateText = () => { const map: { [key: string]: string } = { connecting: context.texts.Connecting, connected: context.texts.Connected, error: context.texts.CannotConnect, reconnecting: context.texts.ConnectingAgain, }; return map[connectionState]; }; const textColorOnBoard = getColorByBrightness( context.themeManager.theme.boardColor, context.themeManager.theme.textColor, context.themeManager.theme.textLightColor ); return ( <> } /> } > }> {connectionStateText()} ); } export default MancalaApp;