1
+ // https://github.com/libp2p/js-libp2p/blob/main/doc/GETTING_STARTED.md
2
+ import { createLibp2p } from 'libp2p'
3
+ //import { webSockets } from '@libp2p/websockets'
4
+ import { noise } from '@chainsafe/libp2p-noise'
5
+ import { yamux } from '@chainsafe/libp2p-yamux'
6
+ import { mdns } from '@libp2p/mdns' //Multicast DNS
7
+
8
+ import { tcp } from '@libp2p/tcp' //Multicast DNS
9
+
10
+ import { identify } from '@libp2p/identify' //necessario per far funzionare pubsub
11
+ import { floodsub } from '@libp2p/floodsub'
12
+
13
+ import { stdin } from 'node:process'
14
+
15
+ //env DEBUG="libp2p:tcp,libp2p:websockets,libp2p:webtransport,libp2p:kad-dht,libp2p:dialer"
16
+
17
+ const port = Number ( process . argv [ 2 ] ) || 8000 ;
18
+ const msg = process . argv [ 3 ] || '' ;
19
+
20
+ ( async ( ) => {
21
+
22
+ const libp2p = await createLibp2p ( {
23
+ start : false ,
24
+ addresses : {
25
+ listen : [ `/ip4/0.0.0.0/tcp/${ port } ` ]
26
+ } ,
27
+ transports : [
28
+ tcp ( )
29
+ ] ,
30
+ services : {
31
+ identify : identify ( ) ,
32
+ pubsub : floodsub ( )
33
+ } ,
34
+ connectionEncryption : [ noise ( ) ] ,
35
+ streamMuxers : [ yamux ( ) ] ,
36
+ peerDiscovery : [
37
+ mdns ( {
38
+ interval : 1000
39
+ } )
40
+ ]
41
+ } ) ;
42
+
43
+ libp2p . addEventListener ( 'peer:discovery' , e => {
44
+ console . log ( 'Discovered:' , e . detail . multiaddrs . toString ( ) )
45
+ } ) ;
46
+
47
+ libp2p . addEventListener ( 'peer:connect' , e => {
48
+ console . log ( 'Connected:' , e . detail )
49
+ } )
50
+
51
+ await libp2p . start ( )
52
+
53
+ const listenAddrs = libp2p . getMultiaddrs ( ) ;
54
+ console . log ( 'libp2p listen: ' , listenAddrs )
55
+
56
+ const topic = 'pubsub_topic' ;
57
+
58
+ console . log ( 'Subscribe:' , topic ) ;
59
+ libp2p . services . pubsub . subscribe ( topic ) ;
60
+
61
+
62
+ libp2p . services . pubsub . addEventListener ( 'message' , msg => {
63
+ console . log ( `Message:` , new TextDecoder ( ) . decode ( msg . detail . data ) )
64
+ } )
65
+
66
+ console . log ( 'Type a message to send it to all peers:' )
67
+ stdin . on ( 'data' , data => {
68
+
69
+ const msg = data . toString ( ) . trim ( )
70
+ , msgBin = Buffer . from ( `"${ msg } "` ) ;
71
+
72
+ libp2p . services . pubsub . publish ( topic , msgBin ) ;
73
+ } ) ;
74
+
75
+ process . on ( 'SIGINT' , async ( ) => {
76
+ console . log ( 'libp2p stopping...' ) ;
77
+ await libp2p . stop ( )
78
+ process . exit ( 0 ) ;
79
+ } ) ;
80
+
81
+ } ) ( ) ;
0 commit comments