// Copyright 2020 Thomas Hintz // // This file is part of the Alpha Centauri Farming project. // // The Alpha Centauri Farming project is free software: you can // redistribute it and/or modify it under the terms of the GNU General // Public License as published by the Free Software Foundation, either // version 3 of the License, or (at your option) any later version. // // The Alpha Centauri Farming project is distributed in the hope that // it will be useful, but WITHOUT ANY WARRANTY; without even the // implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // PURPOSE. See the GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with the Alpha Centauri Farming project. If not, see // . require('./style.scss'); import React, { Fragment } from 'react' import ReactDOM from 'react-dom' import { Provider, connect } from 'react-redux' import * as Ws from './websocket.js' import { rootId } from './constants.js' import App from './components/app/App.jsx' import { initialize, handleMessage as handleMessageFarm } from './components/farm/interface.js' import { setStartGames, startOrJoinGame } from './components/start/actions.js' import { play } from './components/app/actions.js' import { createStore } from 'redux' import rootReducer from './rootReducers.js' const store = createStore(rootReducer); const unsubscribe = store.subscribe(() => console.log(store.getState())); function makeDiv(id) { const element = document.createElement('div'); element.id = id; return element; } document.body.appendChild(makeDiv(rootId)); window.store = store; ReactDOM.render( , document.getElementById(rootId) ); const unsubscribeNewOrJoinGame = store.subscribe(() => { const state = store.getState(); if (state.start.msg) { unsubscribeNewOrJoinGame(); Ws.sendCommand(state.start.msg); } }); let autostart = new URL(window.location.href).searchParams.get('autostart'); function handleMessage(evt) { const data = JSON.parse(evt.data), type = data.event; if (data.event === 'error') { console.log('error:' + data.exn); } else if (data.event === 'new-game-started') { initialize(store, Ws.sendCommand); Ws.setMainOnMessage(handleMessageFarm); Ws.setSecondaryOnMessage(handleMessageFarm); Ws.sendCommand({ type: 'init' }) store.dispatch(play()); } else if (data.event === 'start-init') { store.dispatch(setStartGames(data.games.games)); if (autostart) { if (data.games.games.length === 0) { store.dispatch(startOrJoinGame({ type: 'new-game', playerName: 'a', checkedColor: 'green', gameName: 'a' })); } else { store.dispatch(startOrJoinGame({ type: 'join-game', playerName: 'Player ' + data.games.games[0].colors[0], checkedColor: data.games.games[0].colors[0], gameName: data.games.games[0].name })); } } } } Ws.openMain('web-socket'); Ws.openSecondary('push-web-socket'); Ws.setMainOnMessage(handleMessage); Ws.setSecondaryOnMessage(handleMessage); Ws.setMainOnOpen(() => Ws.sendCommand({ type: 'main-init' }));