123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- 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);
- }
- };
|