-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfuncNodes.go
41 lines (35 loc) · 1.52 KB
/
funcNodes.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package main
import (
"YggdrasilMap/Default"
"YggdrasilMap/db"
"YggdrasilMap/db/model"
"runtime"
"strings"
"sync"
)
func SaveNode(address string, Coords string) uint {
var peer model.Peer
database := db.Database()
database.FirstOrCreate(&peer, model.Peer{Coords: Coords, Addr: address})
_ = database.Close()
return peer.ID
}
func SaveLinks(PrimaryPeerID uint, ipv6 string, coords string) {
SecondPeerID := SaveNode(ipv6, coords)
var peerLink model.PeerLinks
database := db.Database()
database.FirstOrCreate(&peerLink, model.PeerLinks{NodeIDPrimary: PrimaryPeerID, NodeIDSecond: SecondPeerID})
_ = database.Close()
}
func worker(wg *sync.WaitGroup, quotaChan chan Nodes) {
quotaChan <- Nodes{} // занимаем слот в канале. Если места не будет, то горутина будет ждать и не начнет работу, пока не освободиться место
defer wg.Done()
<-quotaChan
for data := range quotaChan {
Gen(data.FromIPv6, data.FromCoords, Default.DoRequest(Default.GetDHTPingRequest(data.BoxPubKey, data.Coords, "")), quotaChan)
Gen(data.FromIPv6, data.FromCoords, Default.DoRequest(Default.GetDHTPingRequest(data.BoxPubKey, data.Coords, strings.Repeat("0", 128))), quotaChan)
Gen(data.FromIPv6, data.FromCoords, Default.DoRequest(Default.GetDHTPingRequest(data.BoxPubKey, data.Coords, strings.Repeat("f", 128))), quotaChan)
}
runtime.Gosched() // передает управление другой горутине
<-quotaChan // освобождает слот
}