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: 0

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

Directories

Path Synopsis
test
broadcast command
broadcast command
dnsseed command

Jump to

Keyboard shortcuts

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