From 93da66d3a49ef731408894465e9e785373be6b6a Mon Sep 17 00:00:00 2001 From: qydysky Date: Tue, 22 Dec 2020 21:05:25 +0800 Subject: [PATCH] =?utf8?q?=E4=BD=BF=E7=94=A8=E5=B8=A6tag=E7=9A=84=E6=B6=88?= =?utf8?q?=E6=81=AF=E9=98=9F=E5=88=97=E5=9C=A8=E5=8A=9F=E8=83=BD=E9=97=B4?= =?utf8?q?=E4=BC=A0=E9=80=92=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- F/api.go | 8 ++--- Reply/Reply.go | 80 +++++++++++++----------------------------- Reply/gtk.go | 23 +++++------- Reply/tts.go | 38 ++++++++------------ bili_danmu.go | 95 +++++++++++++++++++++----------------------------- demo/go.mod | 2 +- demo/go.sum | 2 ++ 7 files changed, 92 insertions(+), 156 deletions(-) diff --git a/F/api.go b/F/api.go index e186ab6..e88b66f 100644 --- a/F/api.go +++ b/F/api.go @@ -463,10 +463,8 @@ func (i *api) Get_OnlineGoldRank() { score += v.(float64)/10 } } - c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{//传入消息队列 - Class:`c.Rev_add`, - Data:score, - }) + //传入消息队列 + c.Danmu_Main_mq.Push_tag(`c.Rev_add`,score) if rank_list := p.Json().GetArrayFrom(p.Json().GetValFromS(res, "data.OnlineRankItem"), "userRank");rank_list == nil { apilog.Base(1, "获取 rank_list").E("rank_list", len(rank_list)) @@ -594,7 +592,7 @@ func (i *api) Get_Version() { } } -func (i *api) Get_cookie() { +func Get_cookie() { if api_limit.TO() {return}//超额请求阻塞,超时将取消 var img_url string diff --git a/Reply/Reply.go b/Reply/Reply.go index 44e0000..b520a8d 100644 --- a/Reply/Reply.go +++ b/Reply/Reply.go @@ -67,12 +67,9 @@ func (replyF) interact_word(s string){ uname := p.Json().GetValFromS(s, "data.uname"); if v,ok := uname.(string);ok { {//语言tts - c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{ - Class:`tts`, - Data:Danmu_mq_t{ - uid:`0follow`, - msg:fmt.Sprint(v + `关注了直播间`), - }, + c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{ + uid:`0follow`, + msg:fmt.Sprint(v + `关注了直播间`), }) } Gui_show(v + `关注了直播间`,`0follow`) @@ -170,25 +167,17 @@ func (replyF) user_toast_msg(s string){ } if price != nil { sh_log = append(sh, "¥", int(price.(float64)) / 1000)//不在界面显示价格 - c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{//传入消息队列 - Class:`c.Rev_add`, - Data:price.(float64) / 1000, - }) + c.Danmu_Main_mq.Push_tag(`c.Rev_add`,price.(float64) / 1000) } {//语言tts - c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{ - Class:`tts`, - Data:Danmu_mq_t{ - uid:`0buyguide`, - msg:fmt.Sprint(sh...), - }, + c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{//传入消息队列 + uid:`0buyguide`, + msg:fmt.Sprint(sh...), }) } {//额外 ass Assf(fmt.Sprintln(sh...)) - c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{//使用连续付费的新舰长无法区分,刷新舰长数 - Class:`guard_update`, - }) + c.Danmu_Main_mq.Push_tag(`guard_update`,nil)//使用连续付费的新舰长无法区分,刷新舰长数 } fmt.Println("\n====") fmt.Println(sh...) @@ -203,10 +192,7 @@ func (replyF) user_toast_msg(s string){ //HeartBeat-心跳用来传递人气值 func (replyF) heartbeat(s int){ - c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{ - Class:`c.Renqi`, - Data:s, - }) + c.Danmu_Main_mq.Push_tag(`c.Renqi`,s)//使用连续付费的新舰长无法区分,刷新舰长数 if s == 1 {return}//人气为1,不输出 heartlog.I("当前人气", s) } @@ -321,12 +307,9 @@ func (replyF) welcome_guard(s string){ sh = append(sh, username, "进入直播间") } {//语言tts - c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{ - Class:`tts`, - Data:Danmu_mq_t{ - uid:img, - msg:fmt.Sprintln(sh...), - }, + c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{//传入消息队列 + uid:img, + msg:fmt.Sprintln(sh...), }) } fmt.Print(">>> ") @@ -366,10 +349,7 @@ func (replyF) send_gift(s string){ if total_coin != nil { allprice = total_coin.(float64) / 1000 sh_log = append(sh, fmt.Sprintf("¥%.1f",allprice))//不在界面显示价格 - c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{//传入消息队列 - Class:`c.Rev_add`, - Data:allprice, - }) + c.Danmu_Main_mq.Push_tag(`c.Rev_add`,allprice) } if len(sh) == 0 {return} @@ -378,12 +358,9 @@ func (replyF) send_gift(s string){ //小于3万金瓜子 if allprice < 30 {msglog.T(sh...);return} {//语言tts - c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{ - Class:`tts`, - Data:Danmu_mq_t{ - uid:`0gift`, - msg:fmt.Sprintln(sh...), - }, + c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{//传入消息队列 + uid:`0gift`, + msg:fmt.Sprintln(sh...), }) } {//额外 @@ -491,10 +468,7 @@ func (replyF) super_chat_message(s string){ if price != nil { sh = append(sh, "\n")//界面不显示价格 logg = append(logg, "¥", price) - c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{//传入消息队列 - Class:`c.Rev_add`, - Data:price.(float64), - }) + c.Danmu_Main_mq.Push_tag(`c.Rev_add`,price.(float64)) } fmt.Println("====") fmt.Println(sh...) @@ -506,12 +480,9 @@ func (replyF) super_chat_message(s string){ logg = append(logg, message) } {//语言tts - c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{ - Class:`tts`, - Data:Danmu_mq_t{ - uid:`0superchat`, - msg:fmt.Sprintln(sh...), - }, + c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{//传入消息队列 + uid:`0superchat`, + msg:fmt.Sprintln(sh...), }) } if message_jpn != nil && message.(string) != message_jpn.(string) && message_jpn.(string) != "" { @@ -654,12 +625,9 @@ func Msg_showdanmu(auth interface{}, m ...string) { } {//语言tts if len(m) > 1 { - c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{ - Class:`tts`, - Data:Danmu_mq_t{ - uid:m[1], - msg:msg, - }, + c.Danmu_Main_mq.Push_tag(`tts`,Danmu_mq_t{//传入消息队列 + uid:m[1], + msg:msg, }) } } @@ -678,7 +646,7 @@ func Gui_show(m ...string){ uid := "" if len(m) > 1 {uid = m[1]} - Danmu_mq.Push(Danmu_mq_t{ + Danmu_mq.Push_tag(`danmu`,Danmu_mq_t{ uid:uid, msg:m[0], }) diff --git a/Reply/gtk.go b/Reply/gtk.go index b98100c..1287efc 100644 --- a/Reply/gtk.go +++ b/Reply/gtk.go @@ -66,18 +66,15 @@ var ( func init(){ if!IsOn("Gtk") {return} - go func(){ - go Gtk_danmu() - var ( - sig = Danmu_mq.Sig() - data interface{} - ) - for { - data,sig = Danmu_mq.Pull(sig) - Gtk_danmuChan_uid <- data.(Danmu_mq_t).uid + go Gtk_danmu() + //使用带tag的消息队列在功能间传递消息 + Danmu_mq.Pull_tag(map[string]func(interface{})(bool){ + `danmu`:func(data interface{})(bool){//弹幕 + Gtk_danmuChan_uid <- data.(Danmu_mq_t).uid Gtk_danmuChan <- data.(Danmu_mq_t).msg - } - }() + return false + }, + }) } func Gtk_danmu() { @@ -245,9 +242,7 @@ func Gtk_danmu() { y(`输入错误`,load_face("0room")) } else { c.Roomid = i - c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{ - Class:`change_room`, - }) + c.Danmu_Main_mq.Push_tag(`change_room`,nil) } } else { y(`房间号输入为空`,load_face("0room")) diff --git a/Reply/tts.go b/Reply/tts.go index a7c3052..5fb5926 100644 --- a/Reply/tts.go +++ b/Reply/tts.go @@ -29,32 +29,22 @@ func init(){ } } go func(){ - go func(){ - for{ - e := <- tts_List - TTS(e.(Danmu_mq_t).uid, e.(Danmu_mq_t).msg) - } - }() - - //消息队列接收tts类消息,并传送到TTS朗读 - var ( - sig = c.Danmu_Main_mq.Sig() - data interface{} - ) - for { - data,sig = c.Danmu_Main_mq.Pull(sig) - if d,ok := data.(c.Danmu_Main_mq_item);!ok { - continue - } else { - switch d.Class { - case `tts`: - if _,ok := tts_setting[d.Data.(Danmu_mq_t).uid];!ok {continue} - tts_List <- d.Data - default: - } - } + for{ + e := <- tts_List + TTS(e.(Danmu_mq_t).uid, e.(Danmu_mq_t).msg) } }() + + //消息队列接收tts类消息,并传送到TTS朗读 + //使用带tag的消息队列在功能间传递消息 + c.Danmu_Main_mq.Pull_tag(map[string]func(interface{})(bool){ + `tts`:func(data interface{})(bool){//tts + if _,ok := tts_setting[data.(Danmu_mq_t).uid];ok { + tts_List <- data + } + return false + }, + }) } diff --git a/bili_danmu.go b/bili_danmu.go index cecabd5..f5ca8d4 100644 --- a/bili_danmu.go +++ b/bili_danmu.go @@ -59,38 +59,31 @@ func Demo(roomid ...int) { change_room_chan <- true } }() - - go func(){ - var ( - sig = c.Danmu_Main_mq.Sig() - data interface{} - ) - for { - data,sig = c.Danmu_Main_mq.Pull(sig) - if d,ok := data.(c.Danmu_Main_mq_item);!ok { - continue - } else { - switch d.Class { - case `change_room`: - c.Rev = 0.0 //营收 - c.Renqi = 1//人气置1 - c.GuardNum = 0//舰长数 - c.Note = ``//分区排行 - c.Uname = ``//主播id - c.Title = `` - reply.Saveflv_wait()//停止保存直播流 - change_room_chan <- true - case `c.Rev_add`: - c.Rev += d.Data.(float64) - case `c.Renqi`: - if tmp,ok := d.Data.(int);ok{ - c.Renqi = tmp - } - default: - } + + //使用带tag的消息队列在功能间传递消息 + c.Danmu_Main_mq.Pull_tag(map[string]func(interface{})(bool){ + `change_room`:func(data interface{})(bool){//房间改变 + c.Rev = 0.0 //营收 + c.Renqi = 1//人气置1 + c.GuardNum = 0//舰长数 + c.Note = ``//分区排行 + c.Uname = ``//主播id + c.Title = `` + reply.Saveflv_wait()//停止保存直播流 + change_room_chan <- true + return false + }, + `c.Rev_add`:func(data interface{})(bool){//收入 + c.Rev += data.(float64) + return false + }, + `c.Renqi`:func(data interface{})(bool){//人气更新 + if tmp,ok := data.(int);ok{ + c.Renqi = tmp } - } - }() + return false + }, + }) <-change_room_chan @@ -112,12 +105,11 @@ func Demo(roomid ...int) { } else { danmulog.I("未检测到cookie.txt,如果需要登录请在本机打开以下网址扫码登录,不需要请忽略") go func(){//获取cookie - F.New_api(c.Roomid).Get_cookie() + F.Get_cookie() if c.Cookie != `` { danmulog.I("你已登录,刷新房间!") - c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{//刷新 - Class:`change_room`, - }) + //刷新 + c.Danmu_Main_mq.Push_tag(`change_room`,nil) } }() p.Sys().Timeoutf(3) @@ -191,27 +183,18 @@ func Demo(roomid ...int) { //获取过往营收 舰长数量 // go api.Get_OnlineGoldRank()//高能榜显示的是在线观众的打赏 - go func(){//订阅消息,以便刷新舰长数 - api.Get_guardNum() - var ( - sig = c.Danmu_Main_mq.Sig() - data interface{} - ) - for { - data,sig = c.Danmu_Main_mq.Pull(sig) - if d,ok := data.(c.Danmu_Main_mq_item);!ok { - continue - } else { - switch d.Class { - case `guard_update`: - go api.Get_guardNum() - case `change_room`: - return//换房时退出当前房间 - default: - } - } - } - }() + //订阅消息,以便刷新舰长数 + api.Get_guardNum() + //使用带tag的消息队列在功能间传递消息 + c.Danmu_Main_mq.Pull_tag(map[string]func(interface{})(bool){ + `guard_update`:func(data interface{})(bool){//舰长更新 + go api.Get_guardNum() + return false + }, + `change_room`:func(data interface{})(bool){//换房时退出当前房间 + return true + }, + }) if c.Cookie != `` {//附加功能 弹幕机 无cookie无法发送弹幕 reply.Danmuji_auto(1) diff --git a/demo/go.mod b/demo/go.mod index cdfab1e..b269312 100644 --- a/demo/go.mod +++ b/demo/go.mod @@ -10,7 +10,7 @@ require ( github.com/miekg/dns v1.1.35 // indirect github.com/mitchellh/mapstructure v1.4.0 // indirect github.com/qydysky/bili_danmu v0.5.4 - github.com/qydysky/part v0.3.5-0.20201222075205-70243aca6682 // indirect + github.com/qydysky/part v0.3.5-0.20201222123333-27d31033ffec // indirect github.com/shirou/gopsutil v3.20.11+incompatible // indirect github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect golang.org/x/crypto v0.0.0-20201217014255-9d1352758620 // indirect diff --git a/demo/go.sum b/demo/go.sum index 177144c..87ce0a7 100644 --- a/demo/go.sum +++ b/demo/go.sum @@ -78,6 +78,8 @@ github.com/qydysky/part v0.3.5-0.20201222061900-d0c0ca9fc246 h1:MDhL/WQ4fGNjLWnc github.com/qydysky/part v0.3.5-0.20201222061900-d0c0ca9fc246/go.mod h1:SxxNav0Z7DbsDLoG5uxo0wW5EKU/JBu2CAkZzZeLnX0= github.com/qydysky/part v0.3.5-0.20201222075205-70243aca6682 h1:k7YM2PUXxW96cIAludM1zJ4c9Ru6/W5jxJ67HrUht3w= github.com/qydysky/part v0.3.5-0.20201222075205-70243aca6682/go.mod h1:SxxNav0Z7DbsDLoG5uxo0wW5EKU/JBu2CAkZzZeLnX0= +github.com/qydysky/part v0.3.5-0.20201222123333-27d31033ffec h1:Mwrebha+zOcwYRxroUJhWBMgopVoqIyfOEYOeq6idtA= +github.com/qydysky/part v0.3.5-0.20201222123333-27d31033ffec/go.mod h1:SxxNav0Z7DbsDLoG5uxo0wW5EKU/JBu2CAkZzZeLnX0= github.com/qydysky/part/msgq v0.0.0-20201213031129-ca3253dc72ad h1:Jtzf509lQrkUMGTV0Sc6IDCAiR1VrBcHrIban7hpye4= github.com/qydysky/part/msgq v0.0.0-20201213031129-ca3253dc72ad/go.mod h1:w32TkJNVtTJd4LOS09cq+4uYG6itcN2vsqw+slp44Rg= github.com/qydysky/part/msgq v0.0.0-20201213120821-f36e49c32bba h1:1ew9dRpc0Rux0WkWeT/4AE15ynYWmL2D7onJEJIFOB8= -- 2.39.2