Добавлены закреплённые сообщения, сохранение истории и авто-переподключение
- Закрепление/открепление сообщений (сервер + клиент) - Сохранение истории сообщений в localStorage (до 50) - Сохранение логина/пароля в localStorage и авто-вход - Авто-переподключение при разрыве соединения WebSocket
This commit is contained in:
+20
-1
@@ -6,6 +6,8 @@ const { createJsonSender, createClientHandlers, validateFile, broadcast } = requ
|
||||
const server = new WebSocketServer({ port: config.port });
|
||||
console.log(`WebSocket server running on ws://0.0.0.0:${config.port}`);
|
||||
|
||||
let pinnedMessage = null;
|
||||
|
||||
server.on('connection', (ws, req) => {
|
||||
const clientIp = req.socket.remoteAddress;
|
||||
console.log(`Connection from ${clientIp}`);
|
||||
@@ -17,11 +19,28 @@ server.on('connection', (ws, req) => {
|
||||
case 'auth': {
|
||||
const user = authenticate(parsed.login, parsed.password);
|
||||
if (user) {
|
||||
return client.handleAuth(user.login);
|
||||
const sysMsg = client.handleAuth(user.login);
|
||||
if (pinnedMessage) {
|
||||
send({ type: 'pinned', message: pinnedMessage.message, pinnedBy: pinnedMessage.from });
|
||||
}
|
||||
return sysMsg;
|
||||
}
|
||||
client.handleAuthFail('Invalid login or password');
|
||||
return null;
|
||||
}
|
||||
case 'pin': {
|
||||
pinnedMessage = {
|
||||
type: 'pinned', from: client.getLogin(), timestamp: Date.now(),
|
||||
message: parsed.message,
|
||||
};
|
||||
console.log(`${client.getLogin()} pinned a message`);
|
||||
return pinnedMessage;
|
||||
}
|
||||
case 'unpin': {
|
||||
pinnedMessage = null;
|
||||
console.log(`${client.getLogin()} unpinned the message`);
|
||||
return { type: 'unpinned', from: client.getLogin(), timestamp: Date.now() };
|
||||
}
|
||||
case 'text': {
|
||||
if (!parsed.text || typeof parsed.text !== 'string') {
|
||||
send({ type: 'error', message: 'Invalid text message' });
|
||||
|
||||
Reference in New Issue
Block a user