Нужно изменить класс socket.io на синглтон - PullRequest
0 голосов
/ 14 октября 2019

Как лучше всего сделать socket.io для синглтона? здесь у меня есть три файла, мне нужно использовать метод socket.io в user.mjs

socket.mjs

class socketBusiness extends baseBusiness {
  //io = null;
  //connectedUsers = {}
  constructor(io) {
    super(io);
    this.io = io;
    this.connectedUsers = {};
    this.addUserRef= {}; 
    this.bindEvents();
  }

  bindEvents() {
    this.io.on("connection", this.onConnection);

    this.io.use(this.onBeginConnection);
  }
  unBindEvents() {
    this.io.off("connection", this.onConnection);
  }

  onConnection(socket) {
    let _io = this.io;
    let socketId = socket.id;


    socket.on("disconnect", reason => {
    });

    socket.on("chat message", function(msg) {
    });
  }
 addUserRef(userId, cstId) {

      let arr = this.addUserRef[cstId] || [];
      if (arr.indexOf(cstId) < 0) {
        arr.push(cstId);
      }
      this.addUserRef[userId] = arr; 
  }
}
export default socketBusiness;

user.mjs

const socket = require("socket.mjs)
export async function addCst(req, res) {
socket.addUserRef(req.id,req.cstId)
}

Как я могу получить доступ к методу socket.io? любая помощь будет высоко ценится

www.mjs

import socket from '../socket.mjs';


var server = createServer(app);
var io = new SocketServer(server, {})
var sb = new socketBusiness(io);

1 Ответ

1 голос
/ 14 октября 2019

Экспорт экземпляра:

 export default new socketBusiness;

Если вы экспортируете синглтон, вы не можете передать io в конструктор. Переместите логику инициализации в метод:

constructor() { }

init(io) {
  this.io = io;
  this.bindEvents();
}

Затем инициализируйте синглтон, когда вы получили сокет:

var io = new SocketServer(server, {})
socket.init(io);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...