diff options
| author | Dax Raad <[email protected]> | 2025-05-17 21:31:42 -0400 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-05-26 12:40:17 -0400 |
| commit | a34d020bc6b252e842f042d935c7a0e6444460cf (patch) | |
| tree | ea3484499dff80e82d421e879ab639133ae9c3b4 /js/src/server | |
| parent | 96fbc37f0175052291f8a096d530bd4480f6cb19 (diff) | |
| download | opencode-a34d020bc6b252e842f042d935c7a0e6444460cf.tar.gz opencode-a34d020bc6b252e842f042d935c7a0e6444460cf.zip | |
sync
Diffstat (limited to 'js/src/server')
| -rw-r--r-- | js/src/server/server.ts | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/js/src/server/server.ts b/js/src/server/server.ts new file mode 100644 index 000000000..6266e9421 --- /dev/null +++ b/js/src/server/server.ts @@ -0,0 +1,34 @@ +import { Log } from "../util/log"; + +export namespace RPC { + const log = Log.create({ service: "rpc" }); + const PORT = 16713; + export function listen(input?: { port?: number }) { + const port = input?.port ?? PORT; + log.info("trying", { port }); + try { + const server = Bun.serve({ + port, + websocket: { + open() {}, + message() {}, + }, + routes: { + "/ws": (req, server) => { + if (server.upgrade(req)) return; + return new Response("Not a websocket request", { status: 400 }); + }, + }, + }); + log.info("listening", { port }); + return { + server, + }; + } catch (e: any) { + if (e?.code === "EADDRINUSE") { + return listen({ port: port + 1 }); + } + throw e; + } + } +} |
