Quellcode durchsuchen

feat:增加v2

徐志豪 vor 5 Jahren
Ursprung
Commit
1ad819e27f
5 geänderte Dateien mit 220 neuen und 84 gelöschten Zeilen
  1. 4 0
      indexv2.js
  2. 0 0
      readme.md
  3. 74 68
      server/app.js
  4. 33 16
      server/index.js
  5. 109 0
      server/socketv2.js

+ 4 - 0
indexv2.js

@@ -0,0 +1,4 @@
+
+var WebSocketServer = require("./server/socketv2");
+
+new WebSocketServer().create();

+ 0 - 0
readme.md


+ 74 - 68
server/app.js

@@ -1,80 +1,86 @@
-var fs = require('fs')
-var http = require('http')
-var socketIO = require('socket.io')
-var express = require("express");
-var path = require("path");
+var server = require("http").createServer();
+module.exports = class WebSocketServer {
+  constructor() {
+    this._pageMap = new Map();
+    this._roomIDS = new Map();
+    this._roomPerson = new Map()
 
+    this._users = [];
 
-var app = express();
-app.use(express.static(path.join(__dirname, '/'))); //设置 express  static 静态文件 
+  }
 
-app.get("/chat", (req, res) => {
-    fs.readFile("./client.html", (err, data) => {
-        if (err) throw err;
-        res.write(data);
-        res.end();
-    })
-})
+  create() {
+    this.io = require("socket.io")(server, {
+      path: "/vr-node",
+      serveClient: false,
+      // below are engine.IO options
+      pingInterval: 10000,
+      pingTimeout: 5000,
+      cookie: false,
+    });
+
+    server.listen(3000, { origins: "*" });
 
-var server = http.createServer(app);
+    this.io.on("connection", (socket) => {
+      let user = socket.handshake.query
+      this._users.push(user)
+      const roomId = user['roomId']
+      const client_room = `${roomId}_client`
+      let roomsPerson = this._roomPerson.get(roomId) || []
+      socket.join(client_room);
+      // 一个房间只允许存在一个场景码
+      if (!user['isClient'] && roomsPerson.filter(item => item.scene_num !== user.scene_num).length === 0) {
+        socket.join(roomId, () => {
+          roomsPerson.push(user)
+          this._roomPerson.set(roomId, roomsPerson)
+          // 只派发非小程序端的socket连接数及其user数据
+          console.log(user.scene_num, user.role)
+          this.io.to(roomId).emit('vr_request', { persons: roomsPerson.filter(item => !item.isClient) });
+          this.io.to(client_room).emit('vr_request', { persons: roomsPerson.filter(item => !item.isClient) });
+        });
+      }
+      
+      
+      socket.on('startCall', () => {
+        socket.broadcast.to(roomId).emit('answer', { user })
+        socket.broadcast.to(client_room).emit('answer', { user })
+      })
 
-var users = {};//  sid  socket
-var reflect = {};//  name  sid
-var io = socketIO.listen(server);
-io.on('connection', function (socket) {
-    console.log(socket.id + "已经连接完成")
-    // console.log(socket.id+"已经连接完成")
-    //每次连接都对应一个  sid
-    //每一个用户都有一个socket  对应一个 sid  对应一个  username
-    // console.log(socket.id);
-    io.sockets.emit('connectSucc', socket.id);
+      socket.on('stopCall', () => {
+        socket.broadcast.to(roomId).emit('putup', { user })
+        socket.broadcast.to(client_room).emit('putup', { user })
+      })
 
-    //
-    //发送私密消息
-    socket.on('private message', function (from, to, msg) {
-        // from -->sid
-        //to -->sid
-        for (const key in reflect) {
-            console.log(key, ":", reflect[key])
+
+
+      socket.on("getJson", (data) => {
+        if (roomId) {
+          this.io.to(roomId).emit("action",  data.content.action);
+          this.io.to(roomId).emit("vr_response", data);
         }
-        // console.log('I received a private message by ', reflect[from],from, ' say to ', reflect[to],to, msg);
-        if (reflect[to] in users) {
-            // console.log('to :' + to);
-            //to 222
-            // users[reflect[to]].emit('to' + to, { mess: msg });
-            users[reflect[to]].emit('to' + to, { person: from, content: msg });
-            console.log('to' + to);
-            console.log(reflect[to]);
-            //
-            // console.log(reflect[to],to+'_to');
-            // xor  <--> 222
+      });
+
+      socket.on("disconnect", (reason) => {
+        let roomsPerson = this._roomPerson.get(roomId) || []
+        // 断开连接的把roomsPerson中的user去掉
+        roomsPerson = roomsPerson.filter(item => item !== user)
+        this._roomPerson.set(roomId, roomsPerson)
+        if (!user.isClient) {
+          this.io.to(roomId).emit('vr_request', { persons: roomsPerson.filter(item => !item.isClient) });
+          this.io.to(client_room).emit('vr_request', { persons: roomsPerson.filter(item => !item.isClient) });
         }
-    });
+      });
+      socket.on("error", function (reason) {
+        console.log("异常关闭", reason)
+      });
+      return this;
 
-    //新增用户
-    socket.on('new user', function (data) {
-        reflect[data] = socket.id;
-        // var sidList =
-        //data 是 from 谁发的 添加到这个  users列表  登陆的用户
+    })
 
-        if (socket.id in users) {
-            socket.emit("userHasLogin");
-        } else {
-            // var nickname = data;
-            users[socket.id] = socket;
-            console.log(data, socket.id, "已经登录!")
-            // users["aaa"] = socket
-            //每一个登陆的用户有一个自己的socket
-        }
-        // console.info(users);
-    });
-    //断开连接
-    socket.on('disconnect', function () {
-        console.log('user' + socket.id + ' disconnected');
-    });
-});
+  }
 
+  close() {
+    this.server.disconnect(true);
+  }
 
-server.listen(8080, function () {
-    console.log('Listening at: http://localhost:8080');
-});
+};

+ 33 - 16
server/index.js

@@ -11,7 +11,7 @@ module.exports = class WebSocketServer {
 
   create() {
     this.io = require("socket.io")(server, {
-      path: "/test",
+      path: "/vr-node",
       serveClient: false,
       // below are engine.IO options
       pingInterval: 10000,
@@ -24,42 +24,59 @@ module.exports = class WebSocketServer {
     this.io.on("connection", (socket) => {
       let user = socket.handshake.query
       this._users.push(user)
-      const roomId = user['roomId']
-      console.log(user)
-      socket.join(roomId, () => {
-        let roomsPerson = this._roomPerson.get(roomId) || []
-        roomsPerson.push(user)
-        this._roomPerson.set(roomId, roomsPerson)
-        // 只派发非小程序端的socket连接数及其user数据
-        this.io.to(roomId).emit('vr_request', { persons: roomsPerson.filter(item => !item.isClient) });
-      });
-
+      let roomId = user['roomId']
+      
+      
+      
+      // 一个房间只允许存在一个场景码,若场景不对,则改变房间号
+      roomId = user['roomId'] + user.scene_num
+      let roomsPerson = this._roomPerson.get(roomId) || []
+      const client_room = user['roomId']
+      socket.join(client_room);
+      if (!user['isClient']) {
+        socket.join(roomId, () => {
+          roomsPerson.push(user)
+          this._roomPerson.set(roomId, roomsPerson)
+          // 只派发非小程序端的socket连接数及其user数据
+          console.log(user.scene_num, user.role)
+          this.io.to(roomId).emit('vr_request', { persons: roomsPerson.filter(item => !item.isClient && item.scene_num === user.scene_num) });
+          this.io.to(client_room).emit('vr_request', { persons: roomsPerson.filter(item => !item.isClient && item.scene_num === user.scene_num) });
+        });
+      }
+      
+      
       socket.on('startCall', () => {
         socket.broadcast.to(roomId).emit('answer', { user })
+        socket.broadcast.to(client_room).emit('answer', { user })
       })
 
       socket.on('stopCall', () => {
         socket.broadcast.to(roomId).emit('putup', { user })
+        socket.broadcast.to(client_room).emit('putup', { user })
       })
 
 
 
       socket.on("getJson", (data) => {
         if (roomId) {
-          this.io.to(roomId).emit("action",  data.content.action);
+          if (data.content.action) {
+            this.io.to(roomId).emit("action",  data.content.action);
+            socket.broadcast.to(client_room).emit('action', data.content.action)
+          }
+          
           this.io.to(roomId).emit("vr_response", data);
         }
       });
 
-      console.log("WebSocket服务端建立完毕");
-
       socket.on("disconnect", (reason) => {
         let roomsPerson = this._roomPerson.get(roomId) || []
         // 断开连接的把roomsPerson中的user去掉
         roomsPerson = roomsPerson.filter(item => item !== user)
         this._roomPerson.set(roomId, roomsPerson)
-        this.io.to(roomId).emit('vr_request', { persons: roomsPerson.filter(item => !item.isClient) });
-        console.log("关闭连接", reason);
+        if (!user.isClient) {
+          this.io.to(roomId).emit('vr_request', { persons: roomsPerson.filter(item => !item.isClient && item.scene_num === user.scene_num) });
+          this.io.to(client_room).emit('vr_request', { persons: roomsPerson.filter(item => !item.isClient && item.scene_num === user.scene_num) });
+        }
       });
       socket.on("error", function (reason) {
         console.log("异常关闭", reason)

+ 109 - 0
server/socketv2.js

@@ -0,0 +1,109 @@
+var server = require("http").createServer();
+
+const EVENT = {
+  someOneInRoom: 'someOneInRoom',
+  someOneLeaveRoom: 'someOneLeaveRoom',
+  startCall: 'startCall',
+  putup: 'putup',
+  webSyncAction: 'webSyncAction',
+  clientSyncAction: 'clientSyncAction',
+  action: 'action',
+  roomClose: 'roomClose'
+}
+
+module.exports = class WebSocketServer {
+  constructor() {
+    this._pageMap = new Map();
+    this._roomIDS = new Map();
+    this._roomPerson = new Map()
+
+  }
+
+  create() {
+    this.io = require("socket.io")(server, {
+      path: "/vr-node",
+      serveClient: false,
+      // below are engine.IO options
+      pingInterval: 10000,
+      pingTimeout: 5000,
+      cookie: false,
+    });
+
+    server.listen(3030, { origins: "*" });
+
+    this.io.on("connection", (socket) => {
+      let user = socket.handshake.query
+      const { roomId, deviceId, sceneNum, isClient, useId } = user
+      const webRoomId = `${roomId}${sceneNum}`
+
+      // 加入客户端与H5单独的通讯房间 
+      socket.join(deviceId)
+
+      // 加入所有连接数的通讯房间
+      socket.join(roomId, () => {
+        // 只有h5才能加入H5端的房间
+        
+      })
+      if (!isClient) {
+        socket.join(webRoomId, () => {
+          
+        })
+      }
+      
+      
+      socket.on(EVENT.startCall, () => {
+        if (!isClient) {
+          let roomsPerson = this._roomPerson.get(roomId) || []
+          roomsPerson.push(user)
+          this._roomPerson.set(roomId, roomsPerson)
+          socket.broadcast.to(roomId).emit(EVENT.someOneInRoom, { user, roomsPerson })
+        }
+      })
+
+      socket.on(EVENT.putup, () => {
+        if (!isClient) {
+          let roomsPerson = this._roomPerson.get(roomId) || []
+          roomsPerson = roomsPerson.fliter(item => item.userId !== user.userId)
+          this._roomPerson.set(roomId, roomsPerson)
+          socket.broadcast.to(roomId).emit(EVENT.someOneLeaveRoom, { user, roomsPerson })
+        }
+      })
+
+      socket.on(EVENT.webSyncAction, (data) => {
+        socket.broadcast.to(webRoomId).emit(EVENT.webSyncAction, data)
+      })
+
+      socket.on(EVENT.action, (data) => {
+        socket.broadcast.to(roomId).emit(EVENT.action, data)
+      })
+
+      socket.on(EVENT.clientSyncAction, (data) => {
+        socket.broadcast.to(deviceId).emit(EVENT.clientSyncAction, data)
+      })
+
+      socket.on("disconnect", (reason) => {
+        if (!isClient) {
+          let roomsPerson = this._roomPerson.get(roomId) || []
+          roomsPerson = roomsPerson.fliter(item => item.userId !== user.userId)
+          this._roomPerson.set(roomId, roomsPerson)
+          socket.broadcast.to(roomId).emit(EVENT.someOneLeaveRoom, { user, roomsPerson })
+          if (user.isOwner) {
+            socket.broadcast.to(roomId).emit(EVENT.roomClose)
+          }
+        }
+      })
+
+      socket.on("error", function (reason) {
+        console.log("异常关闭", reason)
+      })
+      return this;
+
+    })
+
+  }
+
+  close() {
+    this.server.disconnect(true);
+  }
+
+};