]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
Improve
authorqydysky <qydysky@foxmail.com>
Sun, 28 Jan 2024 09:16:53 +0000 (17:16 +0800)
committerqydysky <qydysky@foxmail.com>
Sun, 28 Jan 2024 09:16:53 +0000 (17:16 +0800)
.github/workflows/go.yml
.github/workflows/test.yml
CV/Var.go
Reply/F.go
Reply/stream.go
go.mod
go.sum

index a64d4d7dbb0b675e8992ed3a049642b4607771c1..cb4fb1e2c45b08f396f3b2ed7fa69baaba59ee30 100644 (file)
@@ -16,7 +16,7 @@ jobs:
         go: [ '1.21' ]
     steps:
     - name: Set up Go${{ matrix.go }}
-      uses: actions/setup-go@v4
+      uses: actions/setup-go@v5
       with:
         go-version: ${{ matrix.go }}
 
@@ -56,7 +56,7 @@ jobs:
         go: [ '1.21' ]
     steps:
     - name: Set up Go${{ matrix.go }}
-      uses: actions/setup-go@v4
+      uses: actions/setup-go@v5
       with:
         go-version: ${{ matrix.go }}
 
@@ -96,7 +96,7 @@ jobs:
         go: [ '1.21' ]
     steps:
     - name: Set up Go${{ matrix.go }}
-      uses: actions/setup-go@v4
+      uses: actions/setup-go@v5
       with:
         go-version: ${{ matrix.go }}
 
@@ -136,7 +136,7 @@ jobs:
         go: [ '1.21' ]
     steps:
     - name: Set up Go${{ matrix.go }}
-      uses: actions/setup-go@v4
+      uses: actions/setup-go@v5
       with:
         go-version: ${{ matrix.go }}
 
index de36d42cce17be87d8b41b1b06977255837f5a6a..40370952ed6435bb4fa921d060e0dabd834f8e1a 100644 (file)
@@ -19,7 +19,7 @@ jobs:
         go: [ '1.21' ]
     steps:
     - name: Set up Go${{ matrix.go }}
-      uses: actions/setup-go@v4
+      uses: actions/setup-go@v5
       with:
         go-version: ${{ matrix.go }}
 
@@ -59,7 +59,7 @@ jobs:
         go: [ '1.21' ]
     steps:
     - name: Set up Go${{ matrix.go }}
-      uses: actions/setup-go@v4
+      uses: actions/setup-go@v5
       with:
         go-version: ${{ matrix.go }}
 
@@ -98,7 +98,7 @@ jobs:
         go: [ '1.21' ]
     steps:
     - name: Set up Go${{ matrix.go }}
-      uses: actions/setup-go@v4
+      uses: actions/setup-go@v5
       with:
         go-version: ${{ matrix.go }}
 
@@ -136,7 +136,7 @@ jobs:
         go: [ '1.21' ]
     steps:
     - name: Set up Go${{ matrix.go }}
-      uses: actions/setup-go@v4
+      uses: actions/setup-go@v5
       with:
         go-version: ${{ matrix.go }}
 
index 4450d66aa033438895bb336f4862439b850f8a6e..08afa42338e0d45108f1a9415d90ca04fc48792c 100644 (file)
--- a/CV/Var.go
+++ b/CV/Var.go
@@ -260,26 +260,22 @@ func (t *Common) Init() *Common {
                        time.Sleep(time.Second * time.Duration(100))
                }
        }()
-
        t.ReqPool = pool.New(
-               func() *reqf.Req {
-                       // if pc, file, line, ok := runtime.Caller(2); ok {
-                       //      fmt.Printf("call by %s\n\t%s:%d\n", runtime.FuncForPC(pc).Name(), file, line)
-                       // }
-                       return reqf.New()
-               },
-               func(t *reqf.Req) bool {
-                       return t.IsLive()
-               },
-               func(t *reqf.Req) *reqf.Req {
-                       // if pc, file, line, ok := runtime.Caller(2); ok {
-                       //      fmt.Printf("call by %s\n\t%s:%d\n", runtime.FuncForPC(pc).Name(), file, line)
-                       // }
-                       return t
+               pool.PoolFunc[reqf.Req]{
+                       New: func() *reqf.Req {
+                               return reqf.New()
+                       },
+                       InUse: func(r *reqf.Req) bool {
+                               return r.IsLive()
+                       },
+                       Reuse: func(r *reqf.Req) *reqf.Req {
+                               return r
+                       },
+                       Pool: func(r *reqf.Req) *reqf.Req {
+                               return r
+                       },
                },
-               func(t *reqf.Req) *reqf.Req {
-                       return t
-               }, 100,
+               100,
        )
 
        var (
index 33cf6fac4d2e03620981db1c2f94ce2fde3d4e9d..3121f6bcb7c68bcd4af3db36e399711db115b453 100644 (file)
@@ -40,6 +40,7 @@ import (
        pio "github.com/qydysky/part/io"
        limit "github.com/qydysky/part/limit"
        msgq "github.com/qydysky/part/msgq"
+       slice "github.com/qydysky/part/slice"
        psync "github.com/qydysky/part/sync"
        pweb "github.com/qydysky/part/web"
        websocket "github.com/qydysky/part/websocket"
@@ -762,7 +763,7 @@ func Lessdanmuf(s string) (show bool) {
        } //完全无用
 
        Jiezouf(lessdanmu.buf)
-       lessdanmu.buf = append(lessdanmu.buf[1:], s)
+       slice.DelFront(&lessdanmu.buf, 1)
 
        show = o < lessdanmu.threshold
 
index 270d6f10a988815fbcef52955d2814c21507a169..19f7230f03c44e53ee54feab51d5ee2a68249324 100644 (file)
@@ -120,6 +120,32 @@ func (t *m4s_link_item) getNo() (int, error) {
        return strconv.Atoi(base[:len(base)-4])
 }
 
+func (link *m4s_link_item) download(reqPool *pool.Buf[reqf.Req], reqConfig reqf.Rval) {
+       link.status = 1 // 设置切片状态为正在下载
+       link.tryDownCount += 1
+
+       r := reqPool.Get()
+       defer reqPool.Put(r)
+       reqConfig.Url = link.Url
+
+       // fmt.Println(`T: `, `下载`, link.Base)
+       // defer t.log.L(`T: `, `下载完成`, link.Base, link.status, link.err)
+
+       if e := r.Reqf(reqConfig); e != nil && !errors.Is(e, io.EOF) {
+               // t.log.L(`T: `, `下载错误`, link.Base, e)
+               // if !reqf.IsTimeout(e) {
+               //      // 发生非超时错误
+               //      link.err = e
+               //      link.tryDownCount = 3 // 设置切片状态为下载失败
+               // }
+               link.status = 3 // 设置切片状态为下载失败
+       } else {
+               link.data.Reset()
+               _ = link.data.Append(r.Respon)
+               link.status = 2 // 设置切片状态为下载完成
+       }
+}
+
 func (t *M4SStream) getM4s() (p *m4s_link_item) {
        return t.m4s_pool.Get()
 }
@@ -451,7 +477,7 @@ func (t *M4SStream) fetchParseM3U8(fmp4ListUpdateTo float64) (m4s_links []*m4s_l
                                } else if no == last_no {
                                        // 只返回新增加的切片,去掉无用切片
                                        t.putM4s(m4s_links[:k+1]...)
-                                       m4s_links = m4s_links[k+1:]
+                                       slice.DelFront(&m4s_links, k+1)
                                        // 只返回新增加的m3u8_addon字节
                                        if index := bytes.Index(m3u8_addon, []byte(m4s_link.Base)); index != -1 {
                                                index += len([]byte(m4s_link.Base))
@@ -490,7 +516,7 @@ func (t *M4SStream) fetchParseM3U8(fmp4ListUpdateTo float64) (m4s_links []*m4s_l
                        //获取切片地址
                        p.Url = F.ResolveReferenceLast(v.Url, p.Base)
                        p.createdTime = time.Now()
-                       m4s_links = append([]*m4s_link_item{p}, m4s_links...)
+                       slice.AddFront(&m4s_links, p)
                }
 
                // 请求解析成功,退出获取循环
@@ -857,16 +883,14 @@ func (t *M4SStream) saveStreamM4s() (e error) {
        var download_limit = &funcCtrl.BlockFuncN{Max: 3}
 
        if v, ok := t.common.K_v.LoadV(`debug模式`).(bool); ok && v {
-               ctx, can := context.WithCancel(context.Background())
-               defer can()
+               cancle := make(chan struct{})
+               defer close(cancle)
                go func() {
-                       ticker := time.NewTicker(time.Minute)
-                       defer ticker.Stop()
                        for {
                                select {
-                               case <-ctx.Done():
+                               case <-cancle:
                                        return
-                               case <-ticker.C:
+                               case <-time.After(time.Minute):
                                }
                                reqState := t.m4s_pool.State()
                                t.log.L(`T: `, fmt.Sprintf("m4sPoolState pooled/no(%d/%d), inuse/no(%d/%d), sum(%d), qts(%.2f)",
@@ -949,37 +973,14 @@ func (t *M4SStream) saveStreamM4s() (e error) {
                                go func(link *m4s_link_item) {
                                        defer download_limit.UnBlock()
 
-                                       link.status = 1 // 设置切片状态为正在下载
-                                       link.tryDownCount += 1
-
-                                       r := t.reqPool.Get()
-                                       defer t.reqPool.Put(r)
-                                       reqConfig := reqf.Rval{
-                                               Url:         link.Url,
+                                       link.download(t.reqPool, reqf.Rval{
                                                Timeout:     to * 1000,
                                                WriteLoopTO: (to + 2) * 1000,
                                                Proxy:       t.common.Proxy,
                                                Header: map[string]string{
                                                        `Connection`: `close`,
                                                },
-                                       }
-
-                                       // t.log.L(`T: `, `下载`, link.Base)
-                                       // defer t.log.L(`T: `, `下载完成`, link.Base, link.status, link.err)
-
-                                       if e := r.Reqf(reqConfig); e != nil && !errors.Is(e, io.EOF) {
-                                               // t.log.L(`T: `, `下载错误`, link.Base, e)
-                                               // if !reqf.IsTimeout(e) {
-                                               //      // 发生非超时错误
-                                               //      link.err = e
-                                               //      link.tryDownCount = 3 // 设置切片状态为下载失败
-                                               // }
-                                               link.status = 3 // 设置切片状态为下载失败
-                                       } else {
-                                               link.data.Reset()
-                                               _ = link.data.Append(r.Respon)
-                                               link.status = 2 // 设置切片状态为下载完成
-                                       }
+                                       })
                                }(v)
                        }
 
@@ -1200,20 +1201,22 @@ func (t *M4SStream) Start() bool {
 
                // 初始化池
                t.m4s_pool = pool.New(
-                       func() *m4s_link_item {
-                               return &m4s_link_item{
-                                       data: slice.New[byte](),
-                               }
-                       },
-                       func(t *m4s_link_item) bool {
-                               return t.createdTime.After(t.pooledTime) || time.Now().Before(t.pooledTime.Add(time.Second*10))
-                       },
-                       func(t *m4s_link_item) *m4s_link_item {
-                               return t.reset()
-                       },
-                       func(t *m4s_link_item) *m4s_link_item {
-                               t.pooledTime = time.Now()
-                               return t
+                       pool.PoolFunc[m4s_link_item]{
+                               New: func() *m4s_link_item {
+                                       return &m4s_link_item{
+                                               data: slice.New[byte](),
+                                       }
+                               },
+                               InUse: func(t *m4s_link_item) bool {
+                                       return t.createdTime.After(t.pooledTime) || time.Now().Before(t.pooledTime.Add(time.Second*10))
+                               },
+                               Reuse: func(t *m4s_link_item) *m4s_link_item {
+                                       return t.reset()
+                               },
+                               Pool: func(t *m4s_link_item) *m4s_link_item {
+                                       t.pooledTime = time.Now()
+                                       return t
+                               },
                        },
                        50,
                )
diff --git a/go.mod b/go.mod
index 2c152f3602c7186e30db181b6ef0118b436d036a..a6a8c3191603a40872bcaf5b7e2dc190c173be8f 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -5,7 +5,7 @@ go 1.21
 require (
        github.com/gotk3/gotk3 v0.6.2
        github.com/mdp/qrterminal/v3 v3.2.0
-       github.com/qydysky/part v0.28.20240121080746
+       github.com/qydysky/part v0.28.20240128090105
        github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
        github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
        golang.org/x/text v0.14.0
diff --git a/go.sum b/go.sum
index dfb269dd57cfaf2c8047bb61a1e5e8c07f868c9f..370ea9c97c95b7434359ecc31be50597d8c89643 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -35,8 +35,8 @@ github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4=
 github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/qydysky/part v0.28.20240121080746 h1:UP+d1R9oD0/SN32FUk4/V+2bQbOICv/8rxQ6FRtZT0c=
-github.com/qydysky/part v0.28.20240121080746/go.mod h1:NyKyjpBCSjcHtKlC+fL5lCidm57UCnwEgufiBDs5yxA=
+github.com/qydysky/part v0.28.20240128090105 h1:gQWyMZN1yzK5dE9S8I8w0pb3FleNFbqXb6r1UeYrP6g=
+github.com/qydysky/part v0.28.20240128090105/go.mod h1:NyKyjpBCSjcHtKlC+fL5lCidm57UCnwEgufiBDs5yxA=
 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
 github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
 github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI=