package main import ( "fmt" "fssc/config" "net/http" "os" "path/filepath" "fssc/internal/discovery" "fssc/internal/handler" "fssc/web" "github.com/urfave/cli/v2" ) var ( port string ) // 初始化配置 func initConfig(c *cli.Context) error { return config.G.SetConf(port) } // 发送端 func sendClient() error { // 发送者角色 go discovery.Send(discovery.Sender) //udp 监听指定路径下的文件 go discovery.Listen(discovery.Receiver, config.G.FilePath) url := fmt.Sprintf("http://%s:%s", config.G.LocalIP, config.G.Port) fmt.Printf("Server address: %s\n", url) http.HandleFunc("/", handler.SendHandler) // ico http.HandleFunc("/favicon.ico", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "image/x-icon") http.ServeFile(w, r, "./favicon.ico") }) // 加载静态资源 http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.FS(web.StaticFs)))) // 文件更新包 http.HandleFunc("/up", handler.UpServer) // 传送单文件 http.HandleFunc("/sup", handler.Supfile) // udp 传送文件 http.HandleFunc("/sendZip", handler.SendZip) // 监视目标的fs json http.HandleFunc("/nf", handler.NfTest) // web console http.HandleFunc("/console", handler.WebConsole) fmt.Println("send file to server...") return http.ListenAndServe(config.G.WildcardAddress, nil) } // 入口函数 func main() { app := &cli.App{ Name: "fssc", Usage: "file transfer tool", UsageText: "fssc [global options] [filename|foldername]", Description: "fssc is a simple command-line tool send file/folder", Flags: []cli.Flag{ &cli.StringFlag{ Name: "port", Value: "9099", Usage: "server port", Aliases: []string{"p"}, Destination: &port, }, &cli.BoolFlag{ Name: "version", Aliases: []string{"v"}, Usage: "print the version", }, }, Action: func(c *cli.Context) error { if c.NArg() > 0 { currentPath := filepath.ToSlash(c.Args().Get(0)) config.G.FilePath = currentPath return sendClient() } else { fmt.Println("no input args") return nil } //return receiveClient() }, Before: initConfig, } err := app.Run(os.Args) if err != nil { fmt.Println(err.Error()) } }