4
4
"context"
5
5
"flag"
6
6
"fmt"
7
+ "io/ioutil"
8
+ "log"
7
9
"os"
8
10
"sync"
9
11
"time"
@@ -28,7 +30,7 @@ const DiscoveryInterval = time.Hour
28
30
// DiscoveryServiceTag is used in our mDNS advertisements to discover other chat peers.
29
31
const DiscoveryServiceTag = "universal-connectivity"
30
32
31
- var ChatMsgChan chan * ChatMessage
33
+ var SysMsgChan chan * ChatMessage
32
34
33
35
// Borrowed from https://medium.com/rahasak/libp2p-pubsub-peer-discovery-with-kademlia-dht-c8b131550ac7
34
36
// NewDHT attempts to connect to a bunch of bootstrap peers and returns a new DHT.
@@ -76,7 +78,7 @@ func Discover(ctx context.Context, h host.Host, dht *dht.IpfsDHT, rendezvous str
76
78
77
79
discovery .Advertise (ctx , routingDiscovery , rendezvous )
78
80
79
- ticker := time .NewTicker (time .Second * 1 )
81
+ ticker := time .NewTicker (time .Second * 10 )
80
82
defer ticker .Stop ()
81
83
82
84
for {
@@ -108,19 +110,45 @@ func Discover(ctx context.Context, h host.Host, dht *dht.IpfsDHT, rendezvous str
108
110
}
109
111
110
112
func LogMsgf (f string , msg ... any ) {
111
- ChatMsgChan <- & ChatMessage {Message : fmt .Sprintf (f , msg ... ), SenderID : "system" , SenderNick : "system" }
113
+ SysMsgChan <- & ChatMessage {Message : fmt .Sprintf (f , msg ... ), SenderID : "system" , SenderNick : "system" }
112
114
}
113
115
114
116
func main () {
115
117
// parse some flags to set our nickname and the room to join
116
118
nickFlag := flag .String ("nick" , "" , "nickname to use in chat. will be generated if empty" )
117
119
roomFlag := flag .String ("room" , "universal-connectivity" , "name of chat room to join" )
120
+ idPath := flag .String ("identity" , "identity.key" , "path to the private key (PeerID) file" )
121
+ useLogger := flag .Bool ("logger" , false , "write logs to file" )
118
122
flag .Parse ()
119
123
124
+ if * useLogger {
125
+ f , err := os .OpenFile ("log.txt" , os .O_RDWR | os .O_CREATE | os .O_APPEND , 0666 )
126
+ if err != nil {
127
+ log .Println ("failed to open log file" , err )
128
+ log .SetOutput (ioutil .Discard )
129
+ } else {
130
+ defer f .Close ()
131
+ log .SetOutput (f )
132
+ }
133
+ } else {
134
+ log .SetOutput (ioutil .Discard )
135
+ }
136
+
120
137
ctx := context .Background ()
121
138
139
+ // load our private key to generate the same peerID each time
140
+ privk , err := LoadIdentity (* idPath )
141
+ if err != nil {
142
+ panic (err )
143
+ }
144
+
122
145
// create a new libp2p Host that listens on a random TCP port
123
- h , err := libp2p .New (libp2p .Transport (quicTransport .NewTransport ), libp2p .Transport (webtransport .New ), libp2p .ListenAddrStrings ("/ip4/0.0.0.0/udp/0/quic-v1" , "/ip4/0.0.0.0/udp/0/quic-v1/webtransport" , "/ip6/::/udp/0/quic-v1" , "/ip6/::/udp/0/quic-v1/webtransport" ))
146
+ h , err := libp2p .New (
147
+ libp2p .Identity (privk ),
148
+ libp2p .Transport (quicTransport .NewTransport ),
149
+ libp2p .Transport (webtransport .New ),
150
+ libp2p .ListenAddrStrings ("/ip4/0.0.0.0/udp/0/quic-v1" , "/ip4/0.0.0.0/udp/0/quic-v1/webtransport" , "/ip6/::/udp/0/quic-v1" , "/ip6/::/udp/0/quic-v1/webtransport" ),
151
+ )
124
152
if err != nil {
125
153
panic (err )
126
154
}
@@ -145,7 +173,7 @@ func main() {
145
173
if err != nil {
146
174
panic (err )
147
175
}
148
- ChatMsgChan = cr .Messages
176
+ SysMsgChan = cr .SysMessages
149
177
150
178
// setup DHT with empty discovery peers
151
179
// so this will be a discovery peer for others
0 commit comments