| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 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("服务器已停止")
- }
|