u
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
node_modules/
|
node_modules/
|
||||||
|
counter.db
|
||||||
1237
package-lock.json
generated
1237
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -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": {
|
||||||
@@ -26,4 +27,4 @@
|
|||||||
"webpack-cli": "^5.1.4",
|
"webpack-cli": "^5.1.4",
|
||||||
"webpack-dev-server": "^4.15.1"
|
"webpack-dev-server": "^4.15.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
59
server.js
59
server.js
@@ -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,13 +55,23 @@ 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;
|
||||||
res.json({ value: counter });
|
|
||||||
|
|
||||||
// Broadcast update to all connected WebSocket clients
|
// Update counter value in database
|
||||||
wss.clients.forEach(client => {
|
db.run(`UPDATE counter SET value = ? WHERE id = 1`, [counter], (err) => {
|
||||||
if (client.readyState === WebSocket.OPEN) {
|
if (err) {
|
||||||
client.send(JSON.stringify({ type: 'counter-update', value: counter }));
|
console.error('Error updating counter in database:', err.message);
|
||||||
|
res.status(500).json({ error: 'Failed to update counter' });
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res.json({ value: counter });
|
||||||
|
|
||||||
|
// Broadcast update to all connected WebSocket clients
|
||||||
|
wss.clients.forEach(client => {
|
||||||
|
if (client.readyState === WebSocket.OPEN) {
|
||||||
|
client.send(JSON.stringify({ type: 'counter-update', value: counter }));
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user