p2p

package
v1.2.3 Latest Latest
Warning

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

Go to latest
Published: Jul 31, 2019 License: MIT Imports: 38 Imported by: 0

Documentation

Index

Constants

View Source
const (
	QlcProtocolID    = "qlc/1.0.0"
	QlcProtocolFOUND = "/qlc/discovery/1.0.0"
)
View Source
const (
	QlcMessageHeaderLength         = 22
	QlcMessageMagicNumberEndIdx    = 3
	QlcMessageVersionEndIdx        = 4
	QlcMessageTypeEndIdx           = 6
	QlcMessageDataLengthEndIdx     = 10
	QlcMessageReservedEndIdx       = 14
	QlcMessageHeaderCheckSumEndIdx = 18
	QlcMessageDataCheckSumEndIdx   = 22
)
View Source
const (
	PublishReq      = "0" //PublishReq
	ConfirmReq      = "1" //ConfirmReq
	ConfirmAck      = "2" //ConfirmAck
	FrontierRequest = "3" //FrontierReq
	FrontierRsp     = "4" //FrontierRsp
	BulkPullRequest = "5" //BulkPullRequest
	BulkPullRsp     = "6" //BulkPullRsp
	BulkPushBlock   = "7" //BulkPushBlock
	MessageResponse = "8" //MessageResponse

	PovStatus      = "20"
	PovPublishReq  = "21"
	PovBulkPullReq = "22"
	PovBulkPullRsp = "23"
)

Message Type

View Source
const (
	PingSize = 32
	ID       = "/qlc/ping/1.0.0"
)

Variables

View Source
var (
	ErrInvalidMessageHeaderLength = errors.New("invalid message header length")
	ErrInvalidMessageDataLength   = errors.New("invalid message data length")
	ErrInvalidMagicNumber         = errors.New("invalid magic number")
	ErrInvalidHeaderCheckSum      = errors.New("invalid header checksum")
	ErrInvalidDataCheckSum        = errors.New("invalid data checksum")
)

Error types

View Source
var (
	ErrStreamIsNotConnected = errors.New("stream is not connected")
	ErrNoStream             = errors.New("no stream")
	ErrCloseStream          = errors.New("stream close error")
)

Stream Errors

View Source
var (
	ErrPeerIsNotConnected = errors.New("peer is not connected")
)

Error types

View Source
var (
	MagicNumber = []byte{0x51, 0x4C, 0x43} //QLC
)

Functions

func Equal

func Equal(a []byte, b []byte) bool

Equal checks whether byte slice a and b are equal.

func FromUint32

func FromUint32(v uint32) []byte

FromUint32 decodes uint32.

func NewQlcMessage

func NewQlcMessage(data []byte, currentVersion byte, messageType string) []byte

NewQlcMessage new qlc message

func Ping

func Ping(ctx context.Context, h host.Host, p peer.ID) (<-chan time.Duration, error)

func Uint32

func Uint32(data []byte) uint32

Uint32 encodes []byte.

Types

type DiscoveryOption

type DiscoveryOption func(context.Context, host.Host) (mdns.Service, error)

type Dispatcher

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

Dispatcher a message dispatcher service.

func NewDispatcher

func NewDispatcher() *Dispatcher

NewDispatcher create Dispatcher instance.

func (*Dispatcher) Deregister

func (dp *Dispatcher) Deregister(subscribers ...*Subscriber)

Deregister deregister subscribers.

func (*Dispatcher) PutMessage

func (dp *Dispatcher) PutMessage(msg *Message)

PutMessage put new message to chan, then subscribers will be notified to process.

func (*Dispatcher) Register

func (dp *Dispatcher) Register(subscribers ...*Subscriber)

Register register subscribers.

func (*Dispatcher) Start

func (dp *Dispatcher) Start()

Start start message dispatch goroutine.

func (*Dispatcher) Stop

func (dp *Dispatcher) Stop()

Stop stop goroutine.

type Message

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

Message struct

func NewMessage added in v1.1.0

func NewMessage(messageType MessageType, from string, data []byte, content []byte) *Message

NewBaseMessage new base message

func (*Message) Content added in v0.0.9

func (msg *Message) Content() []byte

Content get the message content

func (*Message) Data

func (msg *Message) Data() []byte

Data get the message data

func (*Message) Hash

func (msg *Message) Hash() types.Hash

Hash return the message hash

func (*Message) MessageFrom

func (msg *Message) MessageFrom() string

MessageFrom get message who send

func (*Message) MessageType

func (msg *Message) MessageType() MessageType

MessageType get message type

func (*Message) String added in v1.1.0

func (msg *Message) String() string

String get the message to string

type MessageService

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

func NewMessageService

func NewMessageService(netService *QlcService, ledger *ledger.Ledger) *MessageService

NewService return new Service.

func (*MessageService) Start

func (ms *MessageService) Start()

Start start message service.

func (*MessageService) Stop

func (ms *MessageService) Stop()

type MessageType

type MessageType string

MessageType a string for message type.

type PeersSlice

type PeersSlice []interface{}

PeersSlice is a slice which contains peers

type PingService

type PingService struct {
	Host host.Host
	// contains filtered or unexported fields
}

func NewPingService

func NewPingService(h host.Host) *PingService

func (*PingService) Ping

func (ps *PingService) Ping(ctx context.Context, p peer.ID) (<-chan time.Duration, error)

func (*PingService) PingHandler

func (ps *PingService) PingHandler(s inet.Stream)

type QlcMessage

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

func ParseQlcMessage

func ParseQlcMessage(data []byte) (*QlcMessage, error)

ParseqlcMessage parse qlc message

func (*QlcMessage) DataCheckSum

func (message *QlcMessage) DataCheckSum() uint32

DataCheckSum return data checkSum

func (*QlcMessage) DataLength

func (message *QlcMessage) DataLength() uint32

DataLength return dataLength

func (*QlcMessage) HeaderCheckSum

func (message *QlcMessage) HeaderCheckSum() uint32

HeaderCheckSum return header checkSum

func (*QlcMessage) HeaderData

func (message *QlcMessage) HeaderData() []byte

HeaderData return HeaderData

func (*QlcMessage) MagicNumber

func (message *QlcMessage) MagicNumber() []byte

MagicNumber return magicNumber

func (*QlcMessage) MessageData

func (message *QlcMessage) MessageData() []byte

func (*QlcMessage) MessageType

func (message *QlcMessage) MessageType() MessageType

func (*QlcMessage) ParseMessageData

func (message *QlcMessage) ParseMessageData(data []byte) error

ParseMessageData parse qlc message data

func (*QlcMessage) Reserved

func (message *QlcMessage) Reserved() []byte

Reserved return reserved

func (*QlcMessage) VerifyData

func (message *QlcMessage) VerifyData() error

VerifyData verify qlc message data

func (*QlcMessage) VerifyHeader

func (message *QlcMessage) VerifyHeader() error

VerifyHeader verify qlc message header

func (*QlcMessage) Version

func (message *QlcMessage) Version() byte

type QlcNode

type QlcNode struct {
	ID peer.ID
	// contains filtered or unexported fields
}

func NewNode

func NewNode(config *config.Config) (*QlcNode, error)

NewNode return new QlcNode according to the config.

func (*QlcNode) BroadcastMessage

func (node *QlcNode) BroadcastMessage(messageName string, value interface{})

BroadcastMessage broadcast message.

func (*QlcNode) GetID

func (node *QlcNode) GetID() string

ID return node ID.

func (*QlcNode) HandlePeerFound

func (node *QlcNode) HandlePeerFound(p peer.AddrInfo)

HandlePeerFound attempts to connect to peer from `PeerInfo`.

func (*QlcNode) SendMessageToPeer

func (node *QlcNode) SendMessageToPeer(messageName string, value interface{}, peerID string) error

SendMessageToPeer send message to a peer.

func (*QlcNode) SendMessageToPeers added in v0.0.9

func (node *QlcNode) SendMessageToPeers(messageName string, value interface{}, peerID string)

BroadcastMessage broadcast message.

func (*QlcNode) SetQlcService

func (node *QlcNode) SetQlcService(ns *QlcService)

SetQlcService set netService

func (*QlcNode) StartServices

func (node *QlcNode) StartServices() error

func (*QlcNode) Stop

func (node *QlcNode) Stop() error

Stop stop a node.

func (*QlcNode) StreamManager

func (node *QlcNode) StreamManager() *StreamManager

ID return node ID.

type QlcService

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

QlcService service for qlc p2p network

func NewQlcService

func NewQlcService(cfg *config.Config) (*QlcService, error)

NewQlcService create netService

func (*QlcService) Broadcast

func (ns *QlcService) Broadcast(name string, value interface{})

Broadcast message.

func (*QlcService) Deregister

func (ns *QlcService) Deregister(subscribers ...*Subscriber)

Deregister Deregister the subscribers.

func (*QlcService) MessageEvent

func (ns *QlcService) MessageEvent() event.EventBus

EventQueue return EventQueue

func (*QlcService) Node

func (ns *QlcService) Node() *QlcNode

Node return the peer node

func (*QlcService) PutMessage

func (ns *QlcService) PutMessage(msg *Message)

PutMessage put message to dispatcher.

func (*QlcService) Register

func (ns *QlcService) Register(subscribers ...*Subscriber)

Register register the subscribers.

func (*QlcService) SendMessageToPeer

func (ns *QlcService) SendMessageToPeer(messageName string, value interface{}, peerID string) error

SendMessageToPeer send message to a peer.

func (*QlcService) SendMessageToPeers added in v0.0.9

func (ns *QlcService) SendMessageToPeers(messageName string, value interface{}, peerID string)

func (*QlcService) Start

func (ns *QlcService) Start() error

Start start p2p manager.

func (*QlcService) Stop

func (ns *QlcService) Stop() error

Stop stop p2p manager.

type ServiceSync

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

Service manage sync tasks

func NewSyncService

func NewSyncService(netService *QlcService, ledger *ledger.Ledger) *ServiceSync

NewService return new Service.

func (*ServiceSync) LastSyncTime added in v1.2.0

func (ss *ServiceSync) LastSyncTime(t time.Time)

func (*ServiceSync) Start

func (ss *ServiceSync) Start()

func (*ServiceSync) Stop

func (ss *ServiceSync) Stop()

Stop sync service

type Stream

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

Stream define the structure of a stream in p2p network

func NewStream

func NewStream(stream network.Stream, node *QlcNode) *Stream

NewStream return a new Stream

func NewStreamFromPID

func NewStreamFromPID(pid peer.ID, node *QlcNode) *Stream

NewStreamFromPID return a new Stream based on the pid

func (*Stream) Connect

func (s *Stream) Connect() error

Connect to the stream

func (*Stream) IsConnected

func (s *Stream) IsConnected() bool

IsConnected return if the stream is connected

func (*Stream) SendMessageToChan added in v1.2.3

func (s *Stream) SendMessageToChan(message []byte)

func (*Stream) SendMessageToCtrlChan added in v1.2.3

func (s *Stream) SendMessageToCtrlChan(message []byte)

func (*Stream) SendMessageToPeer added in v0.0.9

func (s *Stream) SendMessageToPeer(messageType string, data []byte) error

SendMessage send msg to peer

func (*Stream) StartLoop

func (s *Stream) StartLoop()

StartLoop start stream ping loop.

func (*Stream) String

func (s *Stream) String() string

func (*Stream) Write

func (s *Stream) Write(data []byte) error

func (*Stream) WriteQlcMessage

func (s *Stream) WriteQlcMessage(message []byte) error

WriteQlcMessage write qlc msg in the stream

type StreamManager

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

StreamManager manages all streams

func NewStreamManager

func NewStreamManager() *StreamManager

NewStreamManager return a new stream manager

func (*StreamManager) Add

func (sm *StreamManager) Add(s network.Stream)

Add a new stream into the stream manager

func (*StreamManager) AddStream

func (sm *StreamManager) AddStream(stream *Stream)

AddStream into the stream manager

func (*StreamManager) BroadcastMessage

func (sm *StreamManager) BroadcastMessage(messageName string, v interface{})

BroadcastMessage broadcast the message

func (*StreamManager) CloseStream

func (sm *StreamManager) CloseStream(peerID string) error

CloseStream with the given pid and reason

func (*StreamManager) FindByPeerID

func (sm *StreamManager) FindByPeerID(peerID string) *Stream

FindByPeerID find the stream with the given peerID

func (*StreamManager) GetAllConnectPeersInfo added in v1.1.1

func (sm *StreamManager) GetAllConnectPeersInfo(p map[string]string)

func (*StreamManager) IsConnectWithPeerId added in v1.2.3

func (sm *StreamManager) IsConnectWithPeerId(peerID string) bool

func (*StreamManager) PeerCounts added in v0.0.4

func (sm *StreamManager) PeerCounts() int

func (*StreamManager) RandomPeer

func (sm *StreamManager) RandomPeer() (string, error)

func (*StreamManager) RemoveStream

func (sm *StreamManager) RemoveStream(s *Stream)

RemoveStream from the stream manager

func (*StreamManager) SendMessageToPeers added in v0.0.9

func (sm *StreamManager) SendMessageToPeers(messageName string, v interface{}, peerID string)

func (*StreamManager) SetQlcNode

func (sm *StreamManager) SetQlcNode(node *QlcNode)

SetQlcService set netService

type Subscriber

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

Subscriber subscriber.

func NewSubscriber

func NewSubscriber(id interface{}, msgChan chan *Message, doFilter bool, msgType MessageType) *Subscriber

NewSubscriber return new Subscriber instance.

func (*Subscriber) DoFilter

func (s *Subscriber) DoFilter() bool

DoFilter return doFilter

func (*Subscriber) ID

func (s *Subscriber) ID() interface{}

ID return id.

func (*Subscriber) MessageChan

func (s *Subscriber) MessageChan() chan *Message

MessageChan return msgChan.

func (*Subscriber) MessageType

func (s *Subscriber) MessageType() MessageType

MessageType return msgTypes.

Directories

Path Synopsis
pb

Jump to

Keyboard shortcuts

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