Комната Socket.io не выбрасывается - PullRequest
0 голосов
/ 08 января 2020

Я использую бэкэнд Nest JS с внешним интерфейсом React-native (expo) и пытаюсь подключить эти два через библиотеку socket.io.

Я могу создать события от моего сервера до моего мобильного приложения, но по какой-то причине не удается получить событие, связанное с указанным c местом для запуска.

Код моего мобильного приложения:

  static socket = socketIOClient(HttpService.socketUrl + '/room', {
    transports: ['websocket'],
    reconnectionDelay: 1000,
    reconnection: true
  });

  //Called on button click
  static joinRoom(roomId) {
    console.log('subscribing to room', roomId); //This successfully logs to the console
    RoomListener.socket.emit('room-subscription', roomId);
    RoomListener.socket.on('room-event', function(data) {
       console.log(data); //This never happens!
    }
  }

и мой внутренний код:

@WebSocketGateway(80, { namespace: 'room' })
export class RoomGateway implements OnGatewayConnection {
  @WebSocketServer() server: Server;

  handleConnection(client: any, ...args: any[]) {
    //These successfully log to the console
    console.log('connection');
    console.log(client.id);
  }

  @SubscribeMessage('room-subscription')
  async joinRoom(
    @MessageBody() data: string,
    @ConnectedSocket() socket: Socket,
  ): Promise<string> {
    console.log('adding to room ', data); //This successfully logs to the console
    socket.join(data);
    return data;
  }

  @SubscribeMessage('roomTest')
  roomTest(
    @MessageBody() data: string,
    @ConnectedSocket() socket: Socket,
  ): string {
    console.log('emitting to room', roomId); //This successfully logs to the console with the proper data
    this.server.in(roomId).emit('room-event', 'hello');

    return data;
  }
}

Я также пробовал this.server.of('/room').in(roomId).emit('room-event', 'hello);, а также this.server.to(...).emit(...) и те же 3 комбинации с this.server.sockets. Мне не удалось найти четкую документацию о разнице между ними, и я смущен тем, почему я не могу отправить свое мобильное приложение.

Заранее спасибо!

1 Ответ

0 голосов
/ 08 января 2020

Попробуйте:

socket.to(roomId).broadcast.emit('room-event', created);
...