/** * Copyright (c) 2025 Dominic Masters * * This software is released under the MIT License. * https://opensource.org/licenses/MIT */ #include "server.h" #include "console/console.h" #include "assert/assert.h" server_t SERVER; void serverInit() { memset(&SERVER, 0, sizeof(server_t)); } void serverStart(const serverstart_t start) { assertTrue(SERVER.state==SERVER_STATE_STOPPED, "Server is already running."); SERVER.type = start.type; SERVER.clientCount = 0; switch(start.type) { case SERVER_TYPE_SINGLE_PLAYER: serverSinglePlayerStart(start.singlePlayer); break; case SERVER_TYPE_LOCAL: serverLocalStart(start.local); break; case SERVER_TYPE_REMOTE: assertUnreachable("Remote server not implemented."); break; default: assertUnreachable("Unknown server type."); } SERVER.state = SERVER_STATE_RUNNING; } void serverStop() { assertTrue(SERVER.state == SERVER_STATE_RUNNING,"Server is already stopped."); for(uint8_t i = 0; i < SERVER.clientCount; i++) { clientDispose(&SERVER.clients[i]); } switch(SERVER.type) { case SERVER_TYPE_SINGLE_PLAYER: assertUnreachable("Single player server not implemented."); break; case SERVER_TYPE_LOCAL: serverLocalStop(); break; case SERVER_TYPE_REMOTE: assertUnreachable("Remote server not implemented."); break; default: assertUnreachable("Unknown server type."); } SERVER.state = SERVER_STATE_STOPPED; } void serverUpdate() { if(SERVER.state == SERVER_STATE_STOPPED) return; } void serverDispose() { if(SERVER.state == SERVER_STATE_RUNNING) serverStop(); }