main.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. "log"
  6. "os"
  7. "os/signal"
  8. "syscall"
  9. "ftp-server/config"
  10. "ftp-server/database"
  11. "ftp-server/ftp"
  12. "ftp-server/web"
  13. )
  14. func main() {
  15. configPath := flag.String("config", "config.json", "配置文件路径")
  16. flag.Parse()
  17. fmt.Println("========================================")
  18. fmt.Println(" FTP Server with Web Management")
  19. fmt.Println("========================================")
  20. fmt.Println()
  21. // 加载配置
  22. cfg, err := config.Load(*configPath)
  23. if err != nil {
  24. log.Fatalf("加载配置失败: %v", err)
  25. }
  26. log.Println("配置加载成功")
  27. // 打开数据库
  28. dbCfg := cfg.Get().Database
  29. db, err := database.Open(dbCfg.Path)
  30. if err != nil {
  31. log.Fatalf("打开数据库失败: %v", err)
  32. }
  33. defer db.Close()
  34. log.Println("数据库初始化成功")
  35. // 启动FTP服务器
  36. ftpServer := ftp.NewServer(cfg, db)
  37. if err := ftpServer.Start(); err != nil {
  38. log.Fatalf("启动FTP服务器失败: %v", err)
  39. }
  40. // 启动Web管理服务器
  41. webServer := web.NewServer(cfg, db, ftpServer)
  42. // 信号处理
  43. sigChan := make(chan os.Signal, 1)
  44. signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
  45. go func() {
  46. if err := webServer.Start(); err != nil {
  47. log.Fatalf("启动Web服务器失败: %v", err)
  48. }
  49. }()
  50. webCfg := cfg.Get().Web
  51. fmt.Println()
  52. fmt.Printf(" FTP端口: %d\n", cfg.Get().FTP.Port)
  53. fmt.Printf(" Web管理: http://localhost:%d\n", webCfg.Port)
  54. fmt.Println()
  55. fmt.Println(" 按 Ctrl+C 停止服务器")
  56. fmt.Println()
  57. <-sigChan
  58. fmt.Println()
  59. log.Println("正在关闭服务器...")
  60. ftpServer.Stop()
  61. log.Println("服务器已停止")
  62. }