Documentation
¶
Overview ¶
base 基础支持包
Index ¶
- Constants
- Variables
- func DecodeStake(data []byte) (string, string, error)
- func EncodeKind(base, name, seek string) ([]byte, error)
- func EncodeProto(name Command, data []byte) ([]byte, error)
- func EncodeServKinds(kinds []*Kind) ([]byte, error)
- func EncodeStake(id, addr string) ([]byte, error)
- func KindName(base, name string) string
- type Command
- type Kind
- type Proto
- type ServKinds
- type Stake
Constants ¶
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存活期侦测服务 )
简单指令(无数据) 用文本形式有更好的可辨识性,避免简单数字可能的误撞。
const ( KIND_FINDINGS = "findings" // 类别:Findings 网络节点 KIND_DEPOTS = "depots" // 类别:Depots 数据驿站节点(archives|blockqs) KIND_BLOCKCHAIN = "blockchain" // 类别:区块链类型应用 KIND_APP = "app" // 类别:非区块链类普通应用 )
应用所属的类别。 此为应用端向服务器发送的最初数据,用于声明自己。
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。
const KindSepartor = ":"
KindSepartor 基础名:具体名的分隔符
Variables ¶
var ErrBaseKind = errors.New("invalid base kind name")
ErrBaseKind 基础类型名错误。
var ErrKindName = errors.New("the kind:name not matched")
ErrKindName 应用全名不规范。
var File_basic_proto protoreflect.FileDescriptor
var GlobalSeed [32]byte
全局随机种子 程序每次启动后自动创建,当前运行时固定。
Functions ¶
func DecodeStake ¶
DecodeStake 解码收益信息 @return1 身份ID @return2 收益地址
func EncodeKind ¶
EncodeKind 编码服务类型名 会自动检查基础类别名称是否合法。 @base 基础名(depots|blockchain|app|findings) @name 具体名称 @seek 寻求的帮助(组网:finder | 应用服务:applier | 上线协助:assist)
func EncodeProto ¶
EncodeProto 数据编码。 @name 目标指令 @data 目标数据(已proto编码) @return 待网络传输的编码字节流
func EncodeServKinds ¶
EncodeServKinds 编码服务类型名清单。
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地址 )
指令定义 本类指令都包含附带的交互数据,指令值和数据会一起打包传输。
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 ¶
DecodeKind 解码服务类型名 会自动检查基础类别名称是否合法。 @return1 基础名 @return2 具体特定名
func DecodeServKinds ¶
DecodeServKinds 解码服务类型名清单。
func Name2Kind ¶
Name2Kind 从普通名称解析为一个Kind 如果名称不符合规范(kind:name),则返回nil。 如果基础名称不符合规范,也无效,返回nil。 @kname 冒号分隔的全名称 @seek 请求类别,在此为占位符(可传递空串)
func (*Kind) Descriptor
deprecated
func (*Kind) ProtoMessage ¶
func (*Kind) ProtoMessage()
func (*Kind) ProtoReflect ¶
func (x *Kind) ProtoReflect() protoreflect.Message
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) ProtoMessage ¶
func (*Proto) ProtoMessage()
func (*Proto) ProtoReflect ¶
func (x *Proto) ProtoReflect() protoreflect.Message
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) ProtoMessage ¶
func (*ServKinds) ProtoMessage()
func (*ServKinds) ProtoReflect ¶
func (x *ServKinds) ProtoReflect() protoreflect.Message
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) ProtoMessage ¶
func (*Stake) ProtoMessage()
func (*Stake) ProtoReflect ¶
func (x *Stake) ProtoReflect() protoreflect.Message