p2p

package module
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: Sep 5, 2019 License: Apache-2.0 Imports: 23 Imported by: 9

README

p2p

A P2P network implemention based on Gossip Protocol.

Build Status codecov

Getting started

Running it then should be as simple as:

$ make all
Testing
$ make test

Documentation

Index

Constants

View Source
const (
	MAX_BUF_LEN    = 1024 * 256 //the maximum buffer To receive message
	WRITE_DEADLINE = 60         //deadline of conn write

)

Variables

This section is empty.

Functions

func LocalState

func LocalState() uint64

LocalState get local current state

Types

type AddressManager

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

AddressManager is used To manage neighbor's address

func NewAddressManager

func NewAddressManager(filePath string) *AddressManager

NewAddressManager create an address manager instance

func (*AddressManager) AddAddress

func (addrManager *AddressManager) AddAddress(addr *common.NetAddress)

AddAddress add a new address

func (*AddressManager) AddAddresses

func (addrManager *AddressManager) AddAddresses(addrs []*common.NetAddress)

AddAddresses add new addresses

func (*AddressManager) AddLocalAddress

func (addrManager *AddressManager) AddLocalAddress(port int32) error

AddOurAddress add our local address.

func (*AddressManager) AddOurAddress

func (addrManager *AddressManager) AddOurAddress(addr *common.NetAddress)

AddOurAddress add our local address.

func (*AddressManager) GetAddress

func (addrManager *AddressManager) GetAddress() (*common.NetAddress, error)

GetAddress get a random address

func (*AddressManager) GetAddressAttemptInfo added in v1.0.0

func (addrManager *AddressManager) GetAddressAttemptInfo(addr *common.NetAddress) (attemptNum uint32, lastAttemptTime time.Time)

GetAddressAttemptInfo get address attempt info

func (*AddressManager) GetAddressCount

func (addrManager *AddressManager) GetAddressCount() int

GetAddressCount get address count

func (*AddressManager) GetAddresses

func (addrManager *AddressManager) GetAddresses() []*common.NetAddress

GetAddresses get a random address list To send To peer

func (*AddressManager) GetAllAddress

func (addrManager *AddressManager) GetAllAddress() []*common.NetAddress

GetAllAddress get all address

func (*AddressManager) IsOurAddress

func (addrManager *AddressManager) IsOurAddress(addr *common.NetAddress) bool

IsOurAddress check whether the address is our address

func (*AddressManager) NeedMoreAddrs

func (addrManager *AddressManager) NeedMoreAddrs() bool

NeedMoreAddrs check whether need more address.

func (*AddressManager) OurAddresses

func (addrManager *AddressManager) OurAddresses() []*common.NetAddress

OurAddresses get local address.

func (*AddressManager) RemoveAddress

func (addrManager *AddressManager) RemoveAddress(addr *common.NetAddress)

RemoveAddress remove an address

func (*AddressManager) ResetAddressAttemptInfo added in v1.0.0

func (addrManager *AddressManager) ResetAddressAttemptInfo(addr *common.NetAddress)

ResetAddressAttemptInfo reset address attempt info

func (*AddressManager) Save

func (addrManager *AddressManager) Save()

Save save addresses To file

func (*AddressManager) Start

func (addrManager *AddressManager) Start()

Start start address manager

func (*AddressManager) Stop

func (addrManager *AddressManager) Stop()

Stop stop address manager

func (*AddressManager) UpdateAddressAttemptInfo added in v1.0.0

func (addrManager *AddressManager) UpdateAddressAttemptInfo(addr *common.NetAddress)

UpdateAddressAttemptInfo update address attempt info

type AttemptInfo added in v1.0.0

type AttemptInfo struct {
	AttemptNum      uint32       // number of attempt
	LastAttemptTime atomic.Value // unix time of last attempt
}

AttemptInfo represent the address attempt info

type DebugHandler added in v1.0.0

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

DebugHandler is a handler used to trace p2p message and report the p2p topo info.

func NewDebugHandler added in v1.0.0

func NewDebugHandler(p2p *P2P, center types.EventCenter, debugServer string) *DebugHandler

NewDebugHandler create a new NewDebugHandler instance

func (*DebugHandler) BroadCastMsgEventSubscriber added in v1.0.0

func (this *DebugHandler) BroadCastMsgEventSubscriber(msg interface{})

EventSubscriber is the type of types.EventFunc, used to subscribe the p2p related event

func (*DebugHandler) RecvMsgEventSubscriber added in v1.0.0

func (this *DebugHandler) RecvMsgEventSubscriber(msg interface{})

RecvMsgEventSubscriber is the type of types.EventFunc, used to subscribe the p2p related event

func (*DebugHandler) ReportNeighborHandler added in v1.0.0

func (this *DebugHandler) ReportNeighborHandler()

ReportNeighborHandler report peer neighbor's handler

func (*DebugHandler) Start added in v1.0.0

func (this *DebugHandler) Start()

Start start p2p debug handler

func (*DebugHandler) Stop added in v1.0.0

func (this *DebugHandler) Stop()

Stop stop p2p debug handler

type InternalMsg

type InternalMsg struct {
	From    *common.NetAddress
	To      *common.NetAddress
	Payload message.Message
	RespTo  chan interface{}
}

internal message type

type P2P

type P2P struct {
	PeerCom
	// contains filtered or unexported fields
}

P2P is p2p service implementation.

func NewP2P

func NewP2P(config *config.P2PConfig, center types.EventCenter) (*P2P, error)

NewP2P create a p2p service instance

func (*P2P) BroadCast

func (service *P2P) BroadCast(msg message.Message)

BroadCast broad cast message To all neighbor peers

func (*P2P) Gather

func (service *P2P) Gather(peerFilter PeerFilter, reqMsg message.Message) error

Gather gather newest data From p2p network

func (*P2P) GetInBountPeersCount

func (service *P2P) GetInBountPeersCount() int

GetOutBountPeersCount get out bount peer count

func (*P2P) GetOutBountPeersCount

func (service *P2P) GetOutBountPeersCount() int

GetOutBountPeersCount get out bount peer count

func (*P2P) GetPeerByAddress

func (service *P2P) GetPeerByAddress(addr *common.NetAddress) *Peer

GetPeerByAddress get a peer by net address

func (*P2P) GetPeers

func (service *P2P) GetPeers() []*Peer

GetPeers get service's inbound peers and outbound peers

func (*P2P) MessageChan

func (service *P2P) MessageChan() <-chan *InternalMsg

MessageChan get p2p's message channel, (Messages sent To the server will eventually be placed in the message channel)

func (*P2P) SendMsg

func (service *P2P) SendMsg(peerAddr *common.NetAddress, msg message.Message) error

SendMsg send message to a peer

func (*P2P) Start

func (service *P2P) Start() error

Start start p2p service

func (*P2P) Stop

func (service *P2P) Stop()

Stop stop p2p service

type P2PAPI

type P2PAPI interface {
	// Start start p2p service
	Start() error

	// Stop stop p2p service
	Stop()

	// BroadCast broad cast message To all neighbor peers
	BroadCast(msg message.Message)

	// SendMsg send message to a peer
	SendMsg(peerAddr *common.NetAddress, msg message.Message) error

	// Gather gather newest data From p2p network
	Gather(peerFilter PeerFilter, reqMsg message.Message) error

	// MessageChan get p2p's message channel, (Messages sent To the server will eventually be placed in the message channel)
	MessageChan() <-chan *InternalMsg
}

type Peer

type Peer struct {
	PeerCom
	// contains filtered or unexported fields
}

Peer represent the peer

func NewInboundPeer

func NewInboundPeer(serverInfo *PeerCom, addr *common.NetAddress, msgChan chan<- *InternalMsg, conn net.Conn) *Peer

NewInboundPeer new inbound peer instance

func NewOutboundPeer

func NewOutboundPeer(serverInfo *PeerCom, addr *common.NetAddress, persistent bool, msgChan chan<- *InternalMsg) *Peer

NewInboundPeer new outbound peer instance

func (*Peer) CurrentState

func (peer *Peer) CurrentState() uint64

CurrentState get current state of this peer.

func (*Peer) GetAddr

func (peer *Peer) GetAddr() *common.NetAddress

GetAddr get peer's address

func (*Peer) GetState

func (peer *Peer) GetState() uint64

SetState update peer's state

func (*Peer) IsOutBound added in v1.0.0

func (peer *Peer) IsOutBound() bool

IsOutBound check whether the peer is outbound peer.

func (*Peer) IsPersistent

func (peer *Peer) IsPersistent() bool

IsPersistent return true if this peer is a persistent peer

func (*Peer) KnownMsg

func (peer *Peer) KnownMsg(msg message.Message) bool

KnownMsg check whether the peer already known this message

func (*Peer) SendMsg added in v1.1.0

func (peer *Peer) SendMsg(msg *InternalMsg) error

Channel get peer's send channel

func (*Peer) SetState

func (peer *Peer) SetState(state uint64)

SetState update peer's state

func (*Peer) Start

func (peer *Peer) Start() error

Start connect To peer and send message To each other

func (*Peer) Stop

func (peer *Peer) Stop()

Stop stop peer.

type PeerCom added in v1.0.0

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

PeerCom provides the basic information of a peer

type PeerConn

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

PeerConn is the abstract of the net.Conn To this peer.

func NewPeerConn

func NewPeerConn(conn net.Conn, recvChan chan message.Message) *PeerConn

NewPeerConn create a PeerConn instance

func (*PeerConn) SendMessage

func (peerConn *PeerConn) SendMessage(msg message.Message) error

SendMessage message To this PeerConn.

func (*PeerConn) Start

func (peerConn *PeerConn) Start()

Start start PeerConn will start receive and send handler To handle the message From/To net.Conn

func (*PeerConn) Stop

func (peerConn *PeerConn) Stop()

Stop stop PeerConn

type PeerFilter

type PeerFilter func(peerState uint64) bool

PeerFilter used To filter the peer satisfy the request

Jump to

Keyboard shortcuts

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