diff --git a/config/config.go b/config/config.go index 71f9f31..9c532d5 100644 --- a/config/config.go +++ b/config/config.go @@ -20,6 +20,8 @@ var GobalIpfsUrl ="localhost:5001" //ipfs引导节点默认网关,安装目录下 bin/fts.ini 可配 var ServerIpfsUrl = "10.240.10.238:5001" +var UpdaterName ="探索者更新.exe" + //var EtcdUrl="127.0.0.1:2379" diff --git a/handle/handle.go b/handle/handle.go index 4a0014f..9668ad0 100644 --- a/handle/handle.go +++ b/handle/handle.go @@ -94,6 +94,29 @@ func InitLocalWorkSpace(conn *websocket.Conn,userId,projectName string) (error){ return nil } +/** +初始化本地客户端配置 + */ +func InitClientConfig(ipfsApi,ipfsBootstrap string) error{ + + //空格路径处理 + ipfsPath=strings.Replace(os.Getenv("IPFS-PATH"),"\"","",1)+"\\ipfs.exe" + + + config.ServerIpfsUrl = ipfsApi + log.Println("初始化客户端配置项IPFS—API:"+config.ServerIpfsUrl) + ipfsBootstraps := strings.Split(ipfsBootstrap,";") + for _, simpleBootstrap := range ipfsBootstraps { + log.Println("增加引导节点:"+simpleBootstrap) + cmd := exec.Command(ipfsPath,"bootstrap", "add", simpleBootstrap) + err :=cmd.Run() + if err!=nil{ + return err + } + } + return nil +} + /** 下载指令 @param hash ipfs哈希值 @@ -446,6 +469,7 @@ func UploadCommand(conn *websocket.Conn,absolutePath,fileName,projectName,dir st //本地文件夹拷贝 err = sh.Get(prog.Hash,fmt.Sprint((absoluteDir+"\\"+fileName))) + if err != nil { log.Println(err) return err @@ -601,6 +625,54 @@ func SubscriptionFileChange(conn *websocket.Conn, projectName string) error{ return nil } +/** +打开方式 + */ +func OpenFileWith(filePath string) error{ + + //判断文件有效性 + _,err := os.Stat(filePath) + if err!=nil{ + return err + } + + //filePath = strings.Replace(filePath," ","~1",1) + + cmd := exec.Command("rundll32.exe","shell32.dll,OpenAs_RunDLL",filePath); + + err =cmd.Run() + if err!=nil{ + log.Println(err) + return err + } + return nil +} + +/** +手动检查软件更新 +0:不强制更新 +1:强制更新 + */ +func CheckForUpdates(forceUpdate string) error{ + + tszdir :=os.Getenv("TSZDIR") + + //判断文件有效性 + _,err := os.Stat(tszdir+config.UpdaterName) + if err!=nil{ + return err + } + + cmd := exec.Command(tszdir+config.UpdaterName,"/checknow"); + err =cmd.Run() + if err!=nil{ + log.Println(err) + return err + } + return nil + +} + func walkfunc(path string, info os.FileInfo, err error) error { if info.IsDir()==false{ @@ -635,3 +707,5 @@ func walkfunc(path string, info os.FileInfo, err error) error { + + diff --git a/main.go b/main.go index 759dece..701316b 100644 --- a/main.go +++ b/main.go @@ -46,6 +46,9 @@ func main() { http.HandleFunc("/download", websocket.DownloadHandler) http.HandleFunc("/init", websocket.InitLocalWorkSpaceHandler) http.HandleFunc("/getFolderFileInfo", websocket.GetFolderFileInfoHandler) + http.HandleFunc("/openFileWith", websocket.OpenFileWithHandler) + http.HandleFunc("/checkForUpdates", websocket.CheckForUpdatesHandler) + http.HandleFunc("/initClientConfig", websocket.InitClientConfigHandler) //服务端启动 log.Println("服务启动成功,监听端口7777,等待连接。") diff --git a/websocket/websocket.go b/websocket/websocket.go index 51d8afc..a85f163 100644 --- a/websocket/websocket.go +++ b/websocket/websocket.go @@ -133,6 +133,132 @@ ERR: conn.Close() } +func OpenFileWithHandler(w http.ResponseWriter, r *http.Request) { + //w.Write([]byte("hello")) + //收到http请求(upgrade),完成websocket协议转换 + //在应答的header中放上upgrade:websoket + var ( + conn *websocket.Conn + err error + //msgType int + data []byte + ) + if conn, err = upgrader.Upgrade(w, r, nil); err !=nil { + //报错了,直接返回底层的websocket链接就会终断掉 + return + } + //得到了websocket.Conn长连接的对象,实现数据的收发 + for { + //Text(json), Binary + //if _, data, err = conn.ReadMessage(); err != nil { + if _, data, err = conn.ReadMessage(); err != nil { + //报错关闭websocket + goto ERR + } + //发送数据,判断返回值是否报错 + log.Println("param OpenFileWithHandler:"+string(data)) + + err := handle.OpenFileWith(string(data)) + if err!=nil{ + log.Println(err) + if err := conn.WriteMessage(websocket.TextMessage, []byte("-1")); err != nil { + log.Println(err) + goto ERR + } + goto ERR + } + + goto ERR + } + //error的标签 +ERR: + conn.Close() +} + +func CheckForUpdatesHandler(w http.ResponseWriter, r *http.Request) { + //w.Write([]byte("hello")) + //收到http请求(upgrade),完成websocket协议转换 + //在应答的header中放上upgrade:websoket + var ( + conn *websocket.Conn + err error + //msgType int + data []byte + ) + if conn, err = upgrader.Upgrade(w, r, nil); err !=nil { + //报错了,直接返回底层的websocket链接就会终断掉 + return + } + //得到了websocket.Conn长连接的对象,实现数据的收发 + for { + //Text(json), Binary + //if _, data, err = conn.ReadMessage(); err != nil { + if _, data, err = conn.ReadMessage(); err != nil { + //报错关闭websocket + goto ERR + } + //发送数据,判断返回值是否报错 + log.Println("param CheckForUpdatesHandler:"+string(data)) + + err := handle.CheckForUpdates(string(data)) + if err!=nil{ + log.Println(err) + if err := conn.WriteMessage(websocket.TextMessage, []byte("-1")); err != nil { + log.Println(err) + goto ERR + } + goto ERR + } + + goto ERR + } + //error的标签 +ERR: + conn.Close() +} + +func InitClientConfigHandler(w http.ResponseWriter, r *http.Request) { + //w.Write([]byte("hello")) + //收到http请求(upgrade),完成websocket协议转换 + //在应答的header中放上upgrade:websoket + var ( + conn *websocket.Conn + err error + //msgType int + data []byte + ) + if conn, err = upgrader.Upgrade(w, r, nil); err !=nil { + //报错了,直接返回底层的websocket链接就会终断掉 + return + } + //得到了websocket.Conn长连接的对象,实现数据的收发 + for { + //Text(json), Binary + //if _, data, err = conn.ReadMessage(); err != nil { + if _, data, err = conn.ReadMessage(); err != nil { + //报错关闭websocket + goto ERR + } + //发送数据,判断返回值是否报错 + log.Println("param InitClientConfigHandler:"+string(data)) + params :=strings.Split(string(data),"|") + err := handle.InitClientConfig(params[0],params[1]) + if err!=nil{ + log.Println(err) + if err := conn.WriteMessage(websocket.TextMessage, []byte("-1")); err != nil { + log.Println(err) + goto ERR + } + goto ERR + } + + goto ERR + } + //error的标签 +ERR: + conn.Close() +} + func GetFolderFileInfoHandler(w http.ResponseWriter, r *http.Request) { //w.Write([]byte("hello")) //收到http请求(upgrade),完成websocket协议转换