socketv2.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. var server = require("http").createServer();
  2. const EVENT = {
  3. someOneInRoom: 'someOneInRoom',
  4. someOneLeaveRoom: 'someOneLeaveRoom',
  5. startCall: 'startCall',
  6. putup: 'putup',
  7. webSyncAction: 'webSyncAction',
  8. clientSyncAction: 'clientSyncAction',
  9. action: 'action',
  10. roomClose: 'roomClose'
  11. }
  12. module.exports = class WebSocketServer {
  13. constructor() {
  14. this._pageMap = new Map();
  15. this._roomIDS = new Map();
  16. this._roomPerson = new Map()
  17. }
  18. create() {
  19. this.io = require("socket.io")(server, {
  20. path: "/vr-node",
  21. serveClient: false,
  22. // below are engine.IO options
  23. pingInterval: 10000,
  24. pingTimeout: 5000,
  25. cookie: false,
  26. });
  27. server.listen(3030, { origins: "*" });
  28. this.io.on("connection", (socket) => {
  29. let user = socket.handshake.query
  30. const { roomId, deviceId, sceneNum, isClient, useId } = user
  31. const webRoomId = `${roomId}${sceneNum}`
  32. // 加入客户端与H5单独的通讯房间
  33. socket.join(deviceId)
  34. // 加入所有连接数的通讯房间
  35. socket.join(roomId, () => {
  36. // 只有h5才能加入H5端的房间
  37. })
  38. if (!isClient) {
  39. socket.join(webRoomId, () => {
  40. })
  41. }
  42. socket.on(EVENT.startCall, () => {
  43. if (!isClient) {
  44. let roomsPerson = this._roomPerson.get(roomId) || []
  45. roomsPerson.push(user)
  46. this._roomPerson.set(roomId, roomsPerson)
  47. socket.broadcast.to(roomId).emit(EVENT.someOneInRoom, { user, roomsPerson })
  48. }
  49. })
  50. socket.on(EVENT.putup, () => {
  51. if (!isClient) {
  52. let roomsPerson = this._roomPerson.get(roomId) || []
  53. roomsPerson = roomsPerson.fliter(item => item.userId !== user.userId)
  54. this._roomPerson.set(roomId, roomsPerson)
  55. socket.broadcast.to(roomId).emit(EVENT.someOneLeaveRoom, { user, roomsPerson })
  56. }
  57. })
  58. socket.on(EVENT.webSyncAction, (data) => {
  59. socket.broadcast.to(webRoomId).emit(EVENT.webSyncAction, data)
  60. })
  61. socket.on(EVENT.action, (data) => {
  62. socket.broadcast.to(roomId).emit(EVENT.action, data)
  63. })
  64. socket.on(EVENT.clientSyncAction, (data) => {
  65. socket.broadcast.to(deviceId).emit(EVENT.clientSyncAction, data)
  66. })
  67. socket.on("disconnect", (reason) => {
  68. if (!isClient) {
  69. let roomsPerson = this._roomPerson.get(roomId) || []
  70. roomsPerson = roomsPerson.fliter(item => item.userId !== user.userId)
  71. this._roomPerson.set(roomId, roomsPerson)
  72. socket.broadcast.to(roomId).emit(EVENT.someOneLeaveRoom, { user, roomsPerson })
  73. if (user.isOwner) {
  74. socket.broadcast.to(roomId).emit(EVENT.roomClose)
  75. }
  76. }
  77. })
  78. socket.on("error", function (reason) {
  79. console.log("异常关闭", reason)
  80. })
  81. return this;
  82. })
  83. }
  84. close() {
  85. this.server.disconnect(true);
  86. }
  87. };