summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authorElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-08-21 17:22:23 -0600
committerElizabeth Hunt <elizabeth.hunt@simponic.xyz>2023-08-21 17:22:23 -0600
commitd64ffb5016119e54f0e20d05ae8ac9c96955d9d5 (patch)
tree11d47b519237b0266baa7208855bae19462a9abe /server
parentb786fe1e723b7cf905cdd7e525375dfe96241a21 (diff)
downloadjumpstorm-d64ffb5016119e54f0e20d05ae8ac9c96955d9d5.tar.gz
jumpstorm-d64ffb5016119e54f0e20d05ae8ac9c96955d9d5.zip
very basic server messages - need to figure shit out still
Diffstat (limited to 'server')
-rw-r--r--server/src/server.ts90
1 files changed, 73 insertions, 17 deletions
diff --git a/server/src/server.ts b/server/src/server.ts
index 18829e4..713d3ed 100644
--- a/server/src/server.ts
+++ b/server/src/server.ts
@@ -4,50 +4,106 @@ import {
WallBounds,
Physics,
Collision,
+ NetworkUpdate,
MessageQueueProvider,
MessagePublisher,
} from "@engine/systems";
import { Grid } from "@engine/structures";
import { Miscellaneous } from "@engine/config";
+import { Server } from "bun";
-const TICK_RATE = 60 / 1000;
+class ServerSocketMessageReceiver implements MessageQueueProvider {
+ private messages: any[];
-const game = new Game();
+ constructor() {
+ this.messages = [];
+ }
-[
- new Physics(),
- new Collision(new Grid()),
- new WallBounds(Miscellaneous.WIDTH),
-].forEach((system) => game.addSystem(system));
+ addMessage(message: any) {
+ this.messages.push(message);
+ }
-[new Floor(160), new Player()].forEach((entity) => game.addEntity(entity));
+ getNewMessages() {
+ return this.messages;
+ }
-game.start();
+ clearMessages() {
+ this.messages = [];
+ }
+}
-setInterval(() => {
- game.doGameLoop(performance.now());
-}, TICK_RATE);
+class ServerSocketMessagePublisher implements MessagePublisher {
+ private server: Server;
+ private messages: any[];
+
+ constructor(server: Server) {
+ this.server = server;
+ this.messages = [];
+ }
+
+ addMessage(_message: any) {}
-const server = Bun.serve({
+ publish() {}
+}
+
+const game = new Game();
+
+const messageReceiver = new ServerSocketMessageReceiver();
+
+const server = Bun.serve<{ sessionId: string }>({
port: 8080,
fetch: async (req, server): Promise<string> => {
- const sessionId = Math.floor(Math.random() * 1e10).toString();
+ const sessionId = crypto.randomUUID();
server.upgrade(req, {
headers: {
"Set-Cookie": `SessionId=${sessionId}`,
},
+ data: {
+ sessionId,
+ },
});
- return "200 OK";
+ return sessionId;
},
websocket: {
- open(ws) {},
+ open(ws) {
+ const { sessionId } = ws.data;
+
+ if (sessionControllableEntities.has(sessionId)) {
+ return;
+ }
+
+ const player = new Player();
+ game.addEntity(player);
+
+ sessionControllableEntities.set(sessionId, new Set(player.id));
+ },
message(ws, message) {
- console.log(message);
+ console.log(JSON.parse(message));
+ messageReceiver.addMessage(message);
},
close(ws) {},
},
});
+const messagePublisher = new ServerSocketMessagePublisher(server);
+
+[
+ new Physics(),
+ new Collision(new Grid()),
+ new WallBounds(Miscellaneous.WIDTH),
+ new NetworkUpdate(messageReceiver, messagePublisher),
+].forEach((system) => game.addSystem(system));
+
+[new Floor(160), new Player()].forEach((entity) => game.addEntity(entity));
+
+game.start();
+
+setInterval(() => {
+ game.doGameLoop(performance.now());
+}, Miscellaneous.SERVER_TICK_RATE);
+
+const sessionControllableEntities: Map<string, Set<string>> = new Map();
+
console.log(`Listening on ${server.hostname}:${server.port}`);