我使用nodejs和socket.io在共享服务器上的端口49158上运行聊天应用程序,因此我无法使用标准端口80.
在某些网络中,客户端可以使用套接字登录,但无法发送任何消息。 提前谢谢。
客户代码:
var messagToSend = e.data.messageToSend;
messagToSend.id = self.user.id;
messagToSend.token = self.user.token;
self._socket.emit('newmsg',messagToSend, function (err, data) {
if (err == null) {
self.toastr.success('Message was sent successefully');
self.newMessageWindow.close();
} else {
self.toastr.error(`Bad emails : ${data} `);
self.newMessageWindow.close();
}
});
服务器代码:
socket.on('newmsg', function (data, callback) {
if (data && data.id && data.titre && data.message && data.emails && typeof(data.notify_me) === "boolean" && data.token) {
var user = null;
var titre = data.titre;
var message_content = data.message;
var emails = data.emails;
var notify_me = data.notify_me;
var token = data.token;
var id = data.id;
var badusers = [];
// verification si le user est bon
User.get(id, function (err, connected_user) {
if (!err) {
user = connected_user;
if (user !== null) {
// verification du token
if ((jwt.verify(token, 'shhhhh')) && (jwt.verify(token, 'shhhhh')).email == user.email) {
// bon token
Sync(function () {
// on cree le message
try {
var message = Message.create.sync(null, {
titre: titre,
content: message_content,
notify_me: notify_me
});
if (message !== null) {
// message created we can add the sender
try {
var sender = message.setSender.sync(null, user);
if (sender !== null) {
// on parcours les emails
for (let i = 0; i < emails.length; i++) {
let email_destinaire = emails[i];
let destinataires = User.find.sync(null, {email: email_destinaire}, 1);
if (destinataires.length > 0) {
let destinataire = destinataires[0];
// verification si le user est online ou pas
var k = 0;
var en_ligne = false;
while (en_ligne == false && k != online.length) {
if (online[k].email == destinataire.email) {
en_ligne = true;
} else {
k++;
}
}
if (en_ligne == true) {
// on fait un emit
io.sockets.connected[online[k].socket_id].emit('newmsg', {
id: message.id,
titre: message.titre,
content: message.content,
created_at: message.created_at,
notify_me: message.notify_me,
user: user
});
}
// on enregistre dans les receivers
// on enregistre dans les receivers
message.addReceivers(destinataire, {vu: false}, function (err, dest) {
if (!err) {
/* if (enligne == true) {
// recuperation de la liste des favoris
user.getFavoris(function (err, favoris) {
if (!err) {
var z = 0;
var trouve = false;
while (trouve == false && z != favoris.length) {
if (favoris[z].email == destinataire.email) {
trouve = true;
} else {
z++;
}
}
if (trouve == false) {
user.addFavoris(destinataire, function (err, favoris_added) {
if (!err) {
var fav = {
id: favoris_added[0].id,
email: favoris_added[0].email,
pseudo: favoris_added[0].pseudo
};
socket.emit('newfavoris', fav);
}
});
}
} else {
//
}
})
}*/
bdd_tchat.query('select * FROM user_favoris WHERE user_id=? AND favoris_id=?', [user.id, destinataire.id], function (err, rows) {
if(!err){
if(rows.length ==0){
// insert the new
let ob = {'user_id':user.id,'favoris_id':destinataire};
bdd_tchat.query('insert into user_favoris SET ?',ob, function (err, rows){
if(!err){
socket.emit('newfavoris',{
'id': destinataire.id,
'email': destinataire.email,
'pseudo': destinataire.pseudo
})
}
});
}
}
});
} else {
// erreur dans l'ajout du destinaire
}
});
} else {
badusers.push(email_destinaire);
}
}
if (badusers.length == 0) {
callback(null, 200)
} else {
if (badusers.length == emails.length) {
try {
let result = message.remove.sync(null);
console.log("Message droped");
callback('badmails', badusers);
} catch (e) {
//console.log(err);
}
} else {
callback('badmails', badusers)
}
}
} else {
// impossible dajouter le sender
}
} catch (e) {
// probleme dans l'ajout du sender
}
} else {
// impossible de create le message
}
} catch (e) {
// problem dans la creation du message
}
})
} else {
// bad token
}
} else {
console.error(e); // something went wrong
// console.log('erreur user nulll');
}
} else {
//console.log('erreur impossible de recup le user');
console.error(e); // something went wrong
}
});
}
});