network

package
v0.0.0-...-fdc5c16 Latest Latest
Warning

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

Go to latest
Published: Jul 13, 2022 License: Apache-2.0 Imports: 9 Imported by: 1

Documentation

Index

Constants

View Source
const (
	MSG_JOIN      = 0
	MSG_LEAVE     = 1
	MSG_BROADCAST = 2
	MSG_MULTICAST = 3
	MSG_UNICAST   = 4

	MAGIC_WORD = "[what a day ^_T]"

	MAGIC_WORD_LEN = len(MAGIC_WORD)
	SIZE_LEN       = 4
	SIZE_DATA_TYPE = 1

	MESSAGE_PREFIX_LEN = SIZE_LEN + SIZE_DATA_TYPE + MAGIC_WORD_LEN

	MAX_MESSAGE_LEN = 8 * 1024 * 1024 //raw message max size will be (8 MB + MESSAGE_PREFIX_LEN) bytes.

	JSON_TYPE = 0x00
)

Variables

This section is empty.

Functions

This section is empty.

Types

type Config

type Config struct {
	ID string

	ClientOnly bool

	ServiceProtocol string
	ServiceAddress  string

	P2PSeeds []string

	Topology ITopology
	Router   IRouter
}
type ILink interface {
	Start()
	StartReceiving()
	SendData(data []byte) (n int, err error)
	SendMessage(msg Message) (n int, err error)
	RemoteAddr() net.Addr
	Close()
}

type IProcessor

type IProcessor interface {
	Handle(message Message, network *Service) (result interface{}, err error)
	ForMessage() string
}

type IRouter

type IRouter interface {
	Self() Node

	TopologyName() string

	Start(cfg Config) (err error)
	Listen(listener net.Listener)
	ConnectTo(node Node) (linkedNode LinkNode, err error)

	LinkClosed(link ILink)

	JoinTopology(seed Node) (err error)
	LeaveTopology()
	GetAllLinkedNode() (nodes []Node)

	RawMessageProcessor(data []byte, link ILink)
	RegisterMessageProcessor(msgFamily string, processor MessageProcessor)

	SendTo(node Node, msg Message) (n int, err error)
	Broadcast(msg message.Message) (err error)
}

type IService

type IService interface {
	Self() (node Node)

	Create(cfg Config) (err error)
	ConnectTo(Node) (err error)

	Join(seeds []Node, cfg *Config) (err error)
	Leave()

	GetAllLinkedNode() (nodes []Node)

	SendTo(node Node, msg message.Message) (n int, err error)
	Broadcast(msg message.Message) (err error)

	RegisterMessageProcessor(msgFamily string, processor MessageProcessor)

	StaticInformation() StaticInformation
}

type ITopology

type ITopology interface {
	Name() string

	MountTo(router IRouter)
	BuildNodeID(node Node) string

	InterestedMessage(msg Message) (interested bool)
	MessageProcessor(msg Message, link ILink)

	Join(seed LinkNode) (err error)
	Leave()

	SetLocalNode(node LinkNode)
	GetLink(node Node) (link ILink, err error)
	GetAllNodes() []LinkNode

	AddLink(link ILink)
	RemoveLink(link ILink)
}
type Link struct {
	Connection          net.Conn
	Reader              *bufio.Reader
	Writer              *bufio.Writer
	RawMessageProcessor RawMessageProcessor
	LinkClosed          LinkClosed
	ConnectOut          bool
	// contains filtered or unexported fields
}

func (*Link) Close

func (l *Link) Close()

func (*Link) RemoteAddr

func (l *Link) RemoteAddr() net.Addr

func (*Link) SendData

func (l *Link) SendData(data []byte) (n int, err error)

func (*Link) SendMessage

func (l *Link) SendMessage(msg Message) (n int, err error)

func (*Link) Start

func (l *Link) Start()

func (*Link) StartReceiving

func (l *Link) StartReceiving()

type LinkClosed

type LinkClosed func(link ILink)

type LinkNode

type LinkNode struct {
	Node
	Link ILink
}
func NewNetworkNodeFromLink(link ILink) (node LinkNode)

type Message

type Message struct {
	message.Message
	From Node
}

func (*Message) FromRawMessage

func (m *Message) FromRawMessage(msgData []byte) (err error)

func (Message) ToRawMessage

func (m Message) ToRawMessage() (rawMsg []byte, err error)

type MessagePrefix

type MessagePrefix struct {
	Size     int32
	DataType byte
}

func (*MessagePrefix) FromBytes

func (m *MessagePrefix) FromBytes(prefix []byte) (err error)

type MessageProcessor

type MessageProcessor func(msg Message) (reply *Message)

type Node

type Node struct {
	ID           string
	Protocol     string
	ServeAddress string
	CustomerData []byte
}

type RawMessageProcessor

type RawMessageProcessor func(data []byte, link ILink)

type Router

type Router struct {
	Topology            ITopology
	MessageProcessorMap map[string]MessageProcessor
	LocalNode           LinkNode
	// contains filtered or unexported fields
}

func (*Router) Broadcast

func (r *Router) Broadcast(msg message.Message) (err error)

func (*Router) ConnectTo

func (r *Router) ConnectTo(node Node) (linkedNode LinkNode, err error)

func (*Router) GetAllLinkedNode

func (r *Router) GetAllLinkedNode() (nodes []Node)

func (*Router) JoinTopology

func (r *Router) JoinTopology(seed Node) (err error)

func (*Router) LeaveTopology

func (r *Router) LeaveTopology()

func (*Router) LinkClosed

func (r *Router) LinkClosed(link ILink)

func (*Router) Listen

func (r *Router) Listen(listener net.Listener)

func (*Router) RawMessageProcessor

func (r *Router) RawMessageProcessor(data []byte, link ILink)

func (*Router) RegisterMessageProcessor

func (r *Router) RegisterMessageProcessor(msgFamily string, processor MessageProcessor)

func (*Router) Self

func (r *Router) Self() Node

func (*Router) SendTo

func (r *Router) SendTo(node Node, msg Message) (n int, err error)

func (*Router) Start

func (r *Router) Start(cfg Config) (err error)

func (*Router) TopologyName

func (r *Router) TopologyName() string

type Service

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

func (*Service) Broadcast

func (s *Service) Broadcast(msg message.Message) (err error)

func (*Service) ConnectTo

func (s *Service) ConnectTo(node Node) (err error)

func (*Service) Create

func (s *Service) Create(cfg Config) (err error)

func (*Service) GetAllLinkedNode

func (s *Service) GetAllLinkedNode() (nodes []Node)

func (*Service) Join

func (s *Service) Join(seeds []Node, serviceCfg *Config) (err error)

func (*Service) Leave

func (s *Service) Leave()

func (*Service) RegisterMessageProcessor

func (s *Service) RegisterMessageProcessor(msgFamily string, processor MessageProcessor)

func (*Service) Self

func (s *Service) Self() (node Node)

func (*Service) SendTo

func (s *Service) SendTo(node Node, msg message.Message) (sent int, err error)

func (*Service) StaticInformation

func (s *Service) StaticInformation() (info StaticInformation)

type StaticInformation

type StaticInformation struct {
	Topology      string
	ConnectedNode []string
}

Jump to

Keyboard shortcuts

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