From 2c033ad0e371c53533b18927ddd133be9fa9b5d2 Mon Sep 17 00:00:00 2001 From: ModEngineer <43882205+ModEngineer@users.noreply.github.com> Date: Sun, 16 Oct 2022 17:34:01 -0500 Subject: [PATCH] Added a UDP listener to allow clients to search for ppl-utils servers --- go.mod | 2 +- server.go | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 1618eb9..f937526 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ -module github.com/jyaif/ppl-utils +module github.com/pewpewlive/ppl-utils go 1.14 diff --git a/server.go b/server.go index 1d54db6..35c2863 100644 --- a/server.go +++ b/server.go @@ -1,10 +1,12 @@ package main import ( + "bytes" "encoding/json" "errors" "fmt" "log" + "net" "net/http" "os" "strings" @@ -79,6 +81,42 @@ func getLevelManifest(w http.ResponseWriter, r *http.Request) { w.Write(levelManifest) } +func udp_server() { + local_addr, err := net.ResolveUDPAddr("udp4", ":9001") + if err != nil { + panic(err) + } + last_buf := make([]byte, 4) + for { + conn, err := net.ListenUDP("udp4", local_addr) + if err != nil { + log.Print(err) + conn.Close() + continue + } + buf := make([]byte, 4) + _, addr, err := conn.ReadFromUDP(buf) + if err != nil { + log.Print(err) + conn.Close() + continue + } + if bytes.Equal(last_buf, buf) { + log.Print("Dropping duplicate pings") + conn.Close() + continue + } + addr.Port = 9002 + _, err = conn.WriteToUDP(buf, addr) + if err != nil { + log.Print(err) + conn.Close() + continue + } + conn.Close() + } +} + func main() { // Serves the static files fs := cacheControlWrapper(http.FileServer(http.Dir(GetDir()))) @@ -90,5 +128,8 @@ func main() { log.Print("Starting server on port 9000") log.Print("open http://localhost:9000/pewpew.html to run PewPew") + + go udp_server() + log.Fatal(http.ListenAndServe(":9000", nil)) }