403Webshell
Server IP : 45.94.215.241  /  Your IP : 216.73.216.243
Web Server : Apache/2.4.66 (Ubuntu)
System : Linux srv2937474766 7.0.0-28-generic #28-Ubuntu SMP PREEMPT_DYNAMIC Sun Jun 21 01:01:36 UTC 2026 x86_64
User : www-data ( 33)
PHP Version : 8.5.4
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /var/www/html/chat/Chat3/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/chat/Chat3/server.js
const WebSocket = require('ws');
const Database = require('better-sqlite3');
const fs = require('fs');
const path = require('path');

// نام فایل دیتابیس
const DB_PATH = path.join(__dirname, 'chat.db');

// ایجاد اتصال به دیتابیس
const db = new Database(DB_PATH);
db.pragma('journal_mode = WAL'); // برای بهبود عملکرد

// --- ایجاد جداول (اگر وجود ندارند) ---
const initDb = () => {
    // جدول کاربران
    db.exec(`
        CREATE TABLE IF NOT EXISTS users (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            username TEXT UNIQUE NOT NULL,
            password TEXT NOT NULL,
            is_active INTEGER DEFAULT 0
        )
    `);

    // جدول پیام‌ها
    db.exec(`
        CREATE TABLE IF NOT EXISTS messages (
            id INTEGER PRIMARY KEY AUTOINCREMENT,
            sender_id INTEGER NOT NULL,
            body TEXT NOT NULL,
            created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
            FOREIGN KEY(sender_id) REFERENCES users(id)
        )
    `);
};
initDb();

// تنظیمات WebSocket
const wss = new WebSocket.Server({ port: 8080 });
const clients = new Map(); // نگهداری اتصالات: userId -> ws

console.log('سرور WebSocket روی پورت ۸۰۸۰ اجرا شد...');

wss.on('connection', (ws) => {
    let userId = null;

    ws.on('message', (message) => {
        try {
            const data = JSON.parse(message);

            // ۱. احراز هویت ساده
            if (data.type === 'auth') {
                userId = data.userId;
                clients.set(userId, ws);
                
                // وضعیت آنلاین شدن در دیتابیس
                db.prepare('UPDATE users SET is_active = 1 WHERE id = ?').run(userId);
                
                // ارسال پیام خوش‌آمدگویی
                ws.send(JSON.stringify({ type: 'info', msg: 'متصل شدید' }));
            }

            // ۲. دریافت و ارسال پیام
            else if (data.type === 'send_message') {
                if (!userId) return;

                const { body } = data;
                
                // ذخیره در دیتابیس
                const info = db.prepare('INSERT INTO messages (sender_id, body) VALUES (?, ?)').run(userId, body);
                
                const newMessage = {
                    id: info.lastInsertRowid,
                    sender_id: userId,
                    body: body,
                    is_me: false // برای گیرنده
                };

                // ارسال به همه کاربران آنلاین
                clients.forEach((clientWs, id) => {
                    if (clientWs.readyState === WebSocket.OPEN) {
                        // اگر پیام متعلق به خود کاربر است، پرچم is_me را true کن
                        const msgToSend = { ...newMessage, is_me: (id === userId) };
                        clientWs.send(JSON.stringify({ type: 'new_message', data: msgToSend }));
                    }
                });
            }

        } catch (err) {
            console.error('Error:', err);
        }
    });

    ws.on('close', () => {
        if (userId) {
            clients.delete(userId);
            db.prepare('UPDATE users SET is_active = 0 WHERE id = ?').run(userId);
            console.log(`User ${userId} disconnected`);
        }
    });
});

Youez - 2016 - github.com/yon3zu
LinuXploit