Files
FTP-Server/main.go
T

75 regels
1.6 KiB
Go

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