Socket.io: рдХреНрдпреЛрдВ рд╕реЙрдХреЗрдЯ.рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ () рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдШрдЯрдирд╛ рдХреЛ рдЖрдЧ рдирд╣реАрдВ рд▓рдЧрд╛рддрд╛ рд╣реИ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рдирд╡ре░ 2015  ┬╖  23рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: socketio/socket.io

рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:

рдЧреНрд░рд╛рд╣рдХ рдХреА рдУрд░

 var socket = io.connect('http://' + serverAddress ,{ reconnection: false, forceNew: true  }  );

 socket.emit('monitorAddedNotify' , { video: sourceVideo , socketId: socket.id});

 socket.on('disconnectThatSoc', function(){
    socket.disconnect();
});

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб:

  io.on('connection', function (socket) {
    console.log('a user connected');


    socket.on('disconnect', function () {
        console.log('user disconnected');
    });
 });

рд╕реЙрдХреЗрдЯ.рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ () рд╡рд┐рдзрд┐ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рдХреНрдпреЛрдВ?

Unable to reproduce

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдЖрдк рдмреЗрд╡рдХреВрдл рд╣реИ рдХреНрдпрд╛? рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдПрдорд┐рдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдИ рдПрдорд┐рдЯ рдирд╣реАрдВ рд╣реИред рднрд╛рдбрд╝ рдореЗрдВ рдЬрд╛рдУ рдпрд╣рд╛рдБ рд╕реЗ

рд╕рднреА 23 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рдХрдИ рдмрд╛рд░ F5 рдмрдЯрди рджрдмрд╛рдХрд░ рдкреЗрдЬ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдФрд░ рддреЗрдЬреА рд╕реЗ рдкреБрдирдГ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред

рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЖрдк рдХрд┐рд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ? рдореИрдВ рдирд╡реАрдирддрдо рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЬрдм рдореИрдВ рдмреИрдЧ рдХреЛ рддреЗрдЬреА рд╕реЗ рдкреБрдирдГ рд▓реЛрдб рдХрд░рддрд╛ рд╣реВрдВ "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛" рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ: рдирд┐рд░рд╛рд╢:

рдореБрдЭреЗ рднреА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЗрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдореЗрдВ, рд╡рд┐рдпреЛрдЧ, рд▓реЗрдХрд┐рди рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдмрд╛рдж рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдмреНрд░рд╛рдЙрдЬрд╝рд░: рдХреНрд░реЛрдо 55.0.2883.95 (64-рдмрд┐рдЯ)
рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ: "^ 1.7.2"

рд╣рд╛рдп @рд╡реЗрдВрдЯрд╛рдХреНрд╡рд┐рд▓ред рдореБрдЭреЗ рд╡рд╣реА рдкрд░реЗрд╢рд╛рдиреА рд╣реИ рдХрд┐ F5 рдзрд╛рд░рдг рдХрд░рддреЗ рд╕рдордп рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдИрд╡реЗрдВрдЯ рдлрд╛рдпрд░рд┐рдВрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЗрд╕ рдкрд░ рдХрд╛рдмреВ рдкрд╛ рдЪреБрдХреЗ рд╣реИрдВ?

@ giathinh910 рдХрд┐рд╕реА рджрд┐рдП рдЧрдП рд╡рд┐рд▓рдВрдм рдХреЗ рдмрд╛рдж disconnect рдШрдЯрдирд╛ рдирд╣реАрдВ рд╣реИ (рдЬреЛ pingTimeout / pingInterval рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ, рдпрд╣рд╛рдВ рдкреНрд░рд▓реЗрдЦрд┐рдд)?

@darrachequesne рдореЗрд░рд╛ рдореБрджреНрджрд╛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд @ventaquil рдЬреИрд╕рд╛ рд╣реА рд╣реИ "рдкреГрд╖реНрда рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдХрдИ рдмрд╛рд░ F5 рдмрдЯрди рджрдмрд╛рдХрд░ рддреЗрдЬреА рд╕реЗ рдкреБрдирдГ рд▓реЛрдб рдХрд░реЗрдВ"ред рдЖрдо рддреМрд░ рдкрд░ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдкреГрд╖реНрда рдХреЛ рд░реАрдлреНрд░реЗрд╢ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди "рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ" рдХреЛ рдлрд┐рд░ рд╕реЗ "рдХрдиреЗрдХреНрдЯ" рдХрд░ рджреЗрдЧрд╛ред рдореИрдВ рдСрдирд▓рд╛рдЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрди 2 рдШрдЯрдирд╛рдУрдВ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрджрд┐ рдкреГрд╖реНрда рдХрд╛рдлреА рддреЗрдЬреА рд╕реЗ рдкреБрдирдГ рд▓реЛрдб рд╣реЛ рд░рд╣рд╛ рд╣реИ, рддреЛ "рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ" рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдХреБрдЫ рдЕрд╕реНрддрд┐рддреНрд╡рд╣реАрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЙрдХреЗрдЯ рдЖрдИрдбреА рдЬреБрдбрд╝ рдЬрд╛рддреА рд╣реИред рдЗрди рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓реЛрдЧреЛрдВ рдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкрд┐рдВрдЧрдЯрд╛рдЗрдордЖрдЙрдЯ рдХреЗ рдмрд╛рдж рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдореИрдВ рд╕реЙрдХреЗрдЯ рдЖрдИрдбреА рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рдмрджрд▓рддрд╛ рд╣реВрдВ рдЬреЛ рдХреЗрд╡рд▓ рдСрдирд▓рд╛рдЗрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджрд┐рдЦрд╛рдПрдЧрд╛, рд╕реЙрдХреЗрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдирд╣реАрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ред рдореИрдВрдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдПрдХ рдПрдорд┐рдЯ рдкреНрд░реЗрд╖рдХ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдкрд░ рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рдХрд╣ рд░рд╣рд╛ рд╣реИред
socket.on("heartbeat", function() { // console.log('heartbeat called!'); hbeat[socket.id] = Date.now(); setTimeout(function() { var now = Date.now(); if (now - hbeat[socket.id] > 5000) { console.log('this socket id will be closed ' + socket.id); if (addedUser) { --onlineUsers; removeFromLobby(socket.id); try { // this is the most important part io.sockets.connected[socket.id].disconnect(); } catch (error) { console.log(error) } } } now = null; }, 6000); });

рдореБрдЭреЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдХреЛрдб рдлрд╝рдВрдХреНрд╢рди рдорд┐рд▓рд╛:

io.sockets.connected[socket.id].disconnect();

рдРрд╕рд╛ рдЕрдм рднреА рд╣реЛрддрд╛ рд╣реИред рдпрд╣ F5/рд░реАрдлреНрд░реЗрд╢ рд╣реЛрдирд╛ рдЬрд░реВрд░реА рдирд╣реАрдВ рд╣реИред рдПрдХ рдЯреИрдм рдЦреЛрд▓рдирд╛ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЪрд░рдг рдореЗрдВ рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рдмрдВрдж рдХрд░рдирд╛, рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рдмрдирддрд╛ рд╣реИред рдЗрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕реЙрдХреЗрдЯ рдмрд╣реБрдд рддреЗрдЬрд╝ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдЪрд▓ рд░рд╣реЗ рд╣реЛрдВред рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рдЯреИрдм рдЦреЛрд▓рдирд╛ рдФрд░ рдЕрдиреНрдп рдЯреИрдм рдЦреЛрд▓рдиреЗ рд╕реЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реА (рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ)ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрдЧ рд╣реИ рдЬрд┐рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реЛрдиреЗред рдпрд╣ рдореЗрд░реЗ рдЧреЗрдо рд╕рд░реНрд╡рд░ рдкрд░ рдШреЛрд╕реНрдЯ рдЧреЗрдореНрд╕ рдмрдирд╛ рд░рд╣рд╛ рд╣реИ

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдХреБрдЫ рдПрдорд┐рдЯрд┐рдВрдЧ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕рд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреА рдпрд╛ рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдХреБрдЫ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ... рд╢рд╛рдпрдж...

рдЧреНрд░рд╛рд╣рдХ :

function ManualSocketDisconnect() {
    socket.emit("manual-disconnection", socket.id);

    socket.close();

    console.log("Socket Closed. ");
}

рд╕рд░реНрд╡рд░ :

io.on("connection", function(socket) {
    console.log("User " + socket.id + " Connected. ");

    socket.on("manual-disconnection", function(data) {
        console.log("User Manually Disconnected. \n\tTheir ID: " + data);
    });
});

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХреБрдЫ рдЫреЗрдж рдЫреЛрдбрд╝реЗ рд╣реИрдВред рдореИрдВ рдХреЛрдИ рдкреЗрд╢реЗрд╡рд░ рдирд╣реАрдВ рд╣реВрдВред рдореИрдВ

рдореИрдВ рдПрдХ рд╣реА рдореБрджреНрджреЗ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ!
рдореИрдВ ReactJS-ExpressJS рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред

рдпрд╣рд╛рдВ рд╕реНрдерд┐рддрд┐ рд╣реИ, рдЬреЛ рдШрдЯрдирд╛ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдЧреА, рдФрд░ componentWillUnmount() рдореЗрдВ рд╕рдорд╛рд╣рд┐рдд рд╣реИред

рдореИрдВ рджреЛ рдШрдЯрдирд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реВрдБрдЧрд╛, рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВ componentWillUnmount() . рд╕реЗ рд╕рдХреНрд░рд┐рдп рдХрд░реВрдБрдЧрд╛

  1. newMessage :- рдпрд╣ рд╕рдВрджреЗрд╢ рд╡рд┐рд╢реЗрд╖ рдХрдорд░реЗ рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛
  2. disconnect :-(рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ) рдЗрд╕ рдШрдЯрдирд╛ рд╢реНрд░реЛрддрд╛ рдиреЗ рдХреЙрд▓ рдмреИрдХ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдХреЙрд▓ рдмреИрдХ рд╣рд┐рдЯ рд╣реЛрдиреЗ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рдкрд╛рд╕ console.log() рд╣реИред

рдЕрдм, рд╣рдо рдЪрд▓рддреЗ рд╣реИрдВ:-
рдЧреНрд░рд╛рд╣рдХ:-

рдЗрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рдЕрдВрдЬрд╛рдо рджрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ :-

  componentDidMount() {
    console.log(this.props)
    chat.emit('authenticate', {
      token: localStorage.getItem('auth'),
      refreshToken: localStorage.getItem('refresh'),
      projectId: this.props.projectId,
      userId: this.props.userId,
    });
    chat.on('newMessage', (messageData) => {
      console.log('------------newMessageReceived-------------');
      this.props.messageReceived({ messages: this.props.messages, messageData }, () => {
        console.log('callback');
        this.setState({
          messages: this.props.messages
        })
      })
      console.log(messageData);
    })
  }

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдирд╛ рдЖрдЧ рдирд╣реАрдВ рд╣реЛрдЧреАред

  componentWillUnmount() {
    chat.emit('disconnect','just disconnect);
  }

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдирд╛ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред (рдпрджрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрджреЗрд╢ рдШрдЯрдирд╛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рд╣реЛрддреА рд╣реИ рддреЛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ)

  componentWillUnmount() {
    chat.emit('newMEssage', {
      messageHeader: {
        sender: {
          user: {
            id: this.props.userId,
            name: this.props.name
          }
        }
      },
      messageBody: 'hello',
    });
  }

рдХреЛрдИ рднрд╛рдЧреНрдп рдирд╣реАрдВ

рд╕рд░реНрд╡рд░:-
рдпрд╣рд╛рдБ рдПрдХреНрд╕рдкреНрд░реЗрд╕рдЬреЗрдПрд╕ рдмреИрдХрдПрдВрдб рдкрд░ рдХреЛрдб рд╣реИ

// рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рдмрд╛рджChatSocket рдХреЛ app.js рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ

function initializeChatSocket(server) {
  projects.hasMany(projectTeam, { foreignKey: 'projectId' });

  const io = socketIO(server);
  const chat = io.of('/chat').on('connection', function (socket) {
    console.log(
      '----------------------------------------New Chat Connection Established-------------------------------------------------------------------------'
    );

    socket.auth = false;

    socket.on('authenticate', function (data) {
      console.log('\n\n\n\n', 'authenticate called', '\n\n\n\n', data, '\n\n\n');

      try {
        const dummyReq = {
          headers: {
            refreshtoken: data.refreshToken,
          },
        };
        console.log('\n\n\n\n', 'before verify', '\n\n\n\n');
        const userDetails = verifyJWTToken(dummyReq, data.token);
        console.log('\n\n\n\n', 'after verify', '\n\n\n\n');
        socket.userId = userDetails.userId;
        socket.projectId = data.projectId;

        projectTeam
          .findAll({
            where: {
              [Op.and]: {
                projectId: data.projectId,
                userId: data.userId,
              }
            }
          })
          .then(projects => {
            console.log('\n\n\n\n', JSON.stringify(projects), '\n\n\n\n');
            if (projects.length === 1) {
              socket.auth = true;
              socket.join(socket.projectId);
              console.log('User id:- ${userDetails.userId} linked to project id :- ${socket.projectId}');
            } else {
              console.log('User id:- ${userDetails.userId} not linked to project id :- ${socket.projectId}');
              throw { message: 'User not linked to project' };
            }
          });
      } catch (error) {
        console.log(String(error));

        socket.auth = false;
        socket.disconnect(String(error));
      }
    });

    socket.on('disconnectt', function() {
      console.log('Client Disconnecting'); // This is not being fired :/
      socket.removeAllListeners('newMessage');
      socket.removeAllListeners('disconnect');
      socket.removeAllListeners('authenticate');
      socket.removeAllListeners('connection');
      });

    socket.on('newMessage', async function (messageData) {
      console.log('-------------------------New Message----------------------', String(messageData));
      //TODO Save Message in Database

      try {
        socket.broadcast.to(socket.projectId).emit('newMessage', messageData);
        console.log('\n\n\n\n\n broadcast sent\n\n' + JSON.stringify(messageData) + '\n\n\n');
      } catch (error) {
        console.log('\n\n\n\n\n broadcast error\n\n\n\n\n');
        console.log(String(error));

        console.log(error);
        //TODO Handle Message Sending Error
      }
    });

  });
}

рдХреНрдпрд╛ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдпрд╛ рдХреБрдЫ рдФрд░ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдореБрдЭреЗ рд╕реНрдЯреИрдХ-рдУрд╡рд░рдлреНрд▓реЛ рд╕рдореБрджрд╛рдп рд╕реЗ рдкреВрдЫрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ?

@manjotsk рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рдареАрдХ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдХреЛрдб рдкрд░ рдЖрдк disconnectt (рдбрдмрд▓ t рдиреЛрдЯрд┐рд╕) рдХреЗ рд▓рд┐рдП рд╕реБрди рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рдлреНрд░рдВрдЯ-рдПрдВрдб рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ disconnect ред рд╕рд╛рде рд╣реА, рдЖрдк рд╢рд╛рдпрдж disconnect рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рдЙрд╕ рдИрд╡реЗрдВрдЯ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдб рд╣реИ рдЬреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ ips рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдШрдЯрдирд╛ рдХреЛ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕реЙрдХреЗрдЯ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ-- рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдореЗрд░реЗ рдРрдк рдХреЛ рдкреБрдирдГ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ рдЬрд▓реНрджреА рд╕реЗ рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдХрднреА рднреА рдЖрдЧ рдирд╣реАрдВ рд▓рдЧрд╛рддрд╛ рд╣реИ!

@manjotsk рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕реЗ рдЕрднреА рддрдХ рдареАрдХ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдХреЛрдб рдкрд░ рдЖрдк disconnectt (рдбрдмрд▓ t рдиреЛрдЯрд┐рд╕) рдХреЗ рд▓рд┐рдП рд╕реБрди рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рдлреНрд░рдВрдЯ-рдПрдВрдб рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИ disconnect ред рд╕рд╛рде рд╣реА, рдЖрдк рд╢рд╛рдпрдж disconnect рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рд╣реЛрдиреЗ рдкрд░ рдЙрд╕ рдИрд╡реЗрдВрдЯ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
disconnectt рдПрдХ рдзреЛрдЦреЗрдмрд╛рдЬ рдЙрдкрдирд╛рдо рдерд╛ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛! рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдЗрд╕рдХреЗ рд╕рд╛рде рджреЛрдиреЛрдВ рддрд░рдл рджреЛрдмрд╛рд░рд╛ рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛ред рдФрд░, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд▓рдд рдерд╛! рдореБрдЭреЗ рдПрдХ рд╕реНрдкрд╖реНрдЯ рджреГрд╢реНрдп рдорд┐рд▓рд╛! рдзрдиреНрдпрд╡рд╛рдж @nathanheffley :)

@manjotsk рдХреНрдпрд╛?

рдФрд░ рдХреЗрд╡рд▓ рд╕реЙрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдПрдХ рдмрд╛рд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рд╕реЙрдХреЗрдЯ.рдСрди
"рдЧреНрд░рд╛рд╣рдХ рд╕реНрддрд░ред"
рдЙрджрд╛рд╣рд░рдг:
рд╕реЙрдХреЗрдЯ.рдСрди ('рдХрдиреЗрдХреНрдЯ')
рдЙрдкрдпреЛрдЧ
рд╕реЙрдХреЗрдЯред рдПрдХ рдмрд╛рд░ ('рдХрдиреЗрдХреНрдЯ'
.

рдпрд╣рд╛рдБ рд╡рд╣реА my
рд╕реЙрдХреЗрдЯ.рдСрди ("рд╕рдВрджреЗрд╢") {(рдбреЗрдЯрд╛рдЕрд░реЗ, рд╕реЙрдХреЗрдЯрдПрдХ) -> рд╢реВрдиреНрдп рдореЗрдВ

  if let data = dataArray.first as? Data{
    do{
      let objc = try JSONDecoder.init().decode(GetChatConversation.self, from: data)
      completionHandler(objc,nil)
    }
    catch let error{
      return completionHandler(nil,error.localizedDescription)
    }
  }else{
    completionHandler(nil,"Cannot cast Array of Any to Data")
  }
}

рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдкрддрд╛ рд╣реЛ рддреЛ рдХреЙрд▓рдмреИрдХ рд╡рд╛рдкрд╕ рди рдХрд░реЗрдВ рдореБрдЭреЗ рдмрддрд╛рдПрдВ

рдЖрдк рдмреЗрд╡рдХреВрдл рд╣реИ рдХреНрдпрд╛? рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдПрдорд┐рдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдИ рдПрдорд┐рдЯ рдирд╣реАрдВ рд╣реИред рднрд╛рдбрд╝ рдореЗрдВ рдЬрд╛рдУ рдпрд╣рд╛рдБ рд╕реЗ

рд╡рд╣ рдХреБрдЫ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдирдХрд╛рд░рд╛рддреНрдордХ рдКрд░реНрдЬрд╛ рд╣реИ, рдПрд╣рд╕рд╛рди666xред

рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓рд╛ред рдореИрдВрдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдПрдХ рдПрдорд┐рдЯ рдкреНрд░реЗрд╖рдХ рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдкрд░ рджрд┐рд▓ рдХреА рдзрдбрд╝рдХрди рдХрд╣ рд░рд╣рд╛ рд╣реИред
рдПрдЪрдмреАрдЯ [рд╕реЙрдХреЗрдЯ.рдЖрдИрдбреА] = рджрд┐рдирд╛рдВрдХ.рдЕрдм ();

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рд╕реЗ hbeat рдореВрд▓реНрдп рдХреНрдпрд╛ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?

рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдореЗрдВ socket.disconnect() рдпрд╛ socket.emit('disconnect') рдХреЗ рдмрдЬрд╛рдп $#$2 socket.close(); #$ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ 'disconnect' рдИрд╡реЗрдВрдЯ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

jloa picture jloa  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

distracteddev picture distracteddev  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

doughsay picture doughsay  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

shashuec picture shashuec  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

thebinarypenguin picture thebinarypenguin  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ