HseyinAkkaya socket.dispose() yaptığım zaman tekrar bir mesajlaşma sayfasına girdiğim zaman _socket.on(
'message',
(data) => Provider.of<HomeProvider>(context, listen: false)
.addNewMessage(Message.fromJson(data)));
}
bu kısım çalışmıyor yani node js tarafına veri gitmiyor onu çözemedim. Onun haricinde socket.dispose yapmadığım zaman da o hatayı alıyorum. Query tarafında şöyle bir yol izledim ancak yine de tüm data geliyor belki queryi yanlış yazmış olabilirim.
`socket.on('message', (data) => {
db.query("select * from rooms WHERE(sender_id = ? OR sender_id = ?) AND ( receiver_id = ? OR receiver_id = ?)",
[senderId, receiverId, senderId, receiverId],
(err, result) => {
if (result[0] != null) {
// query doğru ve boş değilse mesajlar uygulamaya push edilecek
} else {
// ilk defa mesaj gönderiliyorsa sender ve receiver arasında bağlantı kurulacak
sentAt = Date.now()
db.query(
"INSERT INTO rooms (sender_id,receiver_id,token) VALUES (?,?,?)",
[senderId, receiverId, senderId+receiverId+sentAt],
(err, result) => {
if (err) {
console.log(err)
} else {
// bağlantı kurulduktan sonra mesajlar uygulamaya push edilecek
sendMessage(data.message, senderId, receiverId, senderId+receiverId+sentAt)
}
}
);
}
});
})`
Aslında getMessage fonksiyonum doğru çalışıyor yani bir mesaja tıklandığında o kişi ile olan mesaj kayıtları geliyor sadece ama o an bir yazı yazıp mesaj gönderdiği zaman başka bir kullanıcının gözünden o mesajı görebiliyorum.
`function sendMessage(msg, senderId, receiverId, token) {
db.query(
"INSERT INTO messages (message,sender_id,receiver_id,token) VALUES (?,?,?,?)",
[msg, senderId, receiverId, token],
(err, result) => {
if (err) {
console.log(err)
} else {
const message = {
message: msg,
senderId: senderId,
receiverId: receiverId,
sentAt: Date.now()
}
console.log(message)
messages.push(message)
io.emit('message', message)
}
}
);
}`
Bu arada flutter tarafında dediğiniz gibi query methoduyla sender ve receiver id leri gönderiyorum node tarafında da buna göre sorgulama yapıyorum eğer koşullar doğru ise mesajları push ediyorum ama galiba uygulama tarafında da ekstra bir filtreme yapmam gerekiyor veya uygulama tarafında filtreleme yapmak doğru bir yaklaşım mı yani tüm datayı uygulamaya gönderip filtrelemek güvenlik açığı yaratabilir mi bilemedim
`IO.OptionBuilder().setTransports(['websocket']).setQuery({
'senderId': widget.senderId,
'receiverId': widget.receiverId
}).build(),`