如何重用在expressjs和socket.io中初始化过的类

时间:2019-03-07 11:12:02

标签: typescript express socket.io

所以我试图将我的socket.io函数分离为多个文件,但是我遇到的问题是,当我需要该类时该类不可用,或者我遇到错误“超出了最大调用堆栈大小”,因为类初始化其自己的其他类的版本,从而依次初始化同一类

示例代码 套接字服务类

WebStorm -> Preferences Build, Execution, Deployment -> Debugger -> Can accept external connections

套接字聊天类

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

套接字会话类

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

   handleAllNewChatEmits(aSocket){
    //code 
  }
}

我假设SocketService类应该初始化其他两个类。但我似乎无法弄清楚如何从另一个类函数调用一个类函数。我以为我会在套接字服务中创建一个方法,该方法将返回聊天和会话套接字服务,但是当我这样做时,尝试调用函数时却得到了未定义的返回。

简而言之,我只想将所有套接字函数分为三个或更多类以提高可读性/可维护性,但我不知道怎么办,因为我需要所有这些中的aSocket变量来使用户连接到套接字< / p>

0 个答案:

没有答案