| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package main
- import (
- "flag"
- "fmt"
- "log"
- "os"
- "os/signal"
- "syscall"
- "ftp-server/config"
- ftpserver "ftp-server/ftp"
- webserver "ftp-server/web"
- )
- func main() {
- configPath := flag.String("config", "config.json", "配置文件路径")
- flag.Parse()
- // Load configuration
- cfg, err := config.Load(*configPath)
- if err != nil {
- log.Fatalf("Failed to load config: %v", err)
- }
- fmt.Println("======================================")
- fmt.Println(" FTP Server for Windows")
- fmt.Println("======================================")
- fmt.Printf("FTP Port: %d\n", cfg.FTP.Port)
- fmt.Printf("Web Admin: http://127.0.0.1:%d\n", cfg.Web.Port)
- fmt.Printf("Admin User: %s\n", cfg.Admin.Username)
- fmt.Printf("Root Dir: %s\n", cfg.FTP.RootDir)
- fmt.Println("======================================")
- // Ensure root directory exists
- if err := os.MkdirAll(cfg.FTP.RootDir, 0755); err != nil {
- log.Fatalf("Failed to create root directory: %v", err)
- }
- // Start FTP server
- ftpSrv := ftpserver.NewServer(cfg, *configPath)
- if err := ftpSrv.Start(); err != nil {
- log.Fatalf("Failed to start FTP server: %v", err)
- }
- // Start Web admin server
- webSrv := webserver.NewServer(cfg, *configPath)
- go func() {
- if err := webSrv.Start(); err != nil {
- log.Fatalf("Failed to start web server: %v", err)
- }
- }()
- // Wait for termination signal
- sigChan := make(chan os.Signal, 1)
- signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
- sig := <-sigChan
- fmt.Printf("\nReceived signal %v, shutting down...\n", sig)
- ftpSrv.Stop()
- fmt.Println("FTP Server stopped.")
- }
|