едиственное что не получается так это не исчезает кнопка online со страницы когда автор ушел
клиент
$(function () {
var user_login = $('#user_id').text();
if($("div").is('#online')) {
var auth_post = $('#online').attr('val');
}
//подключение к серверу
var socket=io('https://findquick.it:3000');
socket.on('connect', function (){//подключение к серверу
socket.emit('login', user_login); //отправляем id авторизованного и id атвтора
socket.on('createBtnChat', function (data) { //принимаем ответ от сервера и создаем кнопку online если ее нет
if(data.id == auth_post) {
BtnCreateChat(data.id, data.login);
} else {
console.log('data.id() != auth_post()');
}
});
if($("div").is('#online')) { // если есть div с id online
socket.emit('ifAuthorOnline', auth_post);
}
socket.on('disconnect', function (id) {
setTimeout(function () {
$('#createChat_'+id).remove();
console.log('btn for author '+id+' is deleted');
}, 500);
});
});
});
function BtnCreateChat(id, login) {
if($("#createChat_"+$('#online').attr('val')).length === 0) { //если еще нет кнопки, что автор в сети
$('#online').append('<button data="'+id+'" id="createChat_'+id+'" class="btn btn-primary btn-sm">'+login+' online</button>');
}
}
сервер
var users_login_list = {};
var user_ids = [];
io.on('connection', function(socket) {
socket.on('login', function(id_user_login) { //принимаем id пользователя который должен аторизоваться
connection.query('update * set * = ?, * = ? where * = ?', [1, socket.id, id_user_login], function (err, res) {
if(err) console.log(err);
else {
connection.query('select *, * from * where * = ?', [id_user_login], function(err, login){
io.emit('createBtnChat', {id: id_user_login, login: login[0].login});
user_ids.push(id_user_login); //позволяет добавить один, или более элементов в конец массива
socket.user_id = id_user_login;
users_login_list[id_user_login] = socket.id;
});
}
});
});
socket.on('ifAuthorOnline', function(id_author) {
connection.query('select *, * from * where * = ? and * = ?', [1, id_author], function (err, res) {
if(err) console.log(err);
else {
if (res != '') { //если запрос вернул результат с id пользователя
//тогда отправляем ответ с кнопкой клиенту
io.emit('createBtnChat', {id: res[0].id, login: res[0].login});
//console.log('Author '+res[0].login+' is online');
}
}
});
});
socket.on('disconnect', function () {
setTimeout(function () {
connection.query('update * set * = ?, * = NULL where * = ?', [0, socket.id], function (err, res) {
if(err) console.log(err);
else {
user_ids.splice( user_ids.indexOf(socket.user_id), 1 );
delete users_login_list[socket.user_id];
}
});
}, 1000);
});
});