diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..33570d8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +HELP.md +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +logs/ +files/ \ No newline at end of file diff --git a/aufs/README.md b/aufs/README.md new file mode 100644 index 0000000..432a9e6 --- /dev/null +++ b/aufs/README.md @@ -0,0 +1,22 @@ +## 功能说明 + +客户端和服务端使用同一套执行脚本。 + + +### 服务端 + +1、启动需要参数 +2、可以通过install /uninstall 安装/卸载服务 +3、可以通过--config 配置文件路径 来指定配置文件路径 +4、可以通过--log 日志文件路径 来指定日志文件路径 + + + +### 客户端 + + +1、客户端执行过程中不需要携带配置参数,服务端需要携带参数。 +2、服务端执行过程中写入到服务中。输入--uninstall 可以卸载服务。 +3、作为客户端的时候,需要登录。登录密码可以重置默认密码。 +4、选定文件对比的时候,展示左右两列 + diff --git a/aufs/build.bat b/aufs/build.bat new file mode 100644 index 0000000..d3a2b0e --- /dev/null +++ b/aufs/build.bat @@ -0,0 +1,5 @@ +color 87 +set GOOS=linux +set GOARCH=amd64 +set CGO_ENABLED=0 +go build -o aufs main.go \ No newline at end of file diff --git a/aufs/config/config.go b/aufs/config/config.go new file mode 100644 index 0000000..90b42f6 --- /dev/null +++ b/aufs/config/config.go @@ -0,0 +1,49 @@ +package config + +import ( + "fmt" + "net" +) + +type Config struct { + DeviceName string + Port string + LocalIP string + FilePath string + Version string +} + +var G Config + +// 本地ip +func GetLocalIP() (string, error) { + addrs, err := net.InterfaceAddrs() + if err != nil { + return "", err + } + var ips []string + for _, address := range addrs { + if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() { + if ipnet.IP.To4() != nil { + ips = append(ips, ipnet.IP.String()) + } + } + } + if len(ips) == 0 { + return "", fmt.Errorf("get local ip failed") + } else if len(ips) == 1 { + return ips[0], nil + } else { + // Select the one connected to the network + // when there are multiple network interfaces + + // Is there a better way? + c, err := net.Dial("udp", "8.8.8.8:80") + if err != nil { + return ips[0], nil + } + defer c.Close() + return c.LocalAddr().(*net.UDPAddr).IP.String(), nil + } + +} diff --git a/aufs/go.mod b/aufs/go.mod new file mode 100644 index 0000000..1af3a65 --- /dev/null +++ b/aufs/go.mod @@ -0,0 +1,3 @@ +module aufs + +go 1.22.1 diff --git a/aufs/main.go b/aufs/main.go new file mode 100644 index 0000000..d0a387b --- /dev/null +++ b/aufs/main.go @@ -0,0 +1,42 @@ +package main + +import ( + "aufs/config" + "fmt" + "os" +) + +func main() { + // 执行的时候,没有附带参数默认为客户端 + // 获取ip地址 + lcip, err := config.GetLocalIP() + // 错误异常不为空,就输出 + if err != nil { + fmt.Printf("get server ip faild %v", err) + } + // 判断输入 + args := os.Args + if args == nil || len(args) < 2 { + // 编程客户端 + fmt.Printf("run as client\n") + + fmt.Printf("Usage: ./fss -t /home/\n") + os.Exit(1) + } + config.G.LocalIP = lcip + // + flag := args[1] + if flag == "-t" { + wkdir := args[2] + // 赋值给全局 + config.G.FilePath = wkdir + } else { + // + curdir, err := os.Getwd() + if err != nil { + fmt.Printf("initlizer faild %v", err) + } + // current work directory + config.G.FilePath = curdir + } +}