您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

index.ts 1.9KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. // source: https://github.com/idlewinn/collab-server/blob/master/src/index.ts
  2. import express from "express";
  3. import http from "http";
  4. import socketIO from "socket.io";
  5. const app = express();
  6. const port = process.env.PORT || 8080;
  7. app.get("/", (req, res) => {
  8. res.send("Hi, excalidraw-room!");
  9. });
  10. const server = http.createServer(app);
  11. server.listen(port, () => {
  12. console.log(`listening on port: ${port}`);
  13. });
  14. const io = socketIO(server, {
  15. handlePreflightRequest: function(req, res) {
  16. var headers = {
  17. "Access-Control-Allow-Headers": "Content-Type, Authorization",
  18. "Access-Control-Allow-Origin": req.header ? req.header.origin : "*",
  19. "Access-Control-Allow-Credentials": true
  20. };
  21. res.writeHead(200, headers);
  22. res.end();
  23. }
  24. });
  25. io.on("connection", socket => {
  26. console.log("connection established!");
  27. io.to(`${socket.id}`).emit("init-room");
  28. socket.on("join-room", roomID => {
  29. console.log(`${socket.id} has joined ${roomID}`);
  30. socket.join(roomID);
  31. if (io.sockets.adapter.rooms[roomID].length <= 1) {
  32. io.to(`${socket.id}`).emit("first-in-room");
  33. } else {
  34. socket.broadcast.to(roomID).emit("new-user", socket.id);
  35. }
  36. io.in(roomID).emit(
  37. "room-user-count",
  38. io.sockets.adapter.rooms[roomID].length
  39. );
  40. });
  41. socket.on(
  42. "server-broadcast",
  43. (roomID: string, encryptedData: ArrayBuffer, iv: Uint8Array) => {
  44. console.log(`${socket.id} sends update to ${roomID}`);
  45. socket.broadcast.to(roomID).emit("client-broadcast", encryptedData, iv);
  46. }
  47. );
  48. socket.on("disconnecting", () => {
  49. const rooms = io.sockets.adapter.rooms;
  50. for (const roomID in socket.rooms) {
  51. const remaining = rooms[roomID].length - 1;
  52. if (remaining > 0) {
  53. socket.broadcast.to(roomID).emit("room-user-count", remaining);
  54. }
  55. }
  56. });
  57. socket.on("disconnect", () => {
  58. socket.removeAllListeners();
  59. });
  60. });