From 7ee4fe9b2a3ed2f9f97251a2e3cf2268229a8108 Mon Sep 17 00:00:00 2001 From: zcube <zcubekr@gmail.com> Date: Fri, 8 Nov 2024 09:28:47 +0900 Subject: [PATCH] fix: add health_for_factorio --- cmd/local.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++- cmd/remote.go | 2 +- 2 files changed, 54 insertions(+), 2 deletions(-) diff --git a/cmd/local.go b/cmd/local.go index f2c3d51..0d89a4f 100644 --- a/cmd/local.go +++ b/cmd/local.go @@ -69,7 +69,59 @@ var localCmd = &cobra.Command{ addr := net.UDPAddr{IP: net.ParseIP(ip)} - remote := &net.UDPAddr{Port: int(localPort), IP: net.ParseIP("127.0.0.1")} + remote := &net.UDPAddr{Port: int(port), IP: net.ParseIP("127.0.0.1")} + + conn, err := net.ListenUDP("udp", &addr) + if err != nil { + sugar.Error(err) + return c.String(http.StatusInternalServerError, err.Error()) + } + + pktIndex := uint16(rand.Intn(math.MaxUint16 + 1)) + resBuffer := &bytes.Buffer{} + + // ping + resBuffer.WriteByte(0) + pktIndexBytes := make([]byte, 2) + binary.LittleEndian.PutUint16(pktIndexBytes, pktIndex) + resBuffer.Write(pktIndexBytes) + + cc, wrerr := conn.WriteTo(resBuffer.Bytes(), remote) + if wrerr != nil { + sugar.Errorf("net.WriteTo() error: %s\n", wrerr) + } else { + sugar.Debugw("Wrote to socket", + "Bytes", cc, + "Remote", remote, + "RemoteClientIP", remoteClientIp, + ) + } + + b := make([]byte, 2048) + + // pong + conn.SetReadDeadline(time.Now().Add(time.Second * 5)) + cc, remote, rderr := conn.ReadFromUDP(b) + if rderr != nil { + sugar.Error("net.ReadFromUDP() error: %s", rderr) + return c.String(http.StatusInternalServerError, rderr.Error()) + } else { + sugar.Debugw("Read from socket", + "Bytes", cc, + "Remote", remote) + } + } + return c.String(http.StatusOK, "OK") + }) + + // factorio server health check : from factorio server to this server + e.GET("/health_for_factorio", func(c echo.Context) error { + { + remoteClientIp := c.RealIP() + + addr := net.UDPAddr{IP: net.ParseIP(ip)} + + remote := &net.UDPAddr{Port: int(remotePort), IP: net.ParseIP(remoteClientIp)} conn, err := net.ListenUDP("udp", &addr) if err != nil { diff --git a/cmd/remote.go b/cmd/remote.go index 628c0a0..d37ce10 100644 --- a/cmd/remote.go +++ b/cmd/remote.go @@ -68,7 +68,7 @@ var remoteCmd = &cobra.Command{ addr := net.UDPAddr{IP: net.ParseIP(ip)} - remote := &net.UDPAddr{Port: int(localPort), IP: net.ParseIP("127.0.0.1")} + remote := &net.UDPAddr{Port: int(port), IP: net.ParseIP("127.0.0.1")} conn, err := net.ListenUDP("udp", &addr) if err != nil {