mirror of
https://github.com/fosrl/pangolin.git
synced 2025-07-09 21:44:51 +02:00
Adding ws
This commit is contained in:
parent
fadfaf1f0b
commit
5cb87f0bbd
2 changed files with 70 additions and 0 deletions
|
@ -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
68
server/routers/ws/ws.ts
Normal 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
|
||||||
|
};
|
Loading…
Add table
Add a link
Reference in a new issue