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

Я пытаюсь создать приложение для чата в стиле WhatsApp, используя socket.io в метеоре.

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

приложение выглядит следующим образом =>

enter image description here

На изображении выше радость и sj связаны вта же комната через уникальный номер room_id, а также тот же случай с радостью и 846.

вот мой код =>

сначала на стороне клиента, когда пользователь нажимает на любое из его соединений, этокод выполняется =>

  let connected_room_id = connections.find({
    user_id: currUser[0].user_id,
    connected_to: connectedUser[0].user_id
  }).fetch();
  socket.emit('join', {
    room_id: connected_room_id[0].room_id
  });

теперь на стороне сервера, чтобы перехватить событие соединения =>

socket.on('join', function(data) {
  socket.join(data.room_id);
});

теперь, когда радость хочет отправить сообщение в sj, этот код запускается =>

  Meteor.call('addNewMessage', e.currentTarget.id, msgContent);
  socket.emit('send message', {
    msg: msgContent,
    room_id: connected_room_id[0].room_id,
    name: currUser[0].name,
    message_id: currUser[0].user_id
  });

теперь на стороне сервера для перехвата события отправки сообщения =>

  socket.on('send message', data => {
  io.to(data.room_id).emit('connectToRoom', {
    msg: data.msg,
    name: data.name,
    msg_id: data.message_id
  });
});

теперь на стороне клиента для перехвата события connectToRoom =>

  socket.on('connectToRoom', function(data) {
  const currUser = Meteor.users.find({ _id: Meteor.userId() }).fetch();
  if (currUser[0].user_id === data.msg_id) {
    document.getElementById('chatBox').insertAdjacentHTML(
      'beforeend',
      `<li class="chat-right">
      <div class="chat-hour">
        08:56 <span class="fa fa-check-circle ml-2"></span>
      </div>
      <div class="chat-text">
        ${data.msg}
      </div>
      <div class="chat-avatar">
        <img
          src="https://www.bootdey.com/img/Content/avatar/avatar3.png"
          alt="Retail Admin"
        />
        <div class="chat-name">${data.name}</div>
      </div>
    </li>`
    );
  } else {
    document.getElementById('chatBox').insertAdjacentHTML(
      'beforeend',
      `
        <li class="chat-left">
                <div class="chat-avatar">
                  <img
                    src="https://www.bootdey.com/img/Content/avatar/avatar3.png"
                    alt="Retail Admin"
                  />
                  <div class="chat-name">${data.name}</div>
                </div>
                <div class="chat-text">
                ${data.msg}
                </div>
                <div class="chat-hour">
                  08:55 <span class="fa fa-check-circle ml-2"></span>
                </div>
              </li>
        `
    );
  }
});

ПРОБЛЕМА =>

когда радость отправляет сообщение sj, оно также получает отправку на другие соединения sjкак 846. Что я хочу, так это то, что когда радость отправляет сообщение sj, оно должно быть видно только в комнате, где sj и радость соединены, а не с остальными. 1037 *https://github.com/sjcodebook/chat-app-in-meteor

Спасибо за чтение и ответ на вопрос.

...