Commit b8fcaf47 authored by Lars Gierth's avatar Lars Gierth
Browse files

WIP

parent 8850e513
# Datagram protocols with libp2p
This libp2p example is a form of readme-driven development for packet switching.
I'm using it to test out interfaces and conventions, and also to produce working code.
For now it's going to be the simplest possible echo server/client.
## Additions
package p2phost
type MsgHandler func(peer.ID, protocol.ID, []byte)
type Host interface {
MsgMux() *msmux.MultigramMuxer
SetMsgHandler(protocol.ID, inet.MsgHandler)
SetMsgHandlerMatch(protocol.ID, func(string) bool, MsgHandler)
RemoveMsgHandler(protocol.ID)
WriteMsg(context.Context, peer.ID, ...protocol.ID, []byte)
}
package p2pswarm
type MsgHandler func(peer.ID, []byte)
func (s *Swarm) AddPacketTransport(p2ptransport.PacketTransport) {}
func (s *Swarm) SetMsgHandler(MsgHandler) {}
func (s *Swarm) MsgHandler() MsgHandler {}
package p2piconn
type PacketConn interface {}
package p2pnet
package p2pstream
func NoOpMsgHandler(msg []byte, peeridOrConn) {}
package p2ptransport
package udptransport
package manet
## TODO
- [ ] go-multiaddr-net datagram support
- [ ] go-libp2p-transport datagram support
- [ ] go-udp-transport
- [ ] go-peerstream datagram support
- [ ] go-libp2p-swarm datagram support
- [ ] go-multigram
- [ ] go-shs vs. go-dtls vs. go-cryptoauth
- [ ] label-based switch
- [ ] overlay routing interfaces
## PR
This PR adds APIs for message-based communication
package main
import (
"context"
"fmt"
"os"
swarm "github.com/libp2p/go-libp2p-swarm"
udpt "github.com/libp2p/go-udp-transport"
ma "github.com/multiformats/go-multiaddr"
)
func fatal(i interface{}) {
fmt.Println(i)
os.Exit(1)
}
// XXX unrewritten broken because jbenet/go-stream-muxer is out of date
// TODO move to libp2p org: go-stream-muxer go-smux-multistream go-smux-spdystream go-smux-yamux
// TODO multigram will live in BasicHost, for now it's only swarm
func main() {
laddr, err := ma.NewMultiaddr("/ip4/0.0.0.0/udp/4737")
if err != nil {
fatal(err)
}
s := swarm.NewBlankSwarm(context.Background(), "Qmbob", nil, nil)
s.AddPacketTransport(udpt.NewUDPTransport())
// Add an address to start listening on
err = s.AddListenAddr(laddr)
if err != nil {
fatal(err)
}
// Conn as argument, for WriteMsg()?
s.SetMsgHandler(func(msg []byte, peerid string) {
fmt.Printf("got message from %s: %s\n", peerid, string(msg))
_, err = s.WriteMsg(msg, peerid)
if err != nil {
fmt.Println(err)
return
}
})
s.WriteMsg("hey bob", "Qmbob")
// Wait forever
<-make(chan bool)
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment