import React, {Component} from "react"; import { Backdrop, Box, Button, Chip, CircularProgress, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle, Fade, FormControl, Modal, Snackbar, Stack, Typography, Zoom } from "@mui/material"; import {FunctionTest} from "../RawConstants"; import SettingsIcon from '@mui/icons-material/Settings'; import PlayCircleIcon from '@mui/icons-material/PlayCircle'; import CloudOffIcon from '@mui/icons-material/CloudOff'; import CloudIcon from '@mui/icons-material/Cloud'; import {PAGE} from "./App"; import GameHandler from "./GameHandler"; interface StartupProps { visible: boolean } interface StartupState { statusTxt: string, openCloudConnectModal: boolean, showStartBtn: boolean, isCloudConnected: boolean, snackErrorMsg: string, isConnectionIssue: boolean, startCounter: number, } export default class Startup extends Component { constructor(props: StartupProps) { super(props); this.state = { statusTxt: "Smart-Monopoly wird gestartet...", openCloudConnectModal: false, showStartBtn: false, isCloudConnected: false, isConnectionIssue: false, snackErrorMsg: "", startCounter: 10, }; } counterInterval: string | number | NodeJS.Timeout; componentDidMount() { setTimeout(() => { this.setState((prevState) => ({ ...prevState, openCloudConnectModal: true, statusTxt: "Möchten Sie CloudConnect+ nutzen?" })); }, 1) } componentWillUnmount() { } connectToCloud = async (): Promise => { try { let response = await window.api.request("CLOUD_CONNECT", {}); this.setState((prevState) => ({ ...prevState, snackErrorMsg: response.data.toString(), isCloudConnected: response.status, isConnectionIssue: !response.status, })); console.log(response) return response.status; } catch (e) { return false; } } startupBtnClick = () => { // Startup handle this.setState(prevState => ({ ...prevState, showStartBtn: false, statusTxt: "Kapitalismus an die Macht!" })); setTimeout(async () => { try { let resp = await GameHandler.requestPreparing(this.state.isCloudConnected); } catch(e) { this.setState(prevState => ({ ...prevState, showStartBtn: true, snackErrorMsg: "Start fehlgeschlagen! \n" + e.toString() })); await this.cloudDecision(false); } }, 1500) } style = { position: 'absolute', top: '50%', left: '50%', transform: 'translate(-50%, -50%)', width: 600, bgcolor: 'background.paper', border: '2px solid #0000', boxShadow: 24, p: 4, }; async cloudDecision(decision: boolean) { this.setState((prevState) => ({ ...prevState, openCloudConnectModal: false, isConnectionIssue: false, isCloudConnected: false, startCounter: 30 })); clearInterval(this.counterInterval); if (decision) { this.setState((prevState) => ({ ...prevState, statusTxt: "Internetverbindung wird geprüft..." })); let status = (await window.api.request("FUNCTION_TEST", {})).data as FunctionTest; if (!status.hasInternet) { this.setState((prevState) => ({ ...prevState, isConnectionIssue: true, // Weiterleiten auf Fehlermodal statusTxt: "Warten auf Netzwerk..." })); } else { this.setState((prevState) => ({ ...prevState, statusTxt: "Warten auf Cloud...", })); this.connectToCloud().then((connected) => { this.setState((prevState) => ({ ...prevState, statusTxt: "Bereit zum Spielen?", showStartBtn: true, }) ) if (connected) this.counterInterval = setInterval(() => { if (!this.props.visible) return; if (this.state.startCounter == 0) { clearInterval(this.counterInterval); this.startupBtnClick(); return; } this.setState((prevState) => ({ ...prevState, startCounter: prevState.startCounter - 1 })); }, 1000); }); } } else { this.setState((prevState) => ({ ...prevState, statusTxt: "Bereit zum Spielen?", showStartBtn: true, startCounter: 30 })); this.counterInterval = setInterval(() => { if (!this.props.visible) return; if (this.state.startCounter == 0) { clearInterval(this.counterInterval); this.startupBtnClick(); return; } this.setState((prevState) => ({ ...prevState, startCounter: prevState.startCounter - 1 })); }, 1000); } } render() { return
{ this.setState(prevState => ({ ...prevState, snackErrorMsg: "" })) }} message={this.state.snackErrorMsg} /> Cloud-Verbindung fehlgeschlagen! Die Cloud-Verbindung konnte nicht hergestellt werden.
Möglicherweise liegt ein Problem mit der Internetverbindung vor,
oder die Cloud ist derzeit in Wartung.
CloudConnect+ nutzen? Möchten Sie für diese Sitzung CloudConnect+ aktivieren, um das mitspielen mit Mobilen Endgeräten zu ermöglichen?
Dafür wird eine WiFi-Verbindung hergestellt

Willkommen!


{this.state.statusTxt}


{!this.state.showStartBtn && } this.setState(prevState => ({ ...prevState, openCloudConnectModal: true }))} label={this.state.isCloudConnected ? : }/>
} }