service

package
v0.1.10-docs-prerelease Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 17, 2020 License: MIT Imports: 10 Imported by: 0

Documentation

Overview

Package service defines basic interfaces to for protocols to consume p2p functionality.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Data

type Data interface {
	Bytes() []byte
}

Data is a wrapper around a message that can hold either raw bytes message or a req-res wrapper.

type DataBytes

type DataBytes struct {
	Payload []byte
}

DataBytes is a byte array payload wrapper.

func (DataBytes) Bytes

func (m DataBytes) Bytes() []byte

Bytes returns the message as bytes

type DataMsgWrapper

type DataMsgWrapper struct {
	Req     bool
	MsgType uint32
	ReqID   uint64
	Payload []byte
}

DataMsgWrapper is a req-res payload wrapper

func (DataMsgWrapper) Bytes

func (m DataMsgWrapper) Bytes() []byte

Bytes returns the message as bytes

type DirectMessage

type DirectMessage interface {
	Metadata() P2PMetadata
	Sender() p2pcrypto.PublicKey
	Bytes() []byte
}

DirectMessage is an interface that represents a simple direct message structure

type GossipMessage

type GossipMessage interface {
	Sender() p2pcrypto.PublicKey
	Bytes() []byte
	ValidationCompletedChan() chan MessageValidation
	ReportValidation(protocol string)
}

GossipMessage is an interface that represents a simple gossip message structure

type MessageValidation

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

MessageValidation is a gossip message validation event.

func NewMessageValidation

func NewMessageValidation(sender p2pcrypto.PublicKey, msg []byte, prot string) MessageValidation

NewMessageValidation creates a message validation struct to pass to the protocol.

func (MessageValidation) Message

func (mv MessageValidation) Message() []byte

Message returns the message as bytes

func (MessageValidation) Protocol

func (mv MessageValidation) Protocol() string

Protocol is the protocol this message is targeted to.

func (MessageValidation) Sender

Sender returns the public key of the sender of this message. (might not be the author)

type Node

type Node struct {
	*node.Info
	// contains filtered or unexported fields
}

Node is a simulated p2p node that can be used as a p2p service

func (*Node) Broadcast

func (sn *Node) Broadcast(protocol string, payload []byte) error

Broadcast disseminates a message to all simulated nodes. sends to yourself first.

func (*Node) ProcessDirectProtocolMessage

func (sn *Node) ProcessDirectProtocolMessage(sender p2pcrypto.PublicKey, protocol string, payload Data, metadata P2PMetadata) error

ProcessDirectProtocolMessage passes a direct message to the protocol.

func (*Node) ProcessGossipProtocolMessage

func (sn *Node) ProcessGossipProtocolMessage(sender p2pcrypto.PublicKey, protocol string, data Data, validationCompletedChan chan MessageValidation) error

ProcessGossipProtocolMessage passes a gossip message to the protocol.

func (*Node) RegisterDirectProtocol

func (sn *Node) RegisterDirectProtocol(protocol string) chan DirectMessage

RegisterDirectProtocol creates and returns a channel for a given direct based protocol.

func (*Node) RegisterDirectProtocolWithChannel

func (sn *Node) RegisterDirectProtocolWithChannel(protocol string, ingressChannel chan DirectMessage) chan DirectMessage

RegisterDirectProtocolWithChannel configures and returns a channel for a given protocol.

func (*Node) RegisterGossipProtocol

func (sn *Node) RegisterGossipProtocol(protocol string, prio priorityq.Priority) chan GossipMessage

RegisterGossipProtocol creates and returns a channel for a given gossip based protocol.

func (*Node) SendMessage

func (sn *Node) SendMessage(peerPubkey p2pcrypto.PublicKey, protocol string, payload []byte) error

SendMessage send a message to another simulated node.

func (*Node) SendWrappedMessage

func (sn *Node) SendWrappedMessage(nodeID p2pcrypto.PublicKey, protocol string, payload *DataMsgWrapper) error

SendWrappedMessage send a wrapped message to another simulated node.

func (*Node) Shutdown

func (sn *Node) Shutdown()

Shutdown closes all node channels are remove it from the Simulator map

func (*Node) Start

func (sn *Node) Start() error

Start is here to satisfy the Service interface.

func (*Node) SubscribePeerEvents

func (sn *Node) SubscribePeerEvents() (conn chan p2pcrypto.PublicKey, disc chan p2pcrypto.PublicKey)

SubscribePeerEvents satisfy the Service interface and registers channels for new simulator peers joining.

type P2PMetadata

type P2PMetadata struct {
	FromAddress net.Addr
}

P2PMetadata is a generic metadata interface

type Service

type Service interface {
	Start() error
	RegisterGossipProtocol(protocol string, prio priorityq.Priority) chan GossipMessage
	RegisterDirectProtocol(protocol string) chan DirectMessage
	SubscribePeerEvents() (new chan p2pcrypto.PublicKey, del chan p2pcrypto.PublicKey)
	Broadcast(protocol string, payload []byte) error
	Shutdown()
}

Service is an interface that represents a networking service (ideally p2p) that we can use to send messages or listen to incoming messages

type Simulator

type Simulator struct {
	io.Closer
	// contains filtered or unexported fields
}

Simulator is a p2p node factory and message bridge that is used to simulate the p2p layer provided to protocols without using real network or p2p code. it resembles the `Service` interface API.

func NewSimulator

func NewSimulator() *Simulator

NewSimulator Creates a p2p simulation by providing nodes as p2p services and bridge them.

func (*Simulator) NewFaulty

func (s *Simulator) NewFaulty(isRandBehaviour bool, maxBroadcastDelaySec uint32, maxReceiveDelaySec uint32) *Node

NewFaulty creates a node that can deploy faulty behaviour, broadcast delay, receive delay and randomness.

func (*Simulator) NewNode

func (s *Simulator) NewNode() *Node

NewNode creates a new p2p node in this Simulator

func (*Simulator) NewNodeFrom

func (s *Simulator) NewNodeFrom(n *node.Info) *Node

NewNodeFrom creates a new node from existing details

func (*Simulator) SubscribeToPeerEvents

func (s *Simulator) SubscribeToPeerEvents(myid p2pcrypto.Key) (chan p2pcrypto.PublicKey, chan p2pcrypto.PublicKey)

SubscribeToPeerEvents starts listening to new peers and disconnected peers events.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL