This commit is contained in:
sebseb7
2025-09-02 09:13:01 +00:00
parent b106a7db39
commit cda2829175
4 changed files with 1271 additions and 33 deletions

1
.gitignore vendored
View File

@@ -1 +1,2 @@
node_modules/ node_modules/
counter.db

1237
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -5,7 +5,7 @@
"main": "server.js", "main": "server.js",
"scripts": { "scripts": {
"start": "concurrently \"npm run server\" \"npm run dev\"", "start": "concurrently \"npm run server\" \"npm run dev\"",
"dev": "webpack serve --mode development --open", "dev": "webpack serve --mode development",
"build": "webpack --mode production", "build": "webpack --mode production",
"server": "node server.js" "server": "node server.js"
}, },
@@ -13,6 +13,7 @@
"express": "^4.18.2", "express": "^4.18.2",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"sqlite3": "^5.1.7",
"ws": "^8.14.2" "ws": "^8.14.2"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -1,12 +1,49 @@
const express = require('express'); const express = require('express');
const WebSocket = require('ws'); const WebSocket = require('ws');
const http = require('http'); const http = require('http');
const sqlite3 = require('sqlite3').verbose();
const app = express(); const app = express();
const server = http.createServer(app); const server = http.createServer(app);
const wss = new WebSocket.Server({ server, path: '/counter-ws' }); const wss = new WebSocket.Server({ server, path: '/counter-ws' });
let counter = 0; // In-memory counter (resets on server restart) // Initialize SQLite database
const db = new sqlite3.Database('./counter.db', (err) => {
if (err) {
console.error('Error opening database:', err.message);
} else {
console.log('Connected to SQLite database.');
// Create counter table if it doesn't exist
db.run(`CREATE TABLE IF NOT EXISTS counter (
id INTEGER PRIMARY KEY CHECK (id = 1),
value INTEGER DEFAULT 0
)`, (err) => {
if (err) {
console.error('Error creating table:', err.message);
} else {
// Initialize counter value if not exists
db.run(`INSERT OR IGNORE INTO counter (id, value) VALUES (1, 0)`, () => {
// Load initial counter value
loadCounterValue();
});
}
});
}
});
let counter = 0; // Will be loaded from database
// Function to load counter value from database
function loadCounterValue() {
db.get(`SELECT value FROM counter WHERE id = 1`, (err, row) => {
if (err) {
console.error('Error loading counter value:', err.message);
} else if (row) {
counter = row.value;
console.log('Loaded counter value:', counter);
}
});
}
app.use(express.json()); app.use(express.json());
@@ -18,6 +55,15 @@ app.get('/api/counter', (req, res) => {
// API endpoint to increment counter // API endpoint to increment counter
app.post('/api/counter/increment', (req, res) => { app.post('/api/counter/increment', (req, res) => {
counter += 1; counter += 1;
// Update counter value in database
db.run(`UPDATE counter SET value = ? WHERE id = 1`, [counter], (err) => {
if (err) {
console.error('Error updating counter in database:', err.message);
res.status(500).json({ error: 'Failed to update counter' });
return;
}
res.json({ value: counter }); res.json({ value: counter });
// Broadcast update to all connected WebSocket clients // Broadcast update to all connected WebSocket clients
@@ -26,6 +72,7 @@ app.post('/api/counter/increment', (req, res) => {
client.send(JSON.stringify({ type: 'counter-update', value: counter })); client.send(JSON.stringify({ type: 'counter-update', value: counter }));
} }
}); });
});
}); });
// WebSocket connection handling // WebSocket connection handling