Documentation ¶
Index ¶
- Variables
- func CopyNet2Node(input net.Conn, output *Node, currentSessionID uint16, protocolType uint16, ...) error
- func CopyNode2Net(input *Node, output net.Conn, currentSessionID uint16, protocolType uint16, ...) error
- type Buffer
- func (buffer *Buffer) ReadBytes() ([]byte, error)
- func (buffer *Buffer) ReadLowLevelPacket() (protocol.Packet, error)
- func (buffer *Buffer) ReadPacket(packetHeader *protocol.PacketHeader, packetData interface{}) error
- func (buffer *Buffer) WriteBytes(data []byte)
- func (buffer *Buffer) WriteCloseMessage()
- func (buffer *Buffer) WriteLowLevelPacket(packet protocol.Packet)
- type DataBuffer
- type NetworkTopology
- func (nt *NetworkTopology) AddNetworkMap(parent string, chlid string)
- func (nt *NetworkTopology) AddRoute(targetNode string, nextNode string)
- func (nt *NetworkTopology) DeleteNode(node *Node)
- func (nt *NetworkTopology) GenerateNetworkMapData() []byte
- func (nt *NetworkTopology) InitNetworkMap()
- func (nt *NetworkTopology) ResolveNetworkMapData(data []byte)
- func (nt *NetworkTopology) UpdateRouteTable()
- type Node
- func (node *Node) CommandHandler(peerNode *Node)
- func (node *Node) Disconnect()
- func (node *Node) InitCommandBuffer()
- func (node *Node) InitDataBuffer()
- func (node *Node) ReadLowLevelPacket(packet interface{}) error
- func (node *Node) WriteLowLevelPacket(packet interface{}) error
- func (node *Node) WritePacket(header protocol.PacketHeader, packet interface{}) error
- type NodeInfo
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 ¶
Types ¶
type Buffer ¶
type Buffer struct {
Chan chan interface{}
}
func (*Buffer) ReadLowLevelPacket ¶
func (*Buffer) ReadPacket ¶
func (buffer *Buffer) ReadPacket(packetHeader *protocol.PacketHeader, packetData interface{}) error
func (*Buffer) WriteBytes ¶
func (*Buffer) WriteCloseMessage ¶
func (buffer *Buffer) WriteCloseMessage()
Fix Bug : socks5连接不会断开的问题
func (*Buffer) WriteLowLevelPacket ¶
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 ¶
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 (*Node) CommandHandler ¶
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) WriteLowLevelPacket ¶
func (*Node) WritePacket ¶
func (node *Node) WritePacket(header protocol.PacketHeader, packet interface{}) error
Click to show internal directories.
Click to hide internal directories.