Example #1
0
//处理查找节点请求
func (this *NodeManager) FindNodeReq(c server.Controller, msg net.GetPacket) {
	findNode := new(message.FindNodeReq)
	proto.Unmarshal(msg.Date, findNode)
	nodeStore := c.GetAttribute("peerNode").(*peerNode.NodeStore)

	targetNode := nodeStore.Get(findNode.GetFindId())
	// fmt.Println("查找到:", targetNode.NodeId.String())
	rspMsg := message.FindNodeRsp{
		NodeId:  proto.String(targetNode.NodeId.String()),
		FindId:  findNode.FindId,
		Addr:    proto.String(targetNode.Addr),
		IsProxy: proto.Bool(!targetNode.IsSuper),
		TcpPort: proto.Int32(int32(targetNode.TcpPort)),
		UdpPort: proto.Int32(int32(targetNode.UdpPort)),
	}

	resultBytes, _ := proto.Marshal(&rspMsg)
	c.GetNet().Send(msg.ConnId, message.FindNodeRspNum, resultBytes)
}
Example #2
0
//处理查找节点返回请求
func (this *NodeManager) FindNodeRsp(c server.Controller, msg net.GetPacket) {
	recvNode := new(message.FindNodeRsp)
	proto.Unmarshal(msg.Date, recvNode)
	// fmt.Println("接收到:", *recvNode.NodeId)
	nodeStore := c.GetAttribute("peerNode").(*peerNode.NodeStore)

	nodeIdInt, _ := new(big.Int).SetString(*recvNode.NodeId, 10)
	shouldNodeInt, _ := new(big.Int).SetString(*recvNode.FindId, 10)
	newNode := &peerNode.Node{
		NodeId:       nodeIdInt,
		NodeIdShould: shouldNodeInt,
		Addr:         *recvNode.Addr,
		IsSuper:      !*recvNode.IsProxy,
		TcpPort:      int(*recvNode.TcpPort),
		UdpPort:      int(*recvNode.UdpPort),
	}

	// newNode
	nodeStore.AddNode(newNode)
}