]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
2
authorqydysky <qydysky@foxmail.com>
Mon, 14 Sep 2020 13:20:32 +0000 (21:20 +0800)
committerqydysky <qydysky@foxmail.com>
Mon, 14 Sep 2020 13:20:32 +0000 (21:20 +0800)
Msg.go
README.md [new file with mode: 0644]
api.go
bili_danmu.go
demo/go.mod
demo/go.sum [new file with mode: 0644]
ws.go

diff --git a/Msg.go b/Msg.go
index 68cab72f9cdd85bcd567594408c82e8727211c34..307adac767fca8c5926f82709dc11e5ef033dca6 100644 (file)
--- a/Msg.go
+++ b/Msg.go
@@ -39,6 +39,7 @@ func Msg(b []byte, compress bool) {
                        return
                } else {
                        switch cmd.(string) {
+                       case "COMBO_SEND":;
                        case "INTERACT_WORD":;
                        case "ACTIVITY_BANNER_UPDATE_V2":;
                        case "SEND_GIFT":;//礼物
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..8d1c8b6
--- /dev/null
+++ b/README.md
@@ -0,0 +1 @@
diff --git a/api.go b/api.go
index df66c6845d05ea311c80a3456bf86fa0f3963e35..2f7e1d1483183c1bba60d9d4571f09b50675a34c 100644 (file)
--- a/api.go
+++ b/api.go
@@ -14,10 +14,10 @@ type api struct {
 }
 
 func New_api(Roomid int) (o *api) {
-       l := p.Logf().New().Level(LogLevel).I("New_api")
+       l := p.Logf().New().Level(LogLevel).T("New_api")
        defer l.Block()
 
-       l.I("->", "ok")
+       l.T("->", "ok")
        o = new(api)
        o.Roomid = Roomid
        o.Get_info()
@@ -27,7 +27,7 @@ func New_api(Roomid int) (o *api) {
 
 func (i *api) Get_info() (o *api) {
        o = i 
-       l := p.Logf().New().Level(LogLevel).I("*api.Get_info")
+       l := p.Logf().New().Level(LogLevel).T("*api.Get_info")
        defer l.Block()
 
        if o.Roomid == 0 {
@@ -62,7 +62,7 @@ func (i *api) Get_info() (o *api) {
                l.E("->", "data.room_id", room_id)
                return
        } else {
-               l.I("->", "ok")
+               l.T("->", "ok")
                o.Roomid = int(room_id.(float64))
        }
        return
@@ -70,7 +70,7 @@ func (i *api) Get_info() (o *api) {
 
 func (i *api) Get_host_Token() (o *api) {
        o = i
-       l := p.Logf().New().Level(LogLevel).I("*api.Get_host_Token")
+       l := p.Logf().New().Level(LogLevel).T("*api.Get_host_Token")
        defer l.Block()
 
        if o.Roomid == 0 {
@@ -115,7 +115,7 @@ func (i *api) Get_host_Token() (o *api) {
                                o.Url = append(o.Url, "wss://" + _host.(string) + "/sub")
                        }                       
                }
-               l.I("->", "ok")
+               l.T("->", "ok")
        }
 
        return
index 6cac1f56c13268f3d5f5374029d736a4e3d3a558..8a22da18d8da7dd98e0f8f46438c4086842215e2 100644 (file)
@@ -10,7 +10,7 @@ import (
        p "github.com/qydysky/part"
 )
 
-const LogLevel = 3
+const LogLevel = 1
 
 func Demo() {
        l:=p.Logf().New().Level(LogLevel)
@@ -42,11 +42,6 @@ func Demo() {
                        for _, v := range api.Url {
                                //ws启动
                                ws := New_ws(v).Handle()
-                               go func(){
-                                       <- interrupt
-                                       ws.Close()
-                                       break_sign = true
-                               }()
        
                                //SendChan 传入发送[]byte
                                //RecvChan 接收[]byte
@@ -63,13 +58,21 @@ func Demo() {
                                        }()
                                }
        
-                               for {
-                                       i := <- ws.RecvChan
-                                       if len(i) == 0 && ws.Isclose() {
-                                               break
-                                       } else {
-                                               go Reply(i)
+                               var isclose bool
+                               for !isclose {
+                                       select {
+                                       case i := <- ws.RecvChan:
+                                               if len(i) == 0 && ws.Isclose() {
+                                                       isclose = true
+                                               } else {
+                                                       go Reply(i)
+                                               }
+                                       case <- interrupt:
+                                               ws.Close()
+                                               isclose = true
+                                               break_sign = true
                                        }
+
                                }
 
                                if break_sign {break}
@@ -107,11 +110,11 @@ func Reply(b []byte) {
        }
 
        if ist, _ := headChe(b[:16], len(b), WS_HEADER_DEFAULT_VERSION, WS_OP_HEARTBEAT_REPLY, WS_HEADER_DEFAULT_SEQUENCE, 4); ist {
-               l.I("heartbeat replay!");
+               l.T("heartbeat replay!");
                return
        }
 
-       l.I("unknow reply", b)
+       l.T("unknow reply", b)
 }
 
 //头部生成与检查
@@ -149,7 +152,7 @@ func headChe(head []byte, datalenght,Bodyv,Opeation,Sequence,show int) (bool,int
 
 //认证生成与检查
 func hello_send(roomid int, key string) []byte {
-       l := p.Logf().New().Level(LogLevel).I("hello_ws")
+       l := p.Logf().New().Level(LogLevel).T("hello_ws")
        defer l.Block()
 
        if roomid == 0 || key == "" {
index 9cdf95b17855718616027aeca4e69b1a1bafc2e5..60f6127fe7d656d5e22696e71b230967e2230449 100644 (file)
@@ -1,3 +1,7 @@
 module github.com/qydysky/bili_danmu/demo
 
 go 1.14
+
+require github.com/qydysky/bili_danmu v0.0.0-20200914124700-b89028b3554c // indirect
+
+replace github.com/qydysky/bili_danmu => ../
\ No newline at end of file
diff --git a/demo/go.sum b/demo/go.sum
new file mode 100644 (file)
index 0000000..1b470f6
--- /dev/null
@@ -0,0 +1,44 @@
+github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
+github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
+github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
+github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
+github.com/klauspost/compress v1.10.10/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
+github.com/klauspost/compress v1.11.0 h1:wJbzvpYMVGG9iTI9VxpnNZfd4DzMPoCWze3GgSqz8yg=
+github.com/klauspost/compress v1.11.0/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
+github.com/miekg/dns v1.1.31 h1:sJFOl9BgwbYAWOGEwr61FU28pqsBNdpRBnhGXtO06Oo=
+github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
+github.com/qydysky/bili_danmu v0.0.0-20200914124700-b89028b3554c h1:iFyG6L41DwT1CS16Ddi2/vjnnKLfL0TC6L6BuYcPnSo=
+github.com/qydysky/bili_danmu v0.0.0-20200914124700-b89028b3554c/go.mod h1:hejetn5M5YL0dZpEBtswTWEOwS9Rq8eRiN3SFco3JXA=
+github.com/qydysky/part v0.0.0-20200914123330-afade058e33d h1:um1WzsGzwD6h+1W3jqGcWJPVr4kT5gmRRaXXVwO7nb4=
+github.com/qydysky/part v0.0.0-20200914123330-afade058e33d/go.mod h1:+8N3UgJBVyJj8ar31eZtucwrKpLpay854Y5qq0xk3x0=
+github.com/shirou/gopsutil v2.20.7+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
+github.com/shirou/gopsutil v2.20.8+incompatible h1:8c7Atn0FAUZJo+f4wYbN0iVpdWniCQk7IYwGtgdh1mY=
+github.com/shirou/gopsutil v2.20.8+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
+github.com/thedevsaddam/gojsonq v2.3.0+incompatible h1:i2lFTvGY4LvoZ2VUzedsFlRiyaWcJm3Uh6cQ9+HyQA8=
+github.com/thedevsaddam/gojsonq v2.3.0+incompatible/go.mod h1:RBcQaITThgJAAYKH7FNp2onYodRz8URfsuEGpAch0NA=
+github.com/thedevsaddam/gojsonq/v2 v2.5.2 h1:CoMVaYyKFsVj6TjU6APqAhAvC07hTI6IQen8PHzHYY0=
+github.com/thedevsaddam/gojsonq/v2 v2.5.2/go.mod h1:bv6Xa7kWy82uT0LnXPE2SzGqTj33TAEeR560MdJkiXs=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a h1:vclmkQCjlDX5OydZ9wv8rBCcS0QyQY66Mpf/7BZbInM=
+golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/net v0.0.0-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOLoaCHjYEX3qkRo3YBUA=
+golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200909081042-eff7692f9009 h1:W0lCpv29Hv0UaM1LXb9QlBHLNP8UFfcKjblhVCWftOM=
+golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
+golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
diff --git a/ws.go b/ws.go
index ddd0ae30de9bc4bfb117bffd3e87e76de31c3671..bf3b6826bdce70079af832903696f16d7e650fb1 100644 (file)
--- a/ws.go
+++ b/ws.go
@@ -18,10 +18,10 @@ type ws struct {
 }
 
 func New_ws(url string) (o *ws) {
-       l := p.Logf().New().Level(LogLevel).I("New_ws")
+       l := p.Logf().New().Level(LogLevel).T("New_ws")
        defer l.Block()
 
-       l.I("->", "ok")
+       l.T("->", "ok")
        o = new(ws)
        o.url = url
        o.SendChan = make(chan []byte, 1e4)
@@ -31,7 +31,7 @@ func New_ws(url string) (o *ws) {
 
 func (i *ws) Handle() (o *ws) {
        o = i
-       l := p.Logf().New().Level(LogLevel).I("*ws.handle")
+       l := p.Logf().New().Level(LogLevel).T("*ws.handle")
        defer l.Block()
 
        if o.used {
@@ -47,7 +47,10 @@ func (i *ws) Handle() (o *ws) {
        started := make(chan struct{})
 
        go func() {
-               defer close(o.RecvChan)
+               defer func(){
+                       close(o.RecvChan)
+                       o.used = false
+               }()
 
                c, _, err := websocket.DefaultDialer.Dial(o.url, nil)
                if err != nil {
@@ -56,7 +59,7 @@ func (i *ws) Handle() (o *ws) {
                }
                defer c.Close()
 
-               l.I("->", "ok")
+               l.T("->", "ok")
                o.interrupt = make(chan struct{})
                done := make(chan struct{})
 
@@ -69,7 +72,6 @@ func (i *ws) Handle() (o *ws) {
                                        if !websocket.IsCloseError(err, websocket.CloseNormalClosure) {
                                                l.E("->", err)
                                        }
-                                       o.used = false
                                        return
                                }
                                o.RecvChan <- message
@@ -81,13 +83,11 @@ func (i *ws) Handle() (o *ws) {
                for {
                        select {
                        case <- done:
-                               o.used = false
                                return
                        case t := <- o.SendChan:
                                err := c.WriteMessage(websocket.TextMessage, t)
                                if err != nil {
-                                       l.I("->", "write:", err)
-                                       o.used = false
+                                       l.E("->", "write:", err)
                                        return
                                }
                        case <- o.interrupt:
@@ -102,7 +102,6 @@ func (i *ws) Handle() (o *ws) {
                                case <- done:
                                case <- time.After(time.Second):
                                }
-                               o.used = false
                                return
                        }
                }
@@ -115,7 +114,7 @@ func (i *ws) Handle() (o *ws) {
 
 func (i *ws) Heartbeat(Millisecond int, msg []byte) (o *ws) {
        o = i
-       l := p.Logf().New().Level(LogLevel).I("*ws.heartbeat")
+       l := p.Logf().New().Level(LogLevel).T("*ws.heartbeat")
        defer l.Block()
 
        if !o.used {
@@ -123,7 +122,7 @@ func (i *ws) Heartbeat(Millisecond int, msg []byte) (o *ws) {
                return
        }
        o.SendChan <- msg
-       l.I("->", "ok")
+       l.T("->", "ok")
 
        go func(){
                ticker := time.NewTicker(time.Duration(Millisecond)*time.Millisecond)