diff --git a/handle/handle.go b/handle/handle.go index f10f88d..c615d2f 100644 --- a/handle/handle.go +++ b/handle/handle.go @@ -2,6 +2,7 @@ package handle import ( "bufio" + "context" "encoding/json" "errors" "fmt" @@ -387,9 +388,26 @@ func UploadCommand(conn *websocket.Conn,absolutePath,fileName,projectName,dir,cu }() go func(){ + first := true millSeconds := time.Now().UnixNano() / 1e6 + current :=time.Now().UnixNano() / 1e6 for content := range uploadProgress { // 通道关闭后会退出for range循环 - current :=time.Now().UnixNano() / 1e6 + if first { + projson,err := contentToJSONByte(content) + if projson==nil && err==nil{ + continue + } + + if err != nil { + log.Println("json.Marshal error %s\n", err) + } + uploading=true + if err := conn.WriteMessage(websocket.TextMessage, projson); err != nil { + break + } + millSeconds = current + first=false + } if current-millSeconds>500{ projson,err := contentToJSONByte(content) if projson==nil && err==nil{ @@ -405,7 +423,7 @@ func UploadCommand(conn *websocket.Conn,absolutePath,fileName,projectName,dir,cu } millSeconds = current } - if strings.Index(content,"100.00%")!=-1{ + if (strings.Index(content,"90.00%")!=-1){ projson,err := contentToJSONByte(content) if projson==nil && err==nil{ @@ -492,16 +510,40 @@ func UploadCommand(conn *websocket.Conn,absolutePath,fileName,projectName,dir,cu } //serverSh.SetTimeout(time.Duration(600)*time.Second) + //判断备份节点对等节点是否已添加连接 + idOut,err :=sh.ID() + localId :=idOut.ID + swarmConnInfos,err :=serverSh.SwarmPeers(context.Background()) + hasConnect := false + for _,swarmconn := range swarmConnInfos.Peers { + if swarmconn.Peer==localId{ + hasConnect=true + break + } + } + + if !hasConnect{ + log.Println("中继处理") + swarmConnectAddr :="/ipfs/"+"12D3KooWER8uoGrzeLuJHTXoTMnR4jjHfpcA6ZcpXBaQNJvG5jMP"+"/p2p-circuit/ipfs/"+localId + errT := serverSh.SwarmConnect(context.Background(),swarmConnectAddr) + if errT!=nil{ + log.Println("中继失败,引导节点备份失败") + log.Println(err) + if err := conn.WriteMessage(websocket.TextMessage, []byte("-1")); err != nil { + return err + } + } + } err = serverSh.Pin(prog.Hash) - if err != nil { + if err!=nil{ log.Println("引导节点备份失败") log.Println(err) if err := conn.WriteMessage(websocket.TextMessage, []byte("-1")); err != nil { return err } - return err } + log.Println("引导节点文件备份成功") //文件不存在则进行本地文件夹拷贝 @@ -642,7 +684,7 @@ func commitRecord(path,currentHistoryHash,hash,note,creator string, milestone bo } serverSh :=shell.NewShell(config.ServerIpfsUrl) - serverSh.SetTimeout(5*time.Second) + serverSh.SetTimeout(60*time.Second) err = serverSh.Pin(historyHash) if err != nil { log.Println("历史版本管理文件备份失败")