io.sockets.in не работает в nativescript-socketio

#javascript #node.js #socket.io #nativescript

#javascript #node.js #socket.io #nativescript

Вопрос:

я пытаюсь создать систему приватного чата в приложении nativescript, используя socketio и nodejs для функции живого чата.

это плагин, который я использую https://github.com/triniwiz/nativescript-socketio /

Он хорошо работает как групповой чат, но я хочу сделать его приватным. итак, я искал и видел io.sockets.in().emit , что я должен использовать, а не io.emit()

это то, что я пробовал

     var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);
    io.on('connection', (socket) => {
      console.log('a user connected');
      socket.on('disconnect', () => {
        console.log('user disconnected');
      });
      socket.on('privatechatroom', function(data){
        socket.join(data.chatid, function () {
                io.sockets.in(data.chatid).emit('joined', { mes: 'Joined chat room'   data.chatid });
              socket.on('chat message', (data) => {
                console.log('message: '   data.message);
                //io.emit('chat message', );
                io.sockets.in(data.chatid).emit('chat message', { message: data.message, type: data.type, date: data.date, sender: data.sender });
              });
              socket.on('typing', (msg) => {
                console.log('message: '   msg);
                io.sockets.in(msg).emit('typing', msg);
              });
              socket.on('notTyping', (msg) => {
                console.log('message: '   msg);
                io.sockets.in(msg).emit('noTyping', msg);
              });
        });
        });
    });
  

На broswer он хорошо работает для приватного чата. но в моем приложении nativescript это не работает, если я не использую io.emit() , а не io.sockets.in()

Ответ №1:

прежде всего, вы не можете использовать socket.on(событие …) в разделе socket.join():

  socket.on('privatechatroom', function(data){
        socket.join(data.chatid, function () {
           socket.in(data.chatid).emit('joined', { mes: 'Joined chat room'   data.chatid });
        
      });
       socket.on('chat message', (data) => {
           console.log('message: '   data.message);
           //io.emit('chat message', );
           socket.in(data.chatid).emit('chat message', { message: data.message, type: data.type, date: data.date, sender: data.sender });
         });
    socket.on('typing', (msg) => {
      console.log('message: '   msg);
      socket.in(msg).emit('typing', msg);
    });
    socket.on('notTyping', (msg) => {
      console.log('message: '   msg);
      socket.in(msg).emit('noTyping', msg);
    });
});
  

когда вы присоединяетесь к клиенту сокета в комнате, вы должны отправлять свои сообщения непосредственно в эту комнату с помощью :

 socket.to(chatid).emit('your event', {
         foo:"bar"
      });