рдпрд╣рд╛рдБ рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:
рдЧреНрд░рд╛рд╣рдХ рдХреА рдУрд░
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');
});
});
рд╕реЙрдХреЗрдЯ.рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ () рд╡рд┐рдзрд┐ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рдХреНрдпреЛрдВ?
рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдореИрдВрдиреЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛, рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдХрдИ рдмрд╛рд░ 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()
. рд╕реЗ рд╕рдХреНрд░рд┐рдп рдХрд░реВрдБрдЧрд╛
newMessage
:- рдпрд╣ рд╕рдВрджреЗрд╢ рд╡рд┐рд╢реЗрд╖ рдХрдорд░реЗ рдореЗрдВ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛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'
рдИрд╡реЗрдВрдЯ рдЯреНрд░рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдЖрдк рдмреЗрд╡рдХреВрдл рд╣реИ рдХреНрдпрд╛? рдЖрдк рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдПрдорд┐рдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдИ рдПрдорд┐рдЯ рдирд╣реАрдВ рд╣реИред рднрд╛рдбрд╝ рдореЗрдВ рдЬрд╛рдУ рдпрд╣рд╛рдБ рд╕реЗ