@@ -3,6 +3,7 @@ package main
33import (
44 "embed"
55 "encoding/json"
6+ "flag"
67 "fmt"
78 "log"
89 "net"
@@ -16,6 +17,7 @@ import (
1617//go:embed public
1718var EmbedFS embed.FS
1819
20+ // DeviceInfo holds device information from UDP broadcasts
1921type DeviceInfo struct {
2022 Name string `json:"name"`
2123 IP string `json:"ip"`
@@ -30,30 +32,31 @@ var upgrader = websocket.Upgrader{
3032
3133var clients = make (map [* websocket.Conn ]bool )
3234
33- func udpListener () {
35+ // udpListener listens for UDP broadcasts from devices
36+ func udpListener (port int ) {
3437 addr := net.UDPAddr {
35- Port : 9999 ,
38+ Port : port ,
3639 IP : net .ParseIP ("0.0.0.0" ),
3740 }
3841 conn , err := net .ListenUDP ("udp4" , & addr )
3942 if err != nil {
40- log .Fatalf ("监听UDP失败 : %v" , err )
43+ log .Fatalf ("❌ UDP listener failed to start on port %d : %v" , port , err )
4144 }
4245 defer conn .Close ()
4346
44- buf := make ([]byte , 1024 )
45- log .Println ( "开始监听设备广播..." )
47+ buffer := make ([]byte , 1024 )
48+ log .Printf ( "📡 Listening for device broadcasts on UDP port %d" , port )
4649
4750 for {
48- n , _ , err := conn .ReadFromUDP (buf )
51+ n , _ , err := conn .ReadFromUDP (buffer )
4952 if err != nil {
50- log .Printf ("接收失败 : %v" , err )
53+ log .Printf ("⚠️ Error receiving UDP broadcast : %v" , err )
5154 continue
5255 }
5356
5457 var device DeviceInfo
55- if err := json .Unmarshal (buf [:n ], & device ); err != nil {
56- log .Printf ("JSON解析失败 : %v" , err )
58+ if err := json .Unmarshal (buffer [:n ], & device ); err != nil {
59+ log .Printf ("⚠️ Failed to parse device info : %v" , err )
5760 continue
5861 }
5962
@@ -64,10 +67,11 @@ func udpListener() {
6467 }
6568}
6669
70+ // wsHandler handles WebSocket upgrade requests and client management
6771func wsHandler (c * gin.Context ) {
6872 conn , err := upgrader .Upgrade (c .Writer , c .Request , nil )
6973 if err != nil {
70- log .Println ( "升级失败: " , err )
74+ log .Printf ( "⚠️ WebSocket upgrade failed: %v " , err )
7175 return
7276 }
7377 defer conn .Close ()
@@ -82,23 +86,47 @@ func wsHandler(c *gin.Context) {
8286 }
8387}
8488
89+ // main initializes and starts the HTTP and UDP services
8590func main () {
86- go udpListener ()
91+ var httpPort int
92+ var udpPort int
8793
94+ flag .IntVar (& httpPort , "http-port" , 6200 , "Port for HTTP server" )
95+ flag .IntVar (& udpPort , "udp-port" , 9999 , "Port for UDP listener" )
96+ flag .Parse ()
97+
98+ log .Printf ("🚀 Starting device discovery service" )
99+
100+ go udpListener (udpPort )
101+
102+ gin .SetMode (gin .ReleaseMode )
88103 r := gin .Default ()
89104
90105 r .GET ("/" , static .ServeEmbed ("public" , EmbedFS ))
91-
92106 r .GET ("/ws" , wsHandler )
93107
94108 r .GET ("/ping" , func (c * gin.Context ) {
95- c .String (200 , "test" )
109+ c .String (http .StatusOK , "pong" )
110+ })
111+
112+ r .GET ("/config" , func (c * gin.Context ) {
113+ callback := c .Query ("callback" )
114+ host := c .Request .Host
115+
116+ if callback == "" {
117+ c .JSON (http .StatusBadRequest , gin.H {"error" : "callback parameter required" })
118+ return
119+ }
120+
121+ data := gin.H {"host" : host }
122+ c .JSONP (http .StatusOK , data )
96123 })
97124
98125 r .NoRoute (func (c * gin.Context ) {
99- fmt .Printf ("%s doesn't exists, redirect on / \n " , c .Request .URL .Path )
126+ log .Printf ("🔄 Redirecting unknown route '%s' to '/' " , c .Request .URL .Path )
100127 c .Redirect (http .StatusMovedPermanently , "/" )
101128 })
102129
103- r .Run (":18080" )
130+ log .Printf ("🌐 HTTP server running on port %d" , httpPort )
131+ r .Run (fmt .Sprintf (":%d" , httpPort ))
104132}
0 commit comments