Skip to content

Commit 52f263d

Browse files
committed
[feature] Add multicast source IP detector util
1 parent 12d2024 commit 52f263d

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

cmd/ssl-mc-sourcer/main.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package main
2+
3+
import (
4+
"flag"
5+
"log"
6+
"net"
7+
"time"
8+
)
9+
10+
const maxDatagramSize = 8192
11+
12+
var refereeAddress = flag.String("refereeAddress", "224.5.23.1:10003", "The multicast address of ssl-game-controller")
13+
var visionAddress = flag.String("visionAddress", "224.5.23.2:10006", "The multicast address of ssl-vision")
14+
15+
var refereeRemotes []string
16+
17+
func main() {
18+
flag.Parse()
19+
20+
go watchAddress(*refereeAddress)
21+
watchAddress(*visionAddress)
22+
}
23+
24+
func watchAddress(address string) {
25+
addr, err := net.ResolveUDPAddr("udp", address)
26+
if err != nil {
27+
log.Fatal(err)
28+
}
29+
conn, err := net.ListenMulticastUDP("udp", nil, addr)
30+
if err != nil {
31+
log.Fatal(err)
32+
}
33+
if err := conn.SetReadBuffer(maxDatagramSize); err != nil {
34+
log.Printf("Could not set read buffer to %v.", maxDatagramSize)
35+
}
36+
log.Println("Receiving from", address)
37+
for {
38+
_, udpAddr, err := conn.ReadFromUDP([]byte{0})
39+
if err != nil {
40+
log.Print("Could not read", err)
41+
time.Sleep(1 * time.Second)
42+
continue
43+
}
44+
addRemote(address, udpAddr.IP.String())
45+
}
46+
}
47+
48+
func addRemote(address string, remote string) {
49+
for _, a := range refereeRemotes {
50+
if a == remote {
51+
return
52+
}
53+
}
54+
refereeRemotes = append(refereeRemotes, remote)
55+
log.Printf("remote ip on %v: %v\n", address, remote)
56+
}

0 commit comments

Comments
 (0)