mirror of
https://github.com/libp2p/go-libp2p.git
synced 2025-10-05 08:07:18 +08:00

* bump go.mod to Go 1.19 and run go fix * stop using the deprecated io/ioutil package * bump go.mod to Go 1.19 and run go fix * bump go.mod to Go 1.19 and run go fix * bump go.mod to Go 1.19 and run go fix * stop using the deprecated io/ioutil package * bump go.mod to Go 1.19 and run go fix * stop using the deprecated io/ioutil package * update .github/workflows/go-test.yml * update .github/workflows/go-check.yml * update .github/workflows/release-check.yml * various fixes * stop using deprecated math/rand.Read --------- Co-authored-by: web3-bot <web3-bot@users.noreply.github.com> Co-authored-by: Marten Seemann <martenseemann@gmail.com>
62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"math/rand"
|
|
|
|
"github.com/libp2p/go-libp2p"
|
|
"github.com/libp2p/go-libp2p/core/crypto"
|
|
"github.com/libp2p/go-libp2p/core/peerstore"
|
|
|
|
ma "github.com/multiformats/go-multiaddr"
|
|
)
|
|
|
|
func main() {
|
|
rnd := rand.New(rand.NewSource(666))
|
|
// Choose random ports between 10000-10100
|
|
port1 := rnd.Intn(100) + 10000
|
|
port2 := port1 + 1
|
|
|
|
done := make(chan bool, 1)
|
|
|
|
// Make 2 hosts
|
|
h1 := makeRandomNode(port1, done)
|
|
h2 := makeRandomNode(port2, done)
|
|
|
|
log.Printf("This is a conversation between %s and %s\n", h1.ID(), h2.ID())
|
|
|
|
run(h1, h2, done)
|
|
}
|
|
|
|
// helper method - create a lib-p2p host to listen on a port
|
|
func makeRandomNode(port int, done chan bool) *Node {
|
|
// Ignoring most errors for brevity
|
|
// See echo example for more details and better implementation
|
|
priv, _, _ := crypto.GenerateKeyPair(crypto.Secp256k1, 256)
|
|
listen, _ := ma.NewMultiaddr(fmt.Sprintf("/ip4/127.0.0.1/tcp/%d", port))
|
|
host, _ := libp2p.New(
|
|
libp2p.ListenAddrs(listen),
|
|
libp2p.Identity(priv),
|
|
)
|
|
|
|
return NewNode(host, done)
|
|
}
|
|
|
|
func run(h1, h2 *Node, done <-chan bool) {
|
|
// connect peers
|
|
h1.Peerstore().AddAddrs(h2.ID(), h2.Addrs(), peerstore.PermanentAddrTTL)
|
|
h2.Peerstore().AddAddrs(h1.ID(), h1.Addrs(), peerstore.PermanentAddrTTL)
|
|
|
|
// send messages using the protocols
|
|
h1.Ping(h2.Host)
|
|
h2.Ping(h1.Host)
|
|
h1.Echo(h2.Host)
|
|
h2.Echo(h1.Host)
|
|
|
|
// block until all responses have been processed
|
|
for i := 0; i < 8; i++ {
|
|
<-done
|
|
}
|
|
}
|