package socket import ( "Watchdog_Linux-systemd/command" "Watchdog_Linux-systemd/postLog" "bufio" "fmt" "net" "strings" ) func BootSocket(networkType, listenAddr string, listenPort int) error { listen, err := net.Listen(networkType, fmt.Sprintf("%s:%d", listenAddr, listenPort)) if err != nil { postLog.Fatal(fmt.Sprintf("[Socket] Failed to listen: %v, err: %v, %v", listenAddr, listenPort, err)) return fmt.Errorf("failed to listen: %v, err: %v, %v", listenAddr, listenPort, err) } defer listen.Close() postLog.Info(fmt.Sprintf("Server is running on %s:%d", listenAddr, listenPort)) for { conn, err := listen.Accept() if err != nil { postLog.Error(fmt.Sprintf("Failed to accept: %v, err: %v", conn, err)) } go handleRequest(conn) } } func handleRequest(conn net.Conn) { defer conn.Close() reader := bufio.NewReader(conn) for { data, err := reader.ReadBytes('\n') if err != nil { return } recvMsg := strings.TrimSpace(string(data)) responseMsg := "" if len(recvMsg) != 0 { postLog.Debug(fmt.Sprintf("Received message: %s", recvMsg)) if recvMsg == "watchdogAgentConnectionTest" { responseMsg = "success" } else { err := command.ExecuteCommand(recvMsg) if err != nil { responseMsg = fmt.Sprintf("error: %v", err) } else { responseMsg = "success" } } } conn.Write([]byte(responseMsg + "\n")) } }