änderung chat
This commit is contained in:
parent
af54451bdb
commit
bc2fbdefcc
42
app.js
42
app.js
@ -32,7 +32,15 @@ const io = new Server(server);
|
|||||||
|
|
||||||
app.use(
|
app.use(
|
||||||
helmet({
|
helmet({
|
||||||
contentSecurityPolicy: false,
|
contentSecurityPolicy: {
|
||||||
|
directives: {
|
||||||
|
defaultSrc: ["'self'"],
|
||||||
|
scriptSrc: ["'self'", "'unsafe-inline'"],
|
||||||
|
styleSrc: ["'self'", "'unsafe-inline'"],
|
||||||
|
imgSrc: ["'self'", "data:"],
|
||||||
|
connectSrc: ["'self'", "ws:", "wss:"],
|
||||||
|
},
|
||||||
|
},
|
||||||
}),
|
}),
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -125,6 +133,14 @@ io.on("connection", (socket) => {
|
|||||||
socket.on("register", (username) => {
|
socket.on("register", (username) => {
|
||||||
socket.user = username;
|
socket.user = username;
|
||||||
onlineUsers[username] = socket.id;
|
onlineUsers[username] = socket.id;
|
||||||
|
io.emit("onlineUsers", Object.keys(onlineUsers));
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on("disconnect", () => {
|
||||||
|
if (socket.user) {
|
||||||
|
delete onlineUsers[socket.user];
|
||||||
|
io.emit("onlineUsers", Object.keys(onlineUsers));
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
socket.on("chatMessage", (data) => {
|
socket.on("chatMessage", (data) => {
|
||||||
@ -145,6 +161,30 @@ io.on("connection", (socket) => {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
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",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
socket.on("privateMessage", (data) => {
|
socket.on("privateMessage", (data) => {
|
||||||
const target = onlineUsers[data.to];
|
const target = onlineUsers[data.to];
|
||||||
|
|
||||||
|
|||||||
@ -196,3 +196,44 @@
|
|||||||
.private-chat {
|
.private-chat {
|
||||||
color: #7ec8ff;
|
color: #7ec8ff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#online-users {
|
||||||
|
position: fixed;
|
||||||
|
|
||||||
|
left: 20px;
|
||||||
|
bottom: 340px;
|
||||||
|
|
||||||
|
width: 350px;
|
||||||
|
|
||||||
|
max-height: 200px;
|
||||||
|
|
||||||
|
background: linear-gradient(#2b2115, #1a140d);
|
||||||
|
|
||||||
|
border: 3px solid #8b6a3c;
|
||||||
|
|
||||||
|
color: #f3e6c5;
|
||||||
|
|
||||||
|
font-family: serif;
|
||||||
|
|
||||||
|
overflow-y: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.online-header {
|
||||||
|
background: #3a2a17;
|
||||||
|
|
||||||
|
padding: 5px;
|
||||||
|
|
||||||
|
text-align: center;
|
||||||
|
|
||||||
|
border-bottom: 2px solid #8b6a3c;
|
||||||
|
}
|
||||||
|
|
||||||
|
#online-list div {
|
||||||
|
padding: 4px;
|
||||||
|
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
#online-list div:hover {
|
||||||
|
background: #5b4325;
|
||||||
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
const socket = io();
|
const socket = io();
|
||||||
|
socket.emit("register", window.playerName);
|
||||||
|
|
||||||
let channel = "global";
|
let channel = "global";
|
||||||
|
|
||||||
@ -40,10 +41,23 @@ document.getElementById("chat-send").onclick = () => {
|
|||||||
|
|
||||||
if (!text) return;
|
if (!text) return;
|
||||||
|
|
||||||
socket.emit("chatMessage", {
|
if (text.startsWith("/w ")) {
|
||||||
channel: channel,
|
const parts = text.split(" ");
|
||||||
message: text,
|
|
||||||
});
|
const target = parts[1];
|
||||||
|
|
||||||
|
const message = parts.slice(2).join(" ");
|
||||||
|
|
||||||
|
socket.emit("whisper", {
|
||||||
|
to: target,
|
||||||
|
message: message,
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
socket.emit("chatMessage", {
|
||||||
|
channel: channel,
|
||||||
|
message: text,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
document.getElementById("chat-text").value = "";
|
document.getElementById("chat-text").value = "";
|
||||||
};
|
};
|
||||||
@ -57,3 +71,31 @@ socket.on("chatMessage", (data) => {
|
|||||||
|
|
||||||
if (data.channel === channel) updateChat();
|
if (data.channel === channel) updateChat();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
socket.on("systemMessage", (data) => {
|
||||||
|
const line = "[System] " + data.message;
|
||||||
|
|
||||||
|
history[channel].push(line);
|
||||||
|
|
||||||
|
updateChat();
|
||||||
|
});
|
||||||
|
|
||||||
|
socket.on("onlineUsers", (users) => {
|
||||||
|
const list = document.getElementById("online-list");
|
||||||
|
|
||||||
|
list.innerHTML = "";
|
||||||
|
|
||||||
|
users.forEach((user) => {
|
||||||
|
const div = document.createElement("div");
|
||||||
|
|
||||||
|
div.innerText = user;
|
||||||
|
|
||||||
|
div.onclick = () => {
|
||||||
|
document.getElementById("chat-text").value = "/w " + user + " ";
|
||||||
|
|
||||||
|
document.getElementById("chat-text").focus();
|
||||||
|
};
|
||||||
|
|
||||||
|
list.appendChild(div);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|||||||
@ -179,6 +179,12 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="online-users">
|
||||||
|
<div class="online-header">Spieler Online</div>
|
||||||
|
|
||||||
|
<div id="online-list"></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div id="game-chat">
|
<div id="game-chat">
|
||||||
<div class="chat-header" id="chat-title">Globalchat</div>
|
<div class="chat-header" id="chat-title">Globalchat</div>
|
||||||
|
|
||||||
@ -198,6 +204,12 @@
|
|||||||
|
|
||||||
<script src="/js/map-ui.js"></script>
|
<script src="/js/map-ui.js"></script>
|
||||||
<script src="/socket.io/socket.io.js"></script>
|
<script src="/socket.io/socket.io.js"></script>
|
||||||
|
<script>
|
||||||
|
window.playerName = "<%= character.name %>";
|
||||||
|
</script>
|
||||||
<script src="/js/chat.js"></script>
|
<script src="/js/chat.js"></script>
|
||||||
|
<script>
|
||||||
|
const playerName = "<%= character.name %>" socket.emit("register", playerName)
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user