UNPKG

peerpigeon

Version:

WebRTC-based peer-to-peer mesh networking library with intelligent routing and signaling server

127 lines (103 loc) โ€ข 4.34 kB
#!/usr/bin/env node /** * Example demonstrating the new standard EventEmitter methods * Shows both traditional and Node.js-style event handling */ import { PeerPigeonMesh } from '../index.js'; console.log('๐Ÿฆ PeerPigeon Standard Event Methods Demo\n'); // Create mesh instance const mesh = new PeerPigeonMesh({ peerId: `demo-${Date.now()}`, maxPeers: 3, enableWebDHT: true, enableCrypto: true }); // Traditional style event handling console.log('๐Ÿ“ Setting up traditional event listeners...'); mesh.addEventListener('connected', () => { console.log('๐Ÿ”— [Traditional] Connected to signaling server'); }); // Standard Node.js style with method chaining console.log('โ›“๏ธ Setting up standard event listeners with chaining...'); mesh .on('statusChanged', (data) => { console.log(`๐Ÿ“Š [Standard] Status: ${data.type}${data.message ? ' - ' + data.message : ''}`); }) .on('peerConnected', (data) => { console.log(`๐Ÿ‘‹ [Standard] Peer connected: ${data.peerId.substring(0, 8)}...`); console.log(`๐Ÿ“ˆ Total connected peers: ${mesh.getConnectedPeers().length}`); }) .on('peerDisconnected', (data) => { console.log(`๐Ÿ’” [Standard] Peer disconnected: ${data.peerId.substring(0, 8)}... (${data.reason})`); }) .on('messageReceived', (data) => { console.log(`๐Ÿ’ฌ [Standard] Message from ${data.from.substring(0, 8)}...: "${data.content}"`); }); // One-time listeners console.log('๐ŸŽฏ Setting up one-time listeners...'); mesh.once('initialized', () => { console.log('๐ŸŽ‰ [Once] Mesh initialized - this will only be logged once!'); }); // Demonstrate listener management console.log('๐Ÿงฎ Demonstrating listener management...'); const temporaryHandler = (data) => { console.log(`โฐ [Temporary] Status update: ${data.type}`); }; // Add and immediately remove a temporary listener mesh.on('statusChanged', temporaryHandler); console.log(`๐Ÿ“Š Status listeners before removal: ${mesh.listenerCount('statusChanged')}`); mesh.off('statusChanged', temporaryHandler); console.log(`๐Ÿ“Š Status listeners after removal: ${mesh.listenerCount('statusChanged')}`); // Show all active event names console.log(`๐Ÿท๏ธ Active event types: ${mesh.eventNames().join(', ')}\n`); // Initialize mesh console.log('๐Ÿš€ Initializing mesh...'); try { await mesh.init(); console.log('โœ… Mesh initialization complete'); // Try to connect to a signaling server console.log('๐Ÿ”Œ Attempting to connect to signaling server...'); try { await mesh.connect('ws://localhost:3000'); console.log('โœ… Connected to signaling server'); // Send a test message after a short delay setTimeout(() => { console.log('๐Ÿ“ค Sending test broadcast message...'); mesh.sendMessage('Hello from the standard events demo!'); }, 2000); // Demonstrate cleanup after 10 seconds setTimeout(() => { console.log('\n๐Ÿงน Demonstrating cleanup...'); console.log(`๐Ÿ“Š Events with listeners before cleanup: ${mesh.eventNames()}`); // Remove all listeners for messageReceived mesh.removeAllListeners('messageReceived'); console.log('๐Ÿ—‘๏ธ Removed all messageReceived listeners'); console.log(`๐Ÿ“Š Events with listeners after cleanup: ${mesh.eventNames()}`); console.log('๐Ÿ‘‹ Demo complete - disconnecting...'); mesh.disconnect(); process.exit(0); }, 10000); } catch (connectError) { console.log('โš ๏ธ Could not connect to signaling server (this is expected if no server is running)'); console.log('๐Ÿ’ก To test with a real connection, start a server with: node cli.js server'); // Still demonstrate the events work setTimeout(() => { console.log('\n๐Ÿงน Demonstrating cleanup without connection...'); console.log(`๐Ÿ“Š Active events: ${mesh.eventNames()}`); mesh.removeAllListeners(); console.log('๐Ÿ—‘๏ธ Removed all listeners'); console.log('๐Ÿ‘‹ Demo complete'); process.exit(0); }, 3000); } } catch (error) { console.error('โŒ Error during mesh initialization:', error.message); process.exit(1); } // Handle graceful shutdown process.on('SIGINT', () => { console.log('\n๐Ÿ›‘ Received interrupt signal, cleaning up...'); mesh.removeAllListeners(); mesh.disconnect(); process.exit(0); });