77 lines
1.6 KiB
C
77 lines
1.6 KiB
C
/**
|
|
* 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();
|
|
} |