12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- var server = require("http").createServer();
- module.exports = class WebSocketServer {
- constructor() {
- this._pageMap = new Map();
- this._roomIDS = new Map();
- this._roomPerson = new Map()
- this._users = [];
- }
- 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: "*" });
- this.io.on("connection", (socket) => {
- let user = socket.handshake.query
- this._users.push(user)
- 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) {
- 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);
- }
- });
- 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 && 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)
- });
- return this;
- })
- }
- close() {
- this.server.disconnect(true);
- }
- };
|