node

package
v1.1.0 Latest Latest
Warning

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

Go to latest
Published: Jun 10, 2019 License: MIT Imports: 12 Imported by: 20

Documentation

Index

Constants

This section is empty.

Variables

View Source
var CurrentNode = Node{
	IsAdmin: 0,
	HashID:  utils.NewUUID(),
}

CurrentNode 当前节点

View Source
var ERR_UNKNOWN_CMD = errors.New("Unknown command type")
View Source
var GNetworkTopology = NetworkTopology{
	RouteTable: make(map[string]string),
	NetworkMap: make(map[string]([]string)),
}
View Source
var GNodeInfo = NodeInfo{
	NodeNumber2UUID: make(map[int]string),
	NodeUUID2Number: make(map[string]int),
	NodeDescription: make(map[string]string),
}
View Source
var Nodes = make(map[string]*Node)

Nodes 与当前节点连接的节点

Functions

func CopyNet2Node

func CopyNet2Node(input net.Conn, output *Node, currentSessionID uint16, protocolType uint16, c chan bool) error

func CopyNode2Net

func CopyNode2Net(input *Node, output net.Conn, currentSessionID uint16, protocolType uint16, c chan bool) error

Types

type Buffer

type Buffer struct {
	Chan chan interface{}
}

func NewBuffer

func NewBuffer() *Buffer

func (*Buffer) ReadBytes

func (buffer *Buffer) ReadBytes() ([]byte, error)

func (*Buffer) ReadLowLevelPacket

func (buffer *Buffer) ReadLowLevelPacket() (protocol.Packet, error)

func (*Buffer) ReadPacket

func (buffer *Buffer) ReadPacket(packetHeader *protocol.PacketHeader, packetData interface{}) error

func (*Buffer) WriteBytes

func (buffer *Buffer) WriteBytes(data []byte)

func (*Buffer) WriteCloseMessage

func (buffer *Buffer) WriteCloseMessage()

Fix Bug : socks5连接不会断开的问题

func (*Buffer) WriteLowLevelPacket

func (buffer *Buffer) WriteLowLevelPacket(packet protocol.Packet)

type DataBuffer

type DataBuffer struct {
	// 数据信道缓冲区
	DataBuffer     [global.TCP_MAX_CONNECTION]*Buffer
	DataBufferLock *sync.RWMutex

	// Session ID
	SessionID     uint16
	SessionIDLock *sync.Mutex
}

func NewDataBuffer

func NewDataBuffer() *DataBuffer

func (*DataBuffer) GetDataBuffer

func (dataBuffer *DataBuffer) GetDataBuffer(sessionID uint16) *Buffer

func (*DataBuffer) GetSessionID

func (dataBuffer *DataBuffer) GetSessionID() uint16

func (*DataBuffer) NewDataBuffer

func (dataBuffer *DataBuffer) NewDataBuffer(sessionID uint16)

func (*DataBuffer) RealseDataBuffer

func (dataBuffer *DataBuffer) RealseDataBuffer(sessionID uint16)

type NetworkTopology

type NetworkTopology struct {
	RouteTable map[string]string
	NetworkMap map[string]([]string)
}

NetworkTopology 网络拓扑 RouteTable 路由表, 路由表的Key为目标节点, Value为下一跳节点,注意在该多级代理的应用场景中,暂不支持节点间形成环路的情况 从管理节点到其他节点,有且仅有一条道路,所以不涉及路由选路的问题,即仅支持树形拓扑 NetworkMap 网络拓扑, key为节点id,value为该节点下直接连接的节点id

func (*NetworkTopology) AddNetworkMap

func (nt *NetworkTopology) AddNetworkMap(parent string, chlid string)

AddNetworkMap 向网络拓扑中添加节点,key为父节点,nodeId为子节点

func (*NetworkTopology) AddRoute

func (nt *NetworkTopology) AddRoute(targetNode string, nextNode string)

AddRoute 在路由表中添加一条路由表

func (*NetworkTopology) DeleteNode

func (nt *NetworkTopology) DeleteNode(node *Node)

func (*NetworkTopology) GenerateNetworkMapData

func (nt *NetworkTopology) GenerateNetworkMapData() []byte

GenerateNetworkMapData 更具网络拓扑生成SyncPacket中使用的NetworkMap数据

func (*NetworkTopology) InitNetworkMap

func (nt *NetworkTopology) InitNetworkMap()

InitNetworkMap 初始化网络拓扑, 初始网络拓扑仅包含与本节点直接相连的节点

func (*NetworkTopology) ResolveNetworkMapData

func (nt *NetworkTopology) ResolveNetworkMapData(data []byte)

ResolveNetworkMapData 解析SyncPacket中包含的NetworkMap数据

func (*NetworkTopology) UpdateRouteTable

func (nt *NetworkTopology) UpdateRouteTable()

UpdateRouteTable 通过NeworkMap中的数据生成路由表

type Node

type Node struct {
	IsAdmin uint16   // Node是否是Admin
	HashID  string   // Node的HashID
	Conn    net.Conn // 与Node的TCP连接

	// Conn的锁,因为Conn读写Packet的时候如果不加锁,多个routine会出现乱序的情况
	ConnReadLock  *sync.Mutex
	ConnWriteLock *sync.Mutex

	// 控制信道缓冲区
	CommandBuffers map[uint16]*Buffer

	// 数据信道缓冲区
	DataBuffers map[uint16]*DataBuffer

	// 是否与本节点直接连接
	DirectConnection bool
}

Node 节点

func ClentInitConnection

func ClentInitConnection(conn net.Conn) (bool, *Node)

func NewNode

func NewNode(isAdmin uint16, hashID string, conn net.Conn, directConnection bool) *Node

func ServerInitConnection

func ServerInitConnection(conn net.Conn) (bool, *Node)

func (*Node) CommandHandler

func (node *Node) CommandHandler(peerNode *Node)

CommandHandler 协议数据包,将协议数据包分类写入Buffer

func (*Node) Disconnect

func (node *Node) Disconnect()

TODO 只有与断掉节点之间相连的节点才会清理路由表/网络拓扑表/节点标号等 暂无法做到对全网所有节点的如下信息进行清理,这样有些麻烦,暂时也不是刚需

func (*Node) InitCommandBuffer

func (node *Node) InitCommandBuffer()

func (*Node) InitDataBuffer

func (node *Node) InitDataBuffer()

func (*Node) ReadLowLevelPacket

func (node *Node) ReadLowLevelPacket(packet interface{}) error

func (*Node) WriteLowLevelPacket

func (node *Node) WriteLowLevelPacket(packet interface{}) error

func (*Node) WritePacket

func (node *Node) WritePacket(header protocol.PacketHeader, packet interface{}) error

type NodeInfo

type NodeInfo struct {
	// 节点编号,已被分配的节点编号不会在节点断开后分给新加入网络的节点
	NodeNumber2UUID map[int]string
	NodeUUID2Number map[string]int
	// 节点描述
	NodeDescription map[string]string
}

func (*NodeInfo) AddNode

func (info *NodeInfo) AddNode(nodeID string)

AddNode 添加一个节点并为节点编号

func (*NodeInfo) NodeExist

func (info *NodeInfo) NodeExist(nodeID string) bool

NodeExist 节点是否存在

func (*NodeInfo) UpdateNoteInfo

func (info *NodeInfo) UpdateNoteInfo()

UpdateNoteInfo 根据路由表信息给节点编号

Jump to

Keyboard shortcuts

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