const WebSocket = require('ws');
const cbor = require('cbor');
const wss = new WebSocket.Server({ port: 9001 });
wss.on('connection', (ws) => {
console.log('Client connected');
ws.on('ping', () => {
console.log('Ping received, sending pong');
ws.pong();
});
ws.on('message', (message) => {
console.log(`Received raw message: ${message}`);
try {
const jsonMessage = JSON.parse(message);
console.log('Parsed JSON:', jsonMessage);
if (jsonMessage.type === 'greeting') {
ws.send(
JSON.stringify({
type: 'response',
format: 'JSON',
content: 'Hello from server (JSON)!',
})
);
return;
}
} catch (e) {
console.debug('Message is not JSON; trying CBOR.');
}
try {
const cborMessage = cbor.decodeFirstSync(message);
console.log('Parsed CBOR:', cborMessage);
if (cborMessage.type === 'greeting') {
const response = cbor.encode({
type: 'response',
format: 'CBOR',
content: 'Hello from server (CBOR)!',
});
ws.send(response);
return;
}
} catch (e) {
console.debug('Message is not CBOR; trying JSON.');
}
ws.send(`Unsupported format: ${message}`);
});
const interval = setInterval(() => {
if (ws.readyState === WebSocket.OPEN) {
ws.send(
JSON.stringify({
type: 'server_message',
content: 'Periodic update from server',
})
);
}
}, 5000);
setTimeout(() => {
if (ws.readyState === WebSocket.OPEN) {
console.log('Simulating server disconnect');
ws.close(1000, 'Simulated disconnect');
}
}, 30000);
ws.on('close', () => {
console.log('Client disconnected');
clearInterval(interval);
});
ws.on('error', (error) => {
console.error(`WebSocket error: ${error}`);
});
});
console.log('WebSocket server running on ws://127.0.0.1:9001');