mirror of
https://github.com/PeernetOfficial/core.git
synced 2026-07-22 12:47:51 +01:00
44 lines
1.0 KiB
Go
44 lines
1.0 KiB
Go
/*
|
|
File Name: Information Request.go
|
|
Copyright: 2021 Peernet s.r.o.
|
|
Author: Peter Kleissner
|
|
|
|
Information requests are asynchronous queries sent to nodes.
|
|
*/
|
|
|
|
package dht
|
|
|
|
import "time"
|
|
|
|
// InformationRequest is an asynchronous request sent. It tracks any asynchronous replies and handles timeouts.
|
|
type InformationRequest struct {
|
|
Action int // IterateFindNode or IterateFindValue
|
|
Key []byte // Target key
|
|
|
|
// TODO: Include results channel? Timeout settings? Cancelation?
|
|
}
|
|
|
|
type message2 struct {
|
|
SenderID []byte // Sender of this message
|
|
Data []byte
|
|
Closest []*Node
|
|
Error error
|
|
}
|
|
|
|
// infoCollectResults collects all information request responses within the given timeout.
|
|
func infoCollectResults(resultChan chan *message2, timeout time.Duration) (results []*message2) {
|
|
for {
|
|
select {
|
|
case result, ok := <-resultChan:
|
|
if !ok {
|
|
return
|
|
}
|
|
results = append(results, result)
|
|
case <-time.After(timeout):
|
|
// send cancelation signal ?
|
|
//close(resultChan)
|
|
return
|
|
}
|
|
}
|
|
}
|