package network import ( "cimeyclust.com/steel/pkg/cmd" "context" "fmt" "github.com/sandertv/go-raknet" "net" ) // Start Starts the TCP server on the specified address. func Run(baseCtx context.Context, addr string) { ctx, cancel := context.WithCancel(baseCtx) defer cancel() // Start listening on the specified address listener, err := raknet.Listen(addr) if err != nil { cmd.Logger.Error(fmt.Sprintf("Error starting UDP server: %v", err)) return } // Close the listener when the application closes. defer listener.Close() cmd.Logger.Info(fmt.Sprintf("Listening on %s", addr)) // Listen for an incoming connection in a goroutine. go func() { go func() { // Waiting for the context to be done <-ctx.Done() // Waiting for the listener to be closed, so the port is safely released listener.Close() }() for { conn, err := listener.Accept() if err != nil { select { case <-ctx.Done(): return default: cmd.Logger.Error(fmt.Sprintf("Error while accepting conn: %v", err)) } continue } // Handle connections in a new goroutine. go handleRequest(conn) } }() // Wait for all components to finish <-ctx.Done() } // handleRequest handles incoming requests. func handleRequest(conn net.Conn) { // Close the connection when you're done with it. defer conn.Close() cmd.Logger.Info("Tet") b := make([]byte, 1024*1024*4) n, _ := conn.Read(b) cmd.Logger.Info(fmt.Sprintf("Current n: %v", n)) cmd.Logger.Info(fmt.Sprintf("Received: %v", b)) }