88 lines
2.1 KiB
JavaScript
88 lines
2.1 KiB
JavaScript
/* ============================================================
|
|
sockets/chat.js
|
|
Alle Socket-Events rund um Chat, Whisper & Online-Status
|
|
============================================================ */
|
|
|
|
const db = require("../database/database");
|
|
|
|
const onlineUsers = {}; // ingameName → socketId (wird für Whisper benötigt)
|
|
|
|
function registerChatHandlers(io, socket) {
|
|
|
|
/* ── Registrierung ── */
|
|
socket.on("register", async (username) => {
|
|
const [rows] = await db.query(
|
|
"SELECT ingame_name FROM accounts WHERE username = ?",
|
|
[username],
|
|
);
|
|
|
|
if (!rows.length) return;
|
|
|
|
const ingameName = rows[0].ingame_name;
|
|
socket.user = ingameName;
|
|
onlineUsers[ingameName] = socket.id;
|
|
});
|
|
|
|
/* ── Chat-Nachrichten ── */
|
|
socket.on("chatMessage", (data) => {
|
|
if (data.channel === "global") {
|
|
io.emit("chatMessage", {
|
|
user: socket.user,
|
|
message: data.message,
|
|
channel: "global",
|
|
});
|
|
}
|
|
|
|
if (data.channel === "guild") {
|
|
io.to("guild_" + data.guild).emit("chatMessage", {
|
|
user: socket.user,
|
|
message: data.message,
|
|
channel: "guild",
|
|
});
|
|
}
|
|
});
|
|
|
|
/* ── Flüstern ── */
|
|
socket.on("whisper", (data) => {
|
|
const targetSocket = onlineUsers[data.to];
|
|
|
|
if (!targetSocket) {
|
|
socket.emit("systemMessage", { message: data.to + " ist offline" });
|
|
return;
|
|
}
|
|
|
|
io.to(targetSocket).emit("chatMessage", {
|
|
user: socket.user,
|
|
message: data.message,
|
|
channel: "private",
|
|
});
|
|
|
|
socket.emit("chatMessage", {
|
|
user: "(an " + data.to + ")",
|
|
message: data.message,
|
|
channel: "private",
|
|
});
|
|
});
|
|
|
|
/* ── Private Nachricht ── */
|
|
socket.on("privateMessage", (data) => {
|
|
const target = onlineUsers[data.to];
|
|
if (target) {
|
|
io.to(target).emit("chatMessage", {
|
|
user: socket.user,
|
|
message: data.message,
|
|
channel: "private",
|
|
});
|
|
}
|
|
});
|
|
|
|
/* ── Disconnect ── */
|
|
socket.on("disconnect", () => {
|
|
if (socket.user) {
|
|
delete onlineUsers[socket.user];
|
|
}
|
|
});
|
|
}
|
|
|
|
module.exports = { registerChatHandlers };
|