Implement image upload functionality with temporary storage and cleanup. Update chat and broadcast logic to handle image URLs instead of base64 data, enhancing performance and user experience. Modify .gitignore to exclude temporary files and uploads directory.
This commit is contained in:
@@ -249,17 +249,23 @@ export function setupBroadcast(io) {
|
||||
socket.emit('connected', connectedData);
|
||||
|
||||
socket.on('disconnect', (reason) => {
|
||||
console.log(`[Disconnect] Socket getrennt für Session-ID: ${sessionId}, Grund: ${reason}`);
|
||||
const client = clients.get(sessionId);
|
||||
if (client) {
|
||||
console.log(`[Disconnect] Client gefunden: ${client.userName || 'unbekannt'}, Socket war verbunden: ${client.socket ? client.socket.connected : 'null'}`);
|
||||
|
||||
// Setze Socket auf null, damit keine Nachrichten mehr an diesen Client gesendet werden
|
||||
// ABER: Lösche den Client NICHT, damit die Session beim Reload wiederhergestellt werden kann
|
||||
client.socket = null;
|
||||
|
||||
// Aktualisiere Benutzerliste, damit andere Clients sehen, dass dieser Benutzer offline ist
|
||||
if (client.userName) {
|
||||
console.log(`[Disconnect] Aktualisiere Benutzerliste nach Disconnect von ${client.userName}`);
|
||||
broadcastUserList();
|
||||
}
|
||||
// Client bleibt in der Map, damit Session-Wiederherstellung funktioniert
|
||||
} else {
|
||||
console.log(`[Disconnect] Kein Client gefunden für Session-ID: ${sessionId}`);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -569,7 +575,7 @@ export function setupBroadcast(io) {
|
||||
return;
|
||||
}
|
||||
|
||||
const { toUserName, message, messageId, isImage, imageType } = data;
|
||||
const { toUserName, message, messageId, isImage, imageType, imageUrl } = data;
|
||||
|
||||
if (!toUserName) {
|
||||
socket.emit('error', { message: 'Empfänger fehlt' });
|
||||
@@ -615,36 +621,63 @@ export function setupBroadcast(io) {
|
||||
conversation.push({
|
||||
from: client.userName,
|
||||
to: toUserName,
|
||||
message,
|
||||
message: isImage && imageUrl ? imageUrl : message, // Verwende URL für Bilder
|
||||
messageId,
|
||||
timestamp: new Date().toISOString(),
|
||||
read: false,
|
||||
isImage: isImage || false,
|
||||
imageType: imageType || null
|
||||
imageType: imageType || null,
|
||||
imageUrl: imageUrl || null,
|
||||
imageCode: isImage ? message : null
|
||||
});
|
||||
|
||||
// Sende an Empfänger (wenn online)
|
||||
const messagePayload = {
|
||||
from: client.userName,
|
||||
message,
|
||||
message: isImage && imageUrl ? imageUrl : message, // Verwende URL für Bilder
|
||||
messageId,
|
||||
timestamp: new Date().toISOString(),
|
||||
isImage: isImage || false,
|
||||
imageType: imageType || null
|
||||
imageType: imageType || null,
|
||||
imageUrl: imageUrl || null,
|
||||
imageCode: isImage ? message : null // Code für Server-Referenz
|
||||
};
|
||||
|
||||
// Debug-Logging für Bilder
|
||||
if (isImage) {
|
||||
console.log(`[Bild] Sende Bild von ${client.userName} an ${toUserName}, Größe: ${message ? message.length : 0} Zeichen, Typ: ${imageType || 'unbekannt'}`);
|
||||
console.log(`[Bild] Absender Socket verbunden: ${socket.connected}, Empfänger Socket verbunden: ${receiver.socket ? receiver.socket.connected : 'null'}`);
|
||||
}
|
||||
|
||||
receiver.socket.emit('message', messagePayload);
|
||||
// Prüfe, ob Absender noch verbunden ist
|
||||
if (!socket.connected) {
|
||||
console.error(`[Bild] Absender ${client.userName} Socket nicht mehr verbunden beim Senden!`);
|
||||
return;
|
||||
}
|
||||
|
||||
// Bestätigung an Absender
|
||||
socket.emit('messageSent', {
|
||||
messageId,
|
||||
to: toUserName
|
||||
});
|
||||
// Prüfe, ob Empfänger-Socket noch existiert und verbunden ist
|
||||
if (!receiver.socket || !receiver.socket.connected) {
|
||||
console.error(`[Bild] Empfänger ${toUserName} Socket nicht mehr verbunden beim Senden!`);
|
||||
socket.emit('error', { message: 'Empfänger ist nicht mehr online' });
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
receiver.socket.emit('message', messagePayload);
|
||||
|
||||
// Bestätigung an Absender (nur wenn noch verbunden)
|
||||
if (socket.connected) {
|
||||
socket.emit('messageSent', {
|
||||
messageId,
|
||||
to: toUserName
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`[Bild] Fehler beim Senden der Nachricht:`, error);
|
||||
if (socket.connected) {
|
||||
socket.emit('error', { message: 'Fehler beim Senden der Nachricht' });
|
||||
}
|
||||
}
|
||||
|
||||
// Aktualisiere ungelesene Nachrichten für den Empfänger
|
||||
updateUnreadCount(receiver);
|
||||
|
||||
Reference in New Issue
Block a user