Ver a proveniência

bugfix

pull/1/head
yuan_rh há 4 anos
ascendente
cometimento
72ce760fca
2 ficheiros alterados com 76 adições e 45 eliminações
  1. +72
    -40
      handle/handle.go
  2. +4
    -5
      websocket/websocket.go

+ 72
- 40
handle/handle.go Ver ficheiro

@@ -27,7 +27,10 @@ var gobalFileUpdateTimeMap = make(map[string] string)
var getLocalFileListDir string
var gobalSubscriptionFileChangeSwitch int =0 //订阅文件变更开关

var ipfsPath=os.Getenv("IPFS-PATH")+"ipfs.exe"


var ipfsPath=os.Getenv("IPFS-PATH")

/**
文件上传下载进度
*/
@@ -40,6 +43,8 @@ type processStruct struct {
}

func main() {


//config.InitConfig()
//InitLocalWorkSpace("320872793405132801","test1")
//
@@ -59,6 +64,9 @@ func main() {
*/
func InitLocalWorkSpace(conn *websocket.Conn,userId,projectName string) (error){

//空格路径处理
ipfsPath=strings.Replace(os.Getenv("IPFS-PATH"),"\"","",1)+"\\ipfs.exe"

//初始化当前登陆用户
gobalLoginUserId = userId

@@ -105,6 +113,7 @@ func DownCommand(conn *websocket.Conn, hash, projectName, fileName, dir string)
}
}

var downloading bool = false

cmd := exec.Command(ipfsPath,"get", hash,"-o",fmt.Sprint(absoluteDir+"\\"+fileName))
progress := make(chan string,10000)
@@ -121,10 +130,10 @@ func DownCommand(conn *websocket.Conn, hash, projectName, fileName, dir string)
}()

go func(){
seconds := time.Now().Unix()
millSeconds := time.Now().UnixNano() / 1e6
for content := range progress { // 通道关闭后会退出for range循环
current :=time.Now().Unix()
if current-seconds>1{
current :=time.Now().UnixNano() / 1e6
if current-millSeconds>500{
projson,err := contentToJSONByte(content)
if projson==nil && err==nil{
continue
@@ -133,11 +142,12 @@ func DownCommand(conn *websocket.Conn, hash, projectName, fileName, dir string)
if err != nil {
log.Printf("json.Marshal error %s\n", err)
}
downloading = true
if err := conn.WriteMessage(websocket.TextMessage, projson); err != nil {
log.Println(err)
break
}
seconds = current
millSeconds = current
}
if strings.Index(content,"100.00%")!=-1{

@@ -149,6 +159,7 @@ func DownCommand(conn *websocket.Conn, hash, projectName, fileName, dir string)
if err != nil {
log.Printf("json.Marshal error %s\n", err)
}
downloading = true
if err := conn.WriteMessage(websocket.TextMessage, projson); err != nil {
panic(err)
}
@@ -163,18 +174,17 @@ func DownCommand(conn *websocket.Conn, hash, projectName, fileName, dir string)
go func() {
index :=0
for true{
if cmd.ProcessState==nil{
index++
time.Sleep(time.Duration(1)*time.Second)
if index==30{
err = cmd.Process.Kill()
log.Println("进程连接超时30s已被Kill")
if err := conn.WriteMessage(websocket.TextMessage, []byte("-1")); err != nil {
return
}
index++
if downloading==true{
return
}
time.Sleep(time.Duration(1)*time.Second)
if downloading==false && index==30{
err = cmd.Process.Kill()
log.Println("进程连接超时30s已被Kill")
if err := conn.WriteMessage(websocket.TextMessage, []byte("-1")); err != nil {
return
}
}else {
return
}
}
@@ -182,7 +192,7 @@ func DownCommand(conn *websocket.Conn, hash, projectName, fileName, dir string)

err = cmd.Wait()
if err != nil {
log.Panicf("cmd.Run() failed with %s\n", err)
log.Printf("cmd.Run() failed with %s\n", err)
}
if errStdout != nil || errStderr != nil {
log.Printf("failed to capture stdout or stderr\n")
@@ -239,22 +249,6 @@ func contentToJSONByte(content string) ([]byte,error){
@param dir 云文件目录
*/
func UploadCommand(conn *websocket.Conn,absolutePath,fileName,projectName,dir string) error{
//拷贝文件

//上传文件

//
//file,err :=os.Open(absolutePath)
//if err != nil{
// return "",err
//}
//
//defer file.Close()
//
//hash,err :=sh.Add(file)
//if err != nil {
// return "",err
//}

//本地拷贝文件
absoluteDir := config.LocalWorkSpaceDir+"\\"+gobalLoginUserId+"\\"+projectName+"\\"+dir
@@ -268,6 +262,18 @@ func UploadCommand(conn *websocket.Conn,absolutePath,fileName,projectName,dir st
}
}

//检测文件打开状态
_,err = os.OpenFile(absolutePath,os.O_RDWR,1)
if err != nil {
log.Println("文件被占用,请关闭打开的软件")
if err := conn.WriteMessage(websocket.TextMessage, []byte("-2")); err != nil {
return err
}
return err
}

var uploading bool=false

cmd := exec.Command(ipfsPath, "add",absolutePath)
uploadProgress := make(chan string,10000)
var stdout, stderr []byte
@@ -283,22 +289,23 @@ func UploadCommand(conn *websocket.Conn,absolutePath,fileName,projectName,dir st
}()

go func(){
seconds := time.Now().Unix()
millSeconds := time.Now().UnixNano() / 1e6
for content := range uploadProgress { // 通道关闭后会退出for range循环
current :=time.Now().Unix()
if current-seconds>1{
current :=time.Now().UnixNano() / 1e6
if current-millSeconds>500{
projson,err := contentToJSONByte(content)
if projson==nil && err==nil{
continue
}

if err != nil {
log.Fatalf("json.Marshal error %s\n", err)
log.Println("json.Marshal error %s\n", err)
}
uploading=true
if err := conn.WriteMessage(websocket.TextMessage, projson); err != nil {
break
}
seconds = current
millSeconds = current
}
if strings.Index(content,"100.00%")!=-1{

@@ -309,8 +316,9 @@ func UploadCommand(conn *websocket.Conn,absolutePath,fileName,projectName,dir st


if err != nil {
log.Fatalf("json.Marshal error %s\n", err)
log.Println("json.Marshal error %s\n", err)
}
uploading=true
if err := conn.WriteMessage(websocket.TextMessage, projson); err != nil {
panic(err)
}
@@ -319,13 +327,35 @@ func UploadCommand(conn *websocket.Conn,absolutePath,fileName,projectName,dir st
}
}()

log.Println("文件上传中...")

//设置30秒连接超时
go func() {
index :=0
for true{
index++
if uploading==true{
return
}
time.Sleep(time.Duration(1)*time.Second)
if uploading==false && index==30{
err = cmd.Process.Kill()
log.Println("进程连接超时30s已被Kill")
if err := conn.WriteMessage(websocket.TextMessage, []byte("-1")); err != nil {
return
}
return
}
}
}()

err = cmd.Wait()

if err != nil {
log.Fatalf("cmd.Run() failed with %s\n", err)
log.Println("cmd.Run() failed with %s\n", err)
}
if errStdout != nil || errStderr != nil {
log.Fatalf("failed to capture stdout or stderr\n")
log.Println("failed to capture stdout or stderr\n")
}
outStr, errStr := string(stdout), string(stderr)
log.Printf("out:%s,err:%s", outStr, errStr)
@@ -432,6 +462,7 @@ func SubscriptionFileChange(conn *websocket.Conn, projectName string) error{

if err := conn.WriteMessage(websocket.TextMessage, mapByte); err != nil {
log.Println(err)
return err
}

log.Println("检查本地目录文件变更状态,执行睡眠时间1分钟")
@@ -451,6 +482,7 @@ func walkfunc(path string, info os.FileInfo, err error) error {

sh := shell.NewShell(config.GobalIpfsUrl)
file,err :=os.Open(path)

if err != nil{
log.Println(err)
return err


+ 4
- 5
websocket/websocket.go Ver ficheiro

@@ -1,7 +1,6 @@
package websocket

import (
"fmt"
"fts/handle"
"github.com/gorilla/websocket"
"log"
@@ -46,7 +45,7 @@ func UploadHandler(w http.ResponseWriter, r *http.Request) {
params :=strings.Split(string(data),"|")
err := handle.UploadCommand(conn,params[0],params[1],params[2],params[3])
if err!=nil{
fmt.Println(err)
log.Println(err)
goto ERR
}
goto ERR
@@ -84,7 +83,7 @@ func DownloadHandler(w http.ResponseWriter, r *http.Request) {
params :=strings.Split(string(data),"|")
err := handle.DownCommand(conn,params[0],params[1],params[2],params[3])
if err!=nil{
fmt.Println(err)
log.Println(err)
goto ERR
}

@@ -123,7 +122,7 @@ func InitLocalWorkSpaceHandler(w http.ResponseWriter, r *http.Request) {
params :=strings.Split(string(data),"|")
err := handle.InitLocalWorkSpace(conn,params[0],params[1])
if err!=nil{
fmt.Println(err)
log.Println(err)
goto ERR
}

@@ -162,7 +161,7 @@ func SubscriptionFileChangeHandler(w http.ResponseWriter, r *http.Request){

if err != nil {
//报错了
fmt.Println(err)
log.Println(err)
goto ERR
}



Carregando…
Cancelar
Guardar