Skip to content

Instantly share code, notes, and snippets.

@popsUlfr
Last active April 1, 2023 16:48
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save popsUlfr/a7e2f73aa65d59d4a800f36b1a56fb53 to your computer and use it in GitHub Desktop.
Save popsUlfr/a7e2f73aa65d59d4a800f36b1a56fb53 to your computer and use it in GitHub Desktop.
ipfs coreapi minimal pubsub
package main
import (
"context"
"log"
"time"
"github.com/ipfs/go-ipfs/core"
"github.com/ipfs/go-ipfs/core/coreapi"
"github.com/ipfs/go-ipfs/core/node"
)
// var BootstrapPeers []peer.AddrInfo
// func init() {
// peers, _ := config.DefaultBootstrapPeers()
// BootstrapPeers = append(BootstrapPeers, peers...)
// peers, _ = config.ParseBootstrapPeers([]string{
// "/ip4/138.201.67.219/tcp/4001/p2p/QmUd6zHcbkbcs7SMxwLs48qZVX3vpcM8errYS7xEczwRMA",
// "/ip4/138.201.67.219/udp/4001/quic/p2p/QmUd6zHcbkbcs7SMxwLs48qZVX3vpcM8errYS7xEczwRMA",
// "/ip4/138.201.67.220/tcp/4001/p2p/QmNSYxZAiJHeLdkBg38roksAR9So7Y5eojks1yjEcUtZ7i",
// "/ip4/138.201.67.220/udp/4001/quic/p2p/QmNSYxZAiJHeLdkBg38roksAR9So7Y5eojks1yjEcUtZ7i",
// "/ip4/138.201.68.74/tcp/4001/p2p/QmdnXwLrC8p1ueiq2Qya8joNvk3TVVDAut7PrikmZwubtR",
// "/ip4/138.201.68.74/udp/4001/quic/p2p/QmdnXwLrC8p1ueiq2Qya8joNvk3TVVDAut7PrikmZwubtR",
// "/ip4/94.130.135.167/tcp/4001/p2p/QmUEMvxS2e7iDrereVYc5SWPauXPyNwxcy9BXZrC1QTcHE",
// "/ip4/94.130.135.167/udp/4001/quic/p2p/QmUEMvxS2e7iDrereVYc5SWPauXPyNwxcy9BXZrC1QTcHE",
// })
// BootstrapPeers = append(BootstrapPeers, peers...)
// }
const Topic = "HOwPseprom18JWWk2Wk2mH4HOBWujAAD"
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
// plugins, err := loader.NewPluginLoader("plugins")
// if err != nil {
// log.Println(err)
// return
// }
// defer plugins.Close()
// err = plugins.Initialize()
// if err != nil {
// log.Println(err)
// return
// }
// err = plugins.Inject()
// if err != nil {
// log.Println(err)
// return
// }
// repoPath, err := ioutil.TempDir("", "ipfs-shell")
// if err != nil {
// log.Println(err)
// return
// }
// defer os.RemoveAll(repoPath)
// cfg, err := config.Init(log.Writer(), 2048)
// if err != nil {
// log.Println(err)
// return
// }
// err = fsrepo.Init(repoPath, cfg)
// if err != nil {
// log.Println(err)
// return
// }
// repo, err := fsrepo.Open(repoPath)
// if err != nil {
// log.Println(err)
// return
// }
// defer repo.Close()
buildCfg := &node.BuildCfg{
Online: true,
NilRepo: true,
ExtraOpts: map[string]bool{"pubsub": true},
//Repo: repo,
}
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
node, err := core.NewNode(ctx, buildCfg)
if err != nil {
log.Println(err)
return
}
log.Println("Identity:", node.Identity)
cApi, err := coreapi.NewCoreAPI(node)
if err != nil {
log.Println(err)
return
}
// go func() {
// wg := sync.WaitGroup{}
// for _, bootstrapPeer := range BootstrapPeers {
// wg.Add(1)
// go func(bootstrapPeer peer.AddrInfo) {
// defer wg.Done()
// err := cApi.Swarm().Connect(ctx, bootstrapPeer)
// if err != nil {
// log.Println(err, bootstrapPeer.ID)
// }
// }(bootstrapPeer)
// }
// wg.Wait()
// }()
for {
err = cApi.PubSub().Publish(ctx, Topic, []byte("Hello World!"))
if err != nil {
log.Println(err)
return
}
<-time.After(2 * time.Second)
}
}
package main
import (
"context"
"log"
"github.com/ipfs/go-ipfs/core"
"github.com/ipfs/go-ipfs/core/coreapi"
"github.com/ipfs/go-ipfs/core/node"
)
// var BootstrapPeers []peer.AddrInfo
// func init() {
// peers, _ := config.DefaultBootstrapPeers()
// BootstrapPeers = append(BootstrapPeers, peers...)
// peers, _ = config.ParseBootstrapPeers([]string{
// "/ip4/138.201.67.219/tcp/4001/p2p/QmUd6zHcbkbcs7SMxwLs48qZVX3vpcM8errYS7xEczwRMA",
// "/ip4/138.201.67.219/udp/4001/quic/p2p/QmUd6zHcbkbcs7SMxwLs48qZVX3vpcM8errYS7xEczwRMA",
// "/ip4/138.201.67.220/tcp/4001/p2p/QmNSYxZAiJHeLdkBg38roksAR9So7Y5eojks1yjEcUtZ7i",
// "/ip4/138.201.67.220/udp/4001/quic/p2p/QmNSYxZAiJHeLdkBg38roksAR9So7Y5eojks1yjEcUtZ7i",
// "/ip4/138.201.68.74/tcp/4001/p2p/QmdnXwLrC8p1ueiq2Qya8joNvk3TVVDAut7PrikmZwubtR",
// "/ip4/138.201.68.74/udp/4001/quic/p2p/QmdnXwLrC8p1ueiq2Qya8joNvk3TVVDAut7PrikmZwubtR",
// "/ip4/94.130.135.167/tcp/4001/p2p/QmUEMvxS2e7iDrereVYc5SWPauXPyNwxcy9BXZrC1QTcHE",
// "/ip4/94.130.135.167/udp/4001/quic/p2p/QmUEMvxS2e7iDrereVYc5SWPauXPyNwxcy9BXZrC1QTcHE",
// })
// BootstrapPeers = append(BootstrapPeers, peers...)
// }
const Topic = "HOwPseprom18JWWk2Wk2mH4HOBWujAAD"
func main() {
log.SetFlags(log.LstdFlags | log.Lshortfile)
// plugins, err := loader.NewPluginLoader("plugins")
// if err != nil {
// log.Println(err)
// return
// }
// defer plugins.Close()
// err = plugins.Initialize()
// if err != nil {
// log.Println(err)
// return
// }
// err = plugins.Inject()
// if err != nil {
// log.Println(err)
// return
// }
// repoPath, err := ioutil.TempDir("", "ipfs-shell")
// if err != nil {
// log.Println(err)
// return
// }
// defer os.RemoveAll(repoPath)
// cfg, err := config.Init(log.Writer(), 2048)
// if err != nil {
// log.Println(err)
// return
// }
// err = fsrepo.Init(repoPath, cfg)
// if err != nil {
// log.Println(err)
// return
// }
// repo, err := fsrepo.Open(repoPath)
// if err != nil {
// log.Println(err)
// return
// }
// defer repo.Close()
buildCfg := &node.BuildCfg{
Online: true,
NilRepo: true,
ExtraOpts: map[string]bool{"pubsub": true},
//Repo: repo,
}
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
node, err := core.NewNode(ctx, buildCfg)
if err != nil {
log.Println(err)
return
}
log.Println("Identity:", node.Identity)
cApi, err := coreapi.NewCoreAPI(node)
if err != nil {
log.Println(err)
return
}
// go func() {
// wg := sync.WaitGroup{}
// for _, bootstrapPeer := range BootstrapPeers {
// wg.Add(1)
// go func(bootstrapPeer peer.AddrInfo) {
// defer wg.Done()
// err := cApi.Swarm().Connect(ctx, bootstrapPeer)
// if err != nil {
// log.Println(err, bootstrapPeer.ID)
// }
// }(bootstrapPeer)
// }
// wg.Wait()
// }()
sub, err := cApi.PubSub().Subscribe(ctx, Topic)
if err != nil {
log.Println(err)
return
}
defer sub.Close()
for {
mess, err := sub.Next(ctx)
if err != nil {
log.Println(err)
return
}
log.Println("From:", mess.From())
log.Println("Seq:", mess.Seq())
log.Println("Topics:", mess.Topics())
log.Println("Data:", string(mess.Data()))
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment