This commit is contained in:
Askar Akhmetkhanov
2024-09-28 00:12:00 +03:00
parent 2a881f3920
commit 3fb107fd8b
10 changed files with 864 additions and 125 deletions

View File

@@ -0,0 +1,43 @@
const WebSocket = require("ws");
const wss = new WebSocket.Server({ port: 8080 });
const clients = new Map();
wss.on("connection", (ws, req) => {
console.log("New client connected");
ws.on("message", (message) => {
try {
const parsedMessage = JSON.parse(message);
if (parsedMessage.type === "register") {
clients.set(parsedMessage.userId, ws);
console.log(`User registered: ${parsedMessage.userId}`);
} else if (parsedMessage.type === "message") {
const recipientWs = clients.get(parsedMessage.recipientId);
if (recipientWs) {
recipientWs.send(
JSON.stringify({
senderId: parsedMessage.senderId,
message: parsedMessage.message,
timestamp: new Date().toISOString(),
})
);
} else {
console.error(`User ${parsedMessage.recipientId} is not connected.`);
}
}
} catch (err) {
console.error("Error processing message:", err.message);
}
});
ws.on("close", () => {
console.log("Client disconnected");
[...clients.entries()].forEach(([userId, clientWs]) => {
if (clientWs === ws) {
clients.delete(userId);
console.log(`User disconnected: ${userId}`);
}
});
});
});

View File

@@ -1,8 +1,8 @@
export default class Interlocutor {
constructor(id, name) {
this.name = name
this.id = id
}
static name;
static id;
}
constructor(id, name) {
this.name = name;
this.id = id;
}
static name;
static id;
}

View File

@@ -1,3 +1,7 @@
export default class User {
}
constructor(id, name) {
this.id = id;
this.name = name;
this.status = "online";
}
}