package main import ( "flag" "fmt" "log" "os" "os/signal" "syscall" "ftp-server/config" "ftp-server/database" "ftp-server/ftp" "ftp-server/web" ) func main() { configPath := flag.String("config", "config.json", "配置文件路径") flag.Parse() fmt.Println("========================================") fmt.Println(" FTP Server with Web Management") fmt.Println("========================================") fmt.Println() // 加载配置 cfg, err := config.Load(*configPath) if err != nil { log.Fatalf("加载配置失败: %v", err) } log.Println("配置加载成功") // 打开数据库 dbCfg := cfg.Get().Database db, err := database.Open(dbCfg.Path) if err != nil { log.Fatalf("打开数据库失败: %v", err) } defer db.Close() log.Println("数据库初始化成功") // 启动FTP服务器 ftpServer := ftp.NewServer(cfg, db) if err := ftpServer.Start(); err != nil { log.Fatalf("启动FTP服务器失败: %v", err) } // 启动Web管理服务器 webServer := web.NewServer(cfg, db, ftpServer) // 信号处理 sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) go func() { if err := webServer.Start(); err != nil { log.Fatalf("启动Web服务器失败: %v", err) } }() webCfg := cfg.Get().Web fmt.Println() fmt.Printf(" FTP端口: %d\n", cfg.Get().FTP.Port) fmt.Printf(" Web管理: http://localhost:%d\n", webCfg.Port) fmt.Println() fmt.Println(" 按 Ctrl+C 停止服务器") fmt.Println() <-sigChan fmt.Println() log.Println("正在关闭服务器...") ftpServer.Stop() log.Println("服务器已停止") }