summaryrefslogtreecommitdiff
path: root/server/main.c
diff options
context:
space:
mode:
Diffstat (limited to 'server/main.c')
-rw-r--r--server/main.c72
1 files changed, 47 insertions, 25 deletions
diff --git a/server/main.c b/server/main.c
index 6a5e5ba..03c0573 100644
--- a/server/main.c
+++ b/server/main.c
@@ -1,44 +1,66 @@
+#include "raylib.h"
+#include "raymath.h"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
+#include "server.h"
+#include "queue.h"
+#include "shared.h"
#include "net_compat.h"
+ClientConnection connections[MAX_PLAYERS];
+PacketQueue incomingQueue;
+PacketQueue outgoingQueue;
+Mesh terrainMesh;
+Matrix terrainTransform;
+ServerPlayer players[MAX_PLAYERS];
+ServerNPC npcs[MAX_NPCS];
+int playerCount = 0;
+int npcCount = 0;
+
int main() {
- net_init();
+ /* set_nonblocking(fd); */
+ QueueInit(&incomingQueue);
+ QueueInit(&outgoingQueue);
- int fd = socket(AF_INET, SOCK_DGRAM, 0);
+InitWindow(1, 1, "server"); // tiny hidden window
+SetWindowState(FLAG_WINDOW_HIDDEN);
- if (fd == -1)
- err(EXIT_FAILURE, "socket failed");
- struct sockaddr_in address;
- address.sin_family = AF_INET;
- address.sin_port = htons(8080);
- address.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+ Model terrain = LoadModel("assets/terrain.glb");
- if (bind(fd, (struct sockaddr *)&address, sizeof(address)) == -1) {
- close(fd);
- err(EXIT_FAILURE, "bind failed");
- }
+if (terrain.meshCount == 0) {
+ TraceLog(LOG_ERROR, "Terrain failed to load!");
+}
- set_nonblocking(fd);
+// Bake scale into vertices so rendering and collision match
+ float scaleXZ = 10.0f;
+ float scaleY = 10.0f;
+ for (int i = 0; i < terrain.meshes[0].vertexCount; i++) {
+ terrain.meshes[0].vertices[i * 3 + 0] *= scaleXZ;
+ terrain.meshes[0].vertices[i * 3 + 1] *= scaleY;
+ terrain.meshes[0].vertices[i * 3 + 2] *= scaleXZ;
+ }
+ UpdateMeshBuffer(terrain.meshes[0], 0, terrain.meshes[0].vertices,
+ terrain.meshes[0].vertexCount * 3 * sizeof(float), 0);
- time_t startTime = time(NULL);
+ terrain.transform = MatrixIdentity();
+ terrainMesh = terrain.meshes[0];
+ terrainTransform = terrain.transform;
- while (time(NULL) < startTime + 60) {
- struct sockaddr connection;
- socklen_t connectionLen = sizeof(connection);
- char buff[64];
+ CloseWindow();
- int size = recvfrom(fd, buff, sizeof(buff), 0,
- (struct sockaddr *)&connection, &connectionLen);
+ NetworkInit();
- if (size != -1)
- printf("message recievd\n");
- }
+ // start threads
+ pthread_t recvThread, sendThread, gameThread;
+ pthread_create(&recvThread, NULL, RecvThread, NULL);
+ pthread_create(&sendThread, NULL, SendThread, NULL);
+ pthread_create(&gameThread, NULL, GameThread, NULL);
- close(fd);
- net_cleanup();
+ // wait forever
+ pthread_join(gameThread, NULL);
+ NetworkShutdown();
return 0;
}