代码拉取完成,页面将自动刷新
package virtual_node
import (
"bytes"
"time"
"gitee.com/prestonTao/libp2parea/nodeStore"
"gitee.com/prestonTao/libp2parea/protobuf/go_protobuf"
"gitee.com/prestonTao/utils"
)
const (
max_vnode_index = 100000000
)
type Vnodeinfo struct {
Nid nodeStore.AddressNet `json:"nid"` //节点真实网络地址
Index uint64 `json:"index"` //节点第几个空间,从1开始,下标为0的节点为实际节点。
Vid AddressNetExtend `json:"vid"` //vid,虚拟节点网络地址
// lastContactTimestamp time.Time //最后检查的时间戳
}
type VnodeinfoS struct {
Nid nodeStore.AddressNet `json:"nid"` //节点真实网络地址
Index uint64 `json:"index"` //节点第几个空间,从1开始,下标为0的节点为实际节点。
Vid AddressNetExtend `json:"vid"` //vid,虚拟节点网络地址
// lastContactTimestamp time.Time //最后检查的时间戳
Addr string `json:"addr"` //真实节点IP地址
TcpPort uint64 `json:"tcpport"` //真实节点tcp端口
QuicPort uint64 `json:"quicport"` //真实节点quic端口
}
func (this *Vnodeinfo) Proto() ([]byte, error) {
vnodeinfo := go_protobuf.Vnodeinfo{
Nid: this.Nid, //节点真实网络地址
Index: this.Index, //节点第几个空间,从1开始,下标为0的节点为实际节点。
Vid: this.Vid, //vid,虚拟节点网络地址
}
return vnodeinfo.Marshal()
}
/*
验证节点id是否合法
*/
func (this *Vnodeinfo) Check() bool {
var newAddressNetExtend AddressNetExtend
if this.Index == 0 {
newAddressNetExtend = AddressNetExtend(this.Nid)
} else if this.Index > max_vnode_index {
return false
} else {
buf := bytes.NewBuffer(utils.Uint64ToBytes(this.Index))
buf.Write(this.Nid)
hashBs := utils.Hash_SHA3_256(buf.Bytes())
newAddressNetExtend = AddressNetExtend(hashBs)
}
if bytes.Equal(newAddressNetExtend, this.Vid) {
return true
}
return false
}
func BuildNodeinfo(index uint64, addrNet nodeStore.AddressNet) *Vnodeinfo {
vnodeInfo := Vnodeinfo{
Nid: addrNet, //
Index: index, //节点第几个空间,从0开始。
// Vid: addressNetExtend, //vid,虚拟节点网络地址
}
if index == 0 {
vnodeInfo.Vid = AddressNetExtend(addrNet)
} else if index > max_vnode_index {
return nil
} else {
buf := bytes.NewBuffer(utils.Uint64ToBytes(index))
buf.Write(addrNet)
hashBs := utils.Hash_SHA3_256(buf.Bytes())
addressNetExtend := AddressNetExtend(hashBs)
vnodeInfo.Vid = addressNetExtend
}
return &vnodeInfo
}
/*
带超时的vnodeinfo
*/
type VnodeinfoTimeout struct {
Vnodeinfo
timeout time.Time
}
/*
创建一个带超时的Vnodeinfo
*/
func CreateVnodeinfoTimeout(vnodeinfo *Vnodeinfo) *VnodeinfoTimeout {
return &VnodeinfoTimeout{
Vnodeinfo: *vnodeinfo,
timeout: time.Now(),
}
}
/*
刷新时间
*/
func (this *VnodeinfoTimeout) FlashTime() {
this.timeout = time.Now()
}
/*
检查时间是否过期
@return bool 是否过期。true=过期了;false=未过期。
*/
func (this *VnodeinfoTimeout) CheckTimeout(outtime time.Duration) bool {
interval := time.Now().Sub(this.timeout)
if outtime > interval {
return false
}
return true
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。