noise: github.com/perlin-network/noise/gossip Index | Files

package gossip

import "github.com/perlin-network/noise/gossip"

Package gossip is a simple implementation of a gossip protocol for noise. It keeps track of a cache of messages sent/received to/from peers to avoid re-gossiping particular messages to specific peers.

Index

Package Files

events.go msg.go protocol.go

type Events Uses

type Events struct {
    // OnGossipReceived is called whenever new gossip is received from the network. An error may be return to
    // disconnect the sender sending you data; indicating that the gossip received is invalid.
    OnGossipReceived func(sender noise.ID, data []byte) error
}

Events comprise of callbacks that may be hooked against by a user to handle inbound gossip messages/events that occur throughout the lifecycle of this gossip protocol.

type Message Uses

type Message []byte

Message is a message that is being pushed to nodes.

func UnmarshalMessage Uses

func UnmarshalMessage(data []byte) (Message, error)

UnmarshalMessage deserializes data into a Message. It never throws an error.

func (Message) Marshal Uses

func (m Message) Marshal() []byte

Marshal implements noise.Serializable and serializes Message into a slice of bytes.

type Option Uses

type Option func(protocol *Protocol)

Option is a functional option that may be configured when instantiating a new instance of this gossip protocol.

func WithEvents Uses

func WithEvents(events Events) Option

WithEvents registers a batch of callbacks onto a single gossip protocol instance.

type Protocol Uses

type Protocol struct {
    // contains filtered or unexported fields
}

Protocol implements a simple gossiping protocol that avoids resending messages to peers that it already believes is aware of particular messages that are being gossiped.

func New Uses

func New(overlay *kademlia.Protocol, opts ...Option) *Protocol

New returns a new instance of a gossip protocol with 32MB of in-memory cache instantiated.

func (*Protocol) Bind Uses

func (p *Protocol) Bind(node *noise.Node) error

Bind registers a single message gossip.Message, and handles them by registering the (*Protocol).Handle Handler.

func (*Protocol) Handle Uses

func (p *Protocol) Handle(ctx noise.HandlerContext) error

Handle implements noise.Protocol and handles gossip.Message messages.

func (*Protocol) Protocol Uses

func (p *Protocol) Protocol() noise.Protocol

Protocol returns a noise.Protocol that may registered to a node via (*noise.Node).Bind.

func (*Protocol) Push Uses

func (p *Protocol) Push(ctx context.Context, data []byte)

Push gossips a single message concurrently to all peers this node is aware of, on the condition that this node believes that the aforementioned peer has not received data before. A context may be provided to cancel Push, as it blocks the current goroutine until the gossiping of a single message is done. Any errors pushing a message to a particular peer is ignored.

Package gossip imports 5 packages (graph). Updated 2020-06-10. Refresh now. Tools for package owners.