diff options
author | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2023-08-21 17:22:23 -0600 |
---|---|---|
committer | Elizabeth Hunt <elizabeth.hunt@simponic.xyz> | 2023-08-21 17:22:23 -0600 |
commit | d64ffb5016119e54f0e20d05ae8ac9c96955d9d5 (patch) | |
tree | 11d47b519237b0266baa7208855bae19462a9abe /server | |
parent | b786fe1e723b7cf905cdd7e525375dfe96241a21 (diff) | |
download | jumpstorm-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.ts | 90 |
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}`); |