You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
101 lines
2.2 KiB
101 lines
2.2 KiB
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())
|
|
}
|
|
}
|
|
|