Merhaba arkadaşlar bir chat uygulaması yapıyorum bireysel ve grup sohbetler mevcut.
" /send-message " 'e PHP ile jwt token ile mesajı post ediyorum ve io.to(chatId).emit('newMessage', messageData); buraya ekliyorum. ancak frontend'te yeni mesajları dinlemeye çalışıyorum ama hiçbir yanıt alamıyorum.
socket.emit('listen', jwtDetail);
socket.on('newMessage', (messageData) => {
try {
console.log('Yeni mesaj alındı:', messageData);
} catch (error) {
console.log('Mesaj alma hatası:', error.message);
}
}); const express = require('express');
const http = require('http');
const { Server } = require('socket.io');
const jwt = require('jsonwebtoken');
// Uygulama ayarları
const app = express();
const server = http.createServer(app);
const io = new Server(server);
const JWT_SECRET = 'jwtKodum';
// Mesajların saklanacağı bellek
const chats = {}; // { chatId: [ { senderId, message, createdAt, ... } ] }
// Statik dosyalar için klasör
app.use(express.static('public'));
// Body parsing middleware
app.use(express.json()); // JSON verisini almak için
// Socket.IO bağlantı işlemleri
io.on('connection', (socket) => {
console.log('Bir kullanıcı bağlandı:', socket.id);
// listen(jwt) eventi dinlenir
socket.on('listen', (jwtToken) => {
try {
// JWT doğrula ve çöz
const decoded = jwt.verify(jwtToken, JWT_SECRET);
const chatId = decoded.chat_id;
// Odaya katıl
socket.join(chatId);
console.log(`Kullanıcı ${socket.id}, ${chatId} odasına katıldı.`);
// Daha önce gelen mesajları gönder
if (chats[chatId]) {
socket.emit('messages', chats[chatId]);
}
} catch (error) {
console.error('JWT doğrulama hatası:', error.message);
socket.emit('error', 'Geçersiz token.');
}
});
// message gönderme eventi dinlenir
socket.on('sendMessage', (messageJwt, callback) => {
try {
// Mesaj JWT doğrula ve çöz
const decoded = jwt.verify(messageJwt, JWT_SECRET);
const { chatId, senderId, message, createdAt, filesHave, files } = decoded.data;
// Mesajı chat[chatId] dizisine ekle
if (!chats[chatId]) {
chats[chatId] = [];
}
const messageData = { senderId, message, createdAt, filesHave, files };
chats[chatId].push(messageData);
console.log(`Mesaj ${chatId} odasına eklendi:`, messageData);
// Mesajı odaya yayınla
io.to(chatId).emit('newMessage', messageData);
// Başarıyla tamamlandığında callback'i çağır
callback({ status: 'success' });
} catch (error) {
console.error('JWT doğrulama hatası:', error.message);
// Hata durumunda callback ile yanıt gönder
callback({ status: 'error', error: 'Geçersiz mesaj token.' });
}
});
// Kullanıcı bağlantıyı kapattığında
socket.on('disconnect', () => {
console.log('Bir kullanıcı ayrıldı:', socket.id);
});
});
// POST endpoint oluşturulması
app.post('/send-message', (req, res) => {
const { messageJwt } = req.body; // Gelen veri sadece messageJwt
try {
const decoded = jwt.verify(messageJwt, JWT_SECRET);
const { chatId, senderId, message, createdAt, filesHave, files } = decoded.data;
// Mesajı chat[chatId] dizisine ekle
if (!chats[chatId]) {
chats[chatId] = [];
}
const messageData = { senderId, message, createdAt, filesHave, files };
chats[chatId].push(messageData);
console.log(`Mesaj ${chatId} odasına eklendi:`, messageData);
// Mesajı odaya Socket.IO üzerinden gönder
io.to(chatId).emit('newMessage', messageData);
// Başarıyla tamamlanır
res.status(200).json({ status: 'success', message: 'Mesaj başarıyla gönderildi.' , data : messageData });
} catch (error) {
console.error('JWT doğrulama hatası:', error.message);
res.status(400).json({ status: 'error', message: 'Geçersiz token.' });
}
});
// Sunucuyu başlat
const PORT = 3000;
server.listen(PORT, () => {
console.log(`Sunucus ${PORT} portunda çalışıyor.`);
});