| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package main
- import (
- "flag"
- "fmt"
- "log"
- "os"
- "os/signal"
- "runtime"
- "syscall"
- "ftp-server/config"
- ftpserver "ftp-server/ftp"
- httpfileserver "ftp-server/httpfile"
- 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 (Cross-Platform)")
- fmt.Println("======================================")
- fmt.Printf("OS/Arch: %s/%s\n", runtime.GOOS, runtime.GOARCH)
- fmt.Printf("FTP Port: %d\n", cfg.FTP.Port)
- fmt.Printf("Web Admin: http://127.0.0.1:%d\n", cfg.Web.Port)
- if cfg.HTTPFile.Enable {
- fmt.Printf("HTTP Files: http://127.0.0.1:%d\n", cfg.HTTPFile.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)
- }
- }()
- // Start HTTP file server
- if cfg.HTTPFile.Enable {
- fileSrv := httpfileserver.NewServer(cfg)
- go func() {
- if err := fileSrv.Start(); err != nil {
- log.Fatalf("Failed to start HTTP file 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.")
- }
|