Browse Source

Fix initial traffic value

世界 10 months ago
parent
commit
1e787cb607
2 changed files with 17 additions and 21 deletions
  1. 7 9
      experimental/clashapi/server.go
  2. 10 12
      experimental/libbox/command_status.go

+ 7 - 9
experimental/clashapi/server.go

@@ -316,18 +316,15 @@ func traffic(trafficManager *trafficontrol.Manager) func(w http.ResponseWriter,
 		tick := time.NewTicker(time.Second)
 		defer tick.Stop()
 		buf := &bytes.Buffer{}
-		var (
-			uploadTotal   int64
-			doanloadTotal int64
-			err           error
-		)
+		uploadTotal, downloadTotal := trafficManager.Total()
 		for range tick.C {
 			buf.Reset()
 			uploadTotalNew, downloadTotalNew := trafficManager.Total()
-			if err := json.NewEncoder(buf).Encode(Traffic{
+			err := json.NewEncoder(buf).Encode(Traffic{
 				Up:   uploadTotalNew - uploadTotal,
-				Down: downloadTotalNew - doanloadTotal,
-			}); err != nil {
+				Down: downloadTotalNew - downloadTotal,
+			})
+			if err != nil {
 				break
 			}
 			if conn == nil {
@@ -339,8 +336,9 @@ func traffic(trafficManager *trafficontrol.Manager) func(w http.ResponseWriter,
 			if err != nil {
 				break
 			}
+
 			uploadTotal = uploadTotalNew
-			doanloadTotal = downloadTotalNew
+			downloadTotal = downloadTotalNew
 		}
 	}
 }

+ 10 - 12
experimental/libbox/command_status.go

@@ -51,19 +51,10 @@ func (s *CommandServer) handleStatusConn(conn net.Conn) error {
 	ticker := time.NewTicker(time.Duration(interval))
 	defer ticker.Stop()
 	ctx := connKeepAlive(conn)
-	var (
-		status        StatusMessage
-		uploadTotal   int64
-		downloadTotal int64
-	)
+	status := s.readStatus()
+	uploadTotal := status.UplinkTotal
+	downloadTotal := status.DownlinkTotal
 	for {
-		status = s.readStatus()
-		upload := status.UplinkTotal - uploadTotal
-		download := status.DownlinkTotal - downloadTotal
-		uploadTotal = status.UplinkTotal
-		downloadTotal = status.DownlinkTotal
-		status.Uplink = upload
-		status.Downlink = download
 		err = binary.Write(conn, binary.BigEndian, status)
 		if err != nil {
 			return err
@@ -73,6 +64,13 @@ func (s *CommandServer) handleStatusConn(conn net.Conn) error {
 			return ctx.Err()
 		case <-ticker.C:
 		}
+		status = s.readStatus()
+		upload := status.UplinkTotal - uploadTotal
+		download := status.DownlinkTotal - downloadTotal
+		uploadTotal = status.UplinkTotal
+		downloadTotal = status.DownlinkTotal
+		status.Uplink = upload
+		status.Downlink = download
 	}
 }