Adding ws

This commit is contained in:
Owen Schwartz 2024-11-03 17:24:23 -05:00
parent fadfaf1f0b
commit 5cb87f0bbd
No known key found for this signature in database
GPG key ID: 8271FDFFD9E0CCBD
2 changed files with 70 additions and 0 deletions

View file

@ -65,6 +65,7 @@
"vaul": "1.1.1", "vaul": "1.1.1",
"winston": "3.14.2", "winston": "3.14.2",
"winston-daily-rotate-file": "5.0.0", "winston-daily-rotate-file": "5.0.0",
"ws": "8.18.0",
"zod": "3.23.8", "zod": "3.23.8",
"zod-validation-error": "3.4.0" "zod-validation-error": "3.4.0"
}, },
@ -84,6 +85,7 @@
"drizzle-kit": "0.24.2", "drizzle-kit": "0.24.2",
"esbuild": "0.20.1", "esbuild": "0.20.1",
"esbuild-node-externals": "1.13.0", "esbuild-node-externals": "1.13.0",
"@types/ws": "8.5.13",
"eslint": "^8", "eslint": "^8",
"eslint-config-next": "15.0.1", "eslint-config-next": "15.0.1",
"postcss": "^8", "postcss": "^8",

68
server/routers/ws/ws.ts Normal file
View file

@ -0,0 +1,68 @@
const express = require('express');
const router = express.Router();
const WebSocket = require('ws');
const wss = new WebSocket.Server({ noServer: true });
// Token verification middleware
const verifyToken = (token) => {
// This is where you'd implement your token verification logic
// For example, verify JWT, check against database, etc.
// Return true if token is valid, false otherwise
return true; // Placeholder return
};
// Handle WebSocket upgrade requests
router.get('/ws', (req, res) => {
// WebSocket upgrade will be handled by the server
res.status(200).send('WebSocket endpoint');
});
// Set up WebSocket server handling
const handleWSUpgrade = (server) => {
server.on('upgrade', (request, socket, head) => {
// Extract token from query parameters or headers
const token = request.url.includes('?')
? new URLSearchParams(request.url.split('?')[1]).get('token')
: request.headers['sec-websocket-protocol'];
// Verify the token
if (!token || !verifyToken(token)) {
socket.write('HTTP/1.1 401 Unauthorized\r\n\r\n');
socket.destroy();
return;
}
wss.handleUpgrade(request, socket, head, (ws) => {
wss.emit('connection', ws, request);
});
});
};
// WebSocket connection handler
wss.on('connection', (ws, request) => {
console.log('Client connected');
// Set up message handler
ws.on('message', (message) => {
console.log('Received:', message.toString());
// Echo the message back
ws.send(`Server received: ${message}`);
});
// Handle client disconnect
ws.on('close', () => {
console.log('Client disconnected');
});
// Handle errors
ws.on('error', (error) => {
console.error('WebSocket error:', error);
});
});
// Export both the router and the upgrade handler
module.exports = {
router,
handleWSUpgrade
};