return
} else {
switch cmd.(string) {
+ case "COMBO_SEND":;
case "INTERACT_WORD":;
case "ACTIVITY_BANNER_UPDATE_V2":;
case "SEND_GIFT":;//礼物
}
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()
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 {
l.E("->", "data.room_id", room_id)
return
} else {
- l.I("->", "ok")
+ l.T("->", "ok")
o.Roomid = int(room_id.(float64))
}
return
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 {
o.Url = append(o.Url, "wss://" + _host.(string) + "/sub")
}
}
- l.I("->", "ok")
+ l.T("->", "ok")
}
return
p "github.com/qydysky/part"
)
-const LogLevel = 3
+const LogLevel = 1
func Demo() {
l:=p.Logf().New().Level(LogLevel)
for _, v := range api.Url {
//ws启动
ws := New_ws(v).Handle()
- go func(){
- <- interrupt
- ws.Close()
- break_sign = true
- }()
//SendChan 传入发送[]byte
//RecvChan 接收[]byte
}()
}
- 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}
}
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)
}
//头部生成与检查
//认证生成与检查
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 == "" {
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
--- /dev/null
+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=
}
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)
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 {
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 {
}
defer c.Close()
- l.I("->", "ok")
+ l.T("->", "ok")
o.interrupt = make(chan struct{})
done := make(chan struct{})
if !websocket.IsCloseError(err, websocket.CloseNormalClosure) {
l.E("->", err)
}
- o.used = false
return
}
o.RecvChan <- message
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:
case <- done:
case <- time.After(time.Second):
}
- o.used = false
return
}
}
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 {
return
}
o.SendChan <- msg
- l.I("->", "ok")
+ l.T("->", "ok")
go func(){
ticker := time.NewTicker(time.Duration(Millisecond)*time.Millisecond)