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

index.ts 2.3KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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, collab!');
  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('new-user-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. 'new-user-send-update',
  43. (socketID: string, encryptedData: ArrayBuffer) => {
  44. console.log(`sending new user update to ${socketID}`);
  45. io.to(`${socketID}`).emit('new-user-receive-update', encryptedData);
  46. },
  47. );
  48. socket.on('send-update', (roomID, encryptedData) => {
  49. console.log(`${socket.id} sends update to ${roomID}`);
  50. socket.broadcast.to(roomID).emit('receive-update', encryptedData);
  51. });
  52. socket.on('send-mouse-location', (roomID, pointerCoords) => {
  53. console.log(`${socket.id} sends mouse update to ${roomID}`);
  54. socket.broadcast
  55. .to(roomID)
  56. .emit('receive-mouse-location', socket.id, pointerCoords);
  57. });
  58. socket.on('disconnecting', () => {
  59. const rooms = io.sockets.adapter.rooms;
  60. for (const roomID in socket.rooms) {
  61. const remaining = rooms[roomID].length - 1;
  62. if (remaining > 0) {
  63. socket.broadcast.to(roomID).emit('room-user-count', remaining);
  64. }
  65. }
  66. });
  67. socket.on('disconnect', () => {
  68. socket.removeAllListeners();
  69. });
  70. });