base

package
v0.0.0-...-a08ad04 Latest Latest
Warning

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

Go to latest
Published: Nov 5, 2024 License: AGPL-3.0 Imports: 9 Imported by: 0

Documentation

Overview

base 基础支持包

Index

Constants

View Source
const (
	CmdFindPing = "Findings::Ping"   // 本网:可连接测试
	CmdFindOK   = "Findings::OK"     // 本网:服务确认(Findings),应答Ping
	CmdFindBye  = "Findings::ByeBye" // 本网:结束连接(或查询失败)
	CmdKindOK   = "FindKind::OK"     // 应用:服务器回应目标类型支持:是
	CmdKindFail = "FindKind::Fail"   // 应用:服务器回应目标类型支持:否
	CmdAppsTCP  = "FindApps::TCP"    // 应用:客户端请求可直连TCP服务器节点信息
	CmdStunCone = "__STUN__::Cone"   // STUN:请求NAT类型侦测主服务
	CmdStunSym  = "__STUN__::Sym"    // STUN:请求NAT类型侦测副服务
	CmdStunLive = "__STUN__::Live"   // STUN:请求NAT存活期侦测服务
)

简单指令(无数据) 用文本形式有更好的可辨识性,避免简单数字可能的误撞。

View Source
const (
	KIND_FINDINGS   = "findings"   // 类别:Findings 网络节点
	KIND_DEPOTS     = "depots"     // 类别:Depots 数据驿站节点(archives|blockqs)
	KIND_BLOCKCHAIN = "blockchain" // 类别:区块链类型应用
	KIND_APP        = "app"        // 类别:非区块链类普通应用
)

应用所属的类别。 此为应用端向服务器发送的最初数据,用于声明自己。

View Source
const (
	SEEK_FINDNET = "find:net" // 寻求:Findings组网
	SEEK_ASSISTX = "assist:x" // 寻求:上线协助
	SEEK_APPSERV = "stun:nat" // 寻求:应用服务(NAT探测&打洞协助)
	SEEK_KINDAPP = "kind:app" // 寻求:应用支持清单
	SEEK_PEERTCP = "peer:tcp" // 寻求:登记TCP服务器(可直连)
)

寻求的服务类型 SEEK_ASSISTX: 服务器向客户端发送一个Peer集合。Command: COMMAND_HELP SEEK_KINDAPP: 服务器发送一个Kind集合。Command: COMMAND_KINDLIST SEEK_PEERTCP: 如果失败,服务器向客户端回应一个错误消息,否则仅为一个CmdFindBye。

View Source
const KindSepartor = ":"

KindSepartor 基础名:具体名的分隔符

Variables

View Source
var ErrBaseKind = errors.New("invalid base kind name")

ErrBaseKind 基础类型名错误。

View Source
var ErrKindName = errors.New("the kind:name not matched")

ErrKindName 应用全名不规范。

View Source
var File_basic_proto protoreflect.FileDescriptor
View Source
var GlobalSeed [32]byte

全局随机种子 程序每次启动后自动创建,当前运行时固定。

Functions

func DecodeStake

func DecodeStake(data []byte) (string, string, error)

DecodeStake 解码收益信息 @return1 身份ID @return2 收益地址

func EncodeKind

func EncodeKind(base, name, seek string) ([]byte, error)

EncodeKind 编码服务类型名 会自动检查基础类别名称是否合法。 @base 基础名(depots|blockchain|app|findings) @name 具体名称 @seek 寻求的帮助(组网:finder | 应用服务:applier | 上线协助:assist)

func EncodeProto

func EncodeProto(name Command, data []byte) ([]byte, error)

EncodeProto 数据编码。 @name 目标指令 @data 目标数据(已proto编码) @return 待网络传输的编码字节流

func EncodeServKinds

func EncodeServKinds(kinds []*Kind) ([]byte, error)

EncodeServKinds 编码服务类型名清单。

func EncodeStake

func EncodeStake(id, addr string) ([]byte, error)

EncodeStake 编码收益信息

func KindName

func KindName(base, name string) string

KindName 创建类型的全名称

Types

type Command

type Command byte

控制指令

const (
	COMMAND_INVALID   Command = iota // 0: 无效类型
	COMMAND_KIND                     // 通用:初始向服务器声明自己的请求种类
	COMMAND_HELP                     // 本网:服务器发送上线协助数据(临时连接)
	COMMAND_PEER                     // 本网:双方交换Findings节点信息
	COMMAND_STAKE                    // 应用:服务器传送的相应类型的权益地址
	COMMAND_KINDLIST                 // 应用:服务器返回自己支持的应用类型(data: list)
	COMMAND_APPKIND                  // 应用:应用端向服务器查询是否支持目标应用类型
	COMMAND_PEERSTCP                 // 应用:服务器返回支持 TCP 直连的节点清单(data: list)
	COMMAND_STUN                     // 应用:应用端请求打洞协助(data: udp-peer)
	COMMAND_PUNCH                    // 应用:服务器提供打洞信令协助(data: udp-peer)
	COMMAND_STUN_CONE                // STUN:服务器回应NAT类型侦测主服务
	COMMAND_STUN_SYM                 // STUN:服务器回应NAT类型侦测副服务
	COMMAND_STUN_PEER                // STUN:服务器回应对端UDP节点信息
	COMMAND_STUN_LIVE                // STUN:服务器回应NAT存活期侦测服务
	COMMAND_STUN_HOST                // STUN:请求对端NewHost协助,向其提供UDP地址
)

指令定义 本类指令都包含附带的交互数据,指令值和数据会一起打包传输。

func DecodeProto

func DecodeProto(data []byte) (Command, []byte, error)

DecodeProto 数据解码 @data 初始接收的proto编码字节流 @return1 数据类型 @return2 该类型的编码数据(proto)

type Kind

type Kind struct {
	Base string `protobuf:"bytes,1,opt,name=base,proto3" json:"base,omitempty"` // 基础名称(depots|blockchain|app|findings)
	Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` // 具体的服务名称(任意……)
	Seek string `protobuf:"bytes,3,opt,name=seek,proto3" json:"seek,omitempty"` // 寻求的服务(find:net|stun:nat|assist:x|kind:app|peer:tcp)
	// contains filtered or unexported fields
}

节点声明类别 seek: 寻求的服务,仅在客户端向服务器请求时有用。 - find:net 参与组网,仅适用 findings 类型 - stun:nat 请求NAT探测和打洞协助,任意类型适用 - assist:x 寻求上线协助(获取Finder节点) - kind:app 获取服务器支持的应用名清单 - peer:tcp 登记支持TCP的可直连服务器(后续提供信息)

func DecodeKind

func DecodeKind(data []byte) (*Kind, error)

DecodeKind 解码服务类型名 会自动检查基础类别名称是否合法。 @return1 基础名 @return2 具体特定名

func DecodeServKinds

func DecodeServKinds(data []byte) ([]*Kind, error)

DecodeServKinds 解码服务类型名清单。

func Name2Kind

func Name2Kind(name, seek string) (*Kind, error)

Name2Kind 从普通名称解析为一个Kind 如果名称不符合规范(kind:name),则返回nil。 如果基础名称不符合规范,也无效,返回nil。 @kname 冒号分隔的全名称 @seek 请求类别,在此为占位符(可传递空串)

func (*Kind) Descriptor deprecated

func (*Kind) Descriptor() ([]byte, []int)

Deprecated: Use Kind.ProtoReflect.Descriptor instead.

func (*Kind) GetBase

func (x *Kind) GetBase() string

func (*Kind) GetName

func (x *Kind) GetName() string

func (*Kind) GetSeek

func (x *Kind) GetSeek() string

func (*Kind) ProtoMessage

func (*Kind) ProtoMessage()

func (*Kind) ProtoReflect

func (x *Kind) ProtoReflect() protoreflect.Message

func (*Kind) Reset

func (x *Kind) Reset()

func (*Kind) String

func (x *Kind) String() string

type Proto

type Proto struct {
	Name int32  `protobuf:"varint,1,opt,name=name,proto3" json:"name,omitempty"` // 指令名
	Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"`  // 关联数据(待解码)
	// contains filtered or unexported fields
}

Proto 通用数据包 用于封装其它proto编码数据,但同时提供类型标识。

func (*Proto) Descriptor deprecated

func (*Proto) Descriptor() ([]byte, []int)

Deprecated: Use Proto.ProtoReflect.Descriptor instead.

func (*Proto) GetData

func (x *Proto) GetData() []byte

func (*Proto) GetName

func (x *Proto) GetName() int32

func (*Proto) ProtoMessage

func (*Proto) ProtoMessage()

func (*Proto) ProtoReflect

func (x *Proto) ProtoReflect() protoreflect.Message

func (*Proto) Reset

func (x *Proto) Reset()

func (*Proto) String

func (x *Proto) String() string

type ServKinds

type ServKinds struct {
	Names []*Kind `protobuf:"bytes,1,rep,name=names,proto3" json:"names,omitempty"`
	// contains filtered or unexported fields
}

服务类型名集 服务器返回给应用端的信息。

func (*ServKinds) Descriptor deprecated

func (*ServKinds) Descriptor() ([]byte, []int)

Deprecated: Use ServKinds.ProtoReflect.Descriptor instead.

func (*ServKinds) GetNames

func (x *ServKinds) GetNames() []*Kind

func (*ServKinds) ProtoMessage

func (*ServKinds) ProtoMessage()

func (*ServKinds) ProtoReflect

func (x *ServKinds) ProtoReflect() protoreflect.Message

func (*ServKinds) Reset

func (x *ServKinds) Reset()

func (*ServKinds) String

func (x *ServKinds) String() string

type Stake

type Stake struct {
	Id   string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty"`     // 身份标识
	Addr string `protobuf:"bytes,2,opt,name=addr,proto3" json:"addr,omitempty"` // 收益地址(区块链)
	// contains filtered or unexported fields
}

收益信息 用于公共服务节点获取应用端的捐赠。 其中ID用于群组个体分辨,实际上也可以直接是区块链地址。

func (*Stake) Descriptor deprecated

func (*Stake) Descriptor() ([]byte, []int)

Deprecated: Use Stake.ProtoReflect.Descriptor instead.

func (*Stake) GetAddr

func (x *Stake) GetAddr() string

func (*Stake) GetId

func (x *Stake) GetId() string

func (*Stake) ProtoMessage

func (*Stake) ProtoMessage()

func (*Stake) ProtoReflect

func (x *Stake) ProtoReflect() protoreflect.Message

func (*Stake) Reset

func (x *Stake) Reset()

func (*Stake) String

func (x *Stake) String() string

Jump to

Keyboard shortcuts

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