Поэтому я пытаюсь разделить свои функции 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 во всех них, чтобы пользователь был подключен к сокетам