Exemplo n.º 1
0
func doPing(kadem *kademlia.Kademlia, con kademlia.Contact, addressOrId string) {
	var pingAddress string
	if len(strings.Split(addressOrId, string(":"))) == 2 {
		pingAddress = addressOrId
	} else {
		id, err := kademlia.FromString(addressOrId)
		if err != nil {
			fmt.Printf("ERR could not interpret nodeid as ID")
			return
		}
		con, err := kadem.ContactFromID(id)
		if err != nil {
			fmt.Println("ERR : unknown node")
			return
		}
		pingAddress = contactToAddrString(con)
	}
	client, err := rpc.DialHTTP("tcp", pingAddress)
	if err != nil {
		log.Fatal("DialHTTP: ", err)
	}
	ping := kademlia.Ping{Sender: con}
	ping.MsgID = kademlia.NewRandomID()
	var pong kademlia.Pong
	err = client.Call("Kademlia.Ping", ping, &pong)
	if err != nil {
		log.Fatal("Call: ", err)
	}

	if ping.MsgID.Equals(pong.MsgID) {
		fmt.Print("OK\n")
	} else {
		fmt.Print("ERR : response message id does not match\n")
	}
	_ = client.Close()
}