server.ts 815 B

12345678910111213141516171819202122232425262728293031323334
  1. import { Log } from "../util/log";
  2. export namespace RPC {
  3. const log = Log.create({ service: "rpc" });
  4. const PORT = 16713;
  5. export function listen(input?: { port?: number }) {
  6. const port = input?.port ?? PORT;
  7. log.info("trying", { port });
  8. try {
  9. const server = Bun.serve({
  10. port,
  11. websocket: {
  12. open() {},
  13. message() {},
  14. },
  15. routes: {
  16. "/ws": (req, server) => {
  17. if (server.upgrade(req)) return;
  18. return new Response("Not a websocket request", { status: 400 });
  19. },
  20. },
  21. });
  22. log.info("listening", { port });
  23. return {
  24. server,
  25. };
  26. } catch (e: any) {
  27. if (e?.code === "EADDRINUSE") {
  28. return listen({ port: port + 1 });
  29. }
  30. throw e;
  31. }
  32. }
  33. }