как повторно использовать классы, которые инициализируются один раз в expressjs и socket.io - PullRequest
0 голосов
/ 07 марта 2019

Поэтому я пытаюсь разделить свои функции socket.io на несколько файлов, но у меня проблема в том, что либо класс недоступен, когда мне это нужно, либо возникает ошибка «Превышен максимальный размер стека вызовов», потому что класс инициализирует свою собственную версию другого класса, который в свою очередь инициализирует тот же класс

пример кода Класс обслуживания Socket

export class SocketService {
  socket = Server.socketio().sockets;    
  aSocket: SocketIO.Socket;

  socketChatService: SocketChatService;
  socketSessionService: SocketSessionService;


  constructor() {    
    this.socket.on('connection', (aSocket: SocketIO.Socket) => {
      const user = this.updateOnlineUser(aSocket);
      this.aSocket = aSocket;

      this.socketChatService = new SocketChatService(aSocket);
      this.socketSessionService = new SocketSessionService(aSocket);

      this.getFriendsListByUser(aSocket);
    });
    getFriendsListByUserId(aSocket){
      this.socketChatService.testFunction(aSocket)
    }
  }

Socket Chat Class

export class SocketChatService(){
   constructor(aSocket: SocketIO.Socket) {
    this.socketSessionService = new SocketSessionService(aSocket);
    this.handleAllNewChatEmits(aSocket)
   }

   handleAllNewChatEmits(aSocket){
    //code 
  }
}

Класс сеанса сокетов

export class SocketSessionService {
    sockets = Server.socketio().sockets;
    arrayOfActiveSessions: NewChatSessionModel[];

    socketChatService: SocketChatService;

    //temp
    sessionId: string;

    constructor(aSocket: SocketIO.Socket) {
        this.socketChatService = new SocketChatService(aSocket);

        this.arrayOfActiveSessions = [];
        this.handleAllNewSessionEmits(aSocket)
    }

    /** Handles all incomming session emits  
    */
    handleAllNewSessionEmits(aSocket: SocketIO.Socket) {
        aSocket.on('newChatSession', async (data) => {
            this.handleNewChatSession(aSocket, data)
        })
    }

Я предполагаю, что класс SocketService должен инициализировать два других класса. но я не могу понять, как вызвать функцию класса из другой функции класса. я думал, что создам в сервисе сокетов метод, который будет возвращать сервисы сокетов чата и сеанса, но когда я это делаю, я получаю неопределенное возвращение при попытке вызвать функцию.

Короче говоря, я просто хочу разделить все функции сокетов на три или более классов для удобства чтения и сопровождения, и я не могу понять, как, потому что мне нужна переменная aSocket во всех них, чтобы пользователь был подключен к сокетам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...