From c718ae2a200a491d31d650cf42efc83b9202d11a Mon Sep 17 00:00:00 2001 From: qydysky Date: Mon, 14 Sep 2020 21:20:32 +0800 Subject: [PATCH] 2 --- Msg.go | 1 + README.md | 1 + api.go | 12 ++++++------ bili_danmu.go | 33 ++++++++++++++++++--------------- demo/go.mod | 4 ++++ demo/go.sum | 44 ++++++++++++++++++++++++++++++++++++++++++++ ws.go | 23 +++++++++++------------ 7 files changed, 85 insertions(+), 33 deletions(-) create mode 100644 README.md create mode 100644 demo/go.sum diff --git a/Msg.go b/Msg.go index 68cab72..307adac 100644 --- 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 index 0000000..8d1c8b6 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ + diff --git a/api.go b/api.go index df66c68..2f7e1d1 100644 --- 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 diff --git a/bili_danmu.go b/bili_danmu.go index 6cac1f5..8a22da1 100644 --- a/bili_danmu.go +++ b/bili_danmu.go @@ -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 == "" { diff --git a/demo/go.mod b/demo/go.mod index 9cdf95b..60f6127 100644 --- a/demo/go.mod +++ b/demo/go.mod @@ -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 index 0000000..1b470f6 --- /dev/null +++ b/demo/go.sum @@ -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 ddd0ae3..bf3b682 100644 --- 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) -- 2.39.2