From d225a875f915fd6eb26eb41c5d93335353596055 Mon Sep 17 00:00:00 2001 From: qydysky Date: Sat, 12 Dec 2020 08:44:50 +0800 Subject: [PATCH] =?utf8?q?=E8=90=A5=E6=94=B6=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- F/api.go | 2 ++ Reply/Reply.go | 16 +++++------ Reply/gtk.go | 2 +- bili_danmu.go | 71 ++++++++++++++++++++++++++++++++++--------------- demo/ui/2.glade | 3 +++ 5 files changed, 62 insertions(+), 32 deletions(-) diff --git a/F/api.go b/F/api.go index d53ae62..2d43a01 100644 --- a/F/api.go +++ b/F/api.go @@ -440,11 +440,13 @@ func (i *api) Get_OnlineGoldRank() { return } +var guard_num_get_limit = p.Limit(1,1000,2000)//频率限制1次/1s,最大等待时间2s func (i *api) Get_guardNum() { if i.Uid == 0 || c.Roomid == 0 { apilog.Base(1, "Get_guardNum").E("i.Uid == 0 || c.Roomid == 0") return } + if guard_num_get_limit.TO() {return}//超额请求阻塞,超时将取消 req := p.Req() if err := req.Reqf(p.Rval{ diff --git a/Reply/Reply.go b/Reply/Reply.go index 4eb5eb5..5f37655 100644 --- a/Reply/Reply.go +++ b/Reply/Reply.go @@ -125,12 +125,10 @@ func (replyF) user_toast_msg(s string){ switch op_type.(float64) { case 1: sh = append(sh, "购买了") - c.GuardNum += 1 case 2: sh = append(sh, "续费了") case 3: sh = append(sh, "自动续费了") - c.GuardNum += 1 default: msglog.W(s) sh = append(sh, op_type) @@ -154,6 +152,9 @@ func (replyF) user_toast_msg(s string){ } {//额外 ass Assf(fmt.Sprintln(sh...)) + c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{//使用连续付费的新舰长无法区分,刷新舰长数 + Class:`guard_update`, + }) } fmt.Println("\n====") fmt.Println(sh...) @@ -201,11 +202,7 @@ func (replyF) special_gift(s string){ return } if content != nil { - sh = append(sh, "节奏风暴", content, "¥ 100") - c.Danmu_Main_mq.Push(c.Danmu_Main_mq_item{//传入消息队列 - Class:`c.Rev_add`, - Data:float64(100), - }) + sh = append(sh, "节奏风暴", content) } {//额外 Assf(fmt.Sprintln(sh...)) @@ -332,6 +329,7 @@ func (replyF) send_gift(s string){ } if len(sh) == 0 {return} + msglog.Base(1, "礼").Fileonly(true).I(sh...).Fileonly(false) //小于3万金瓜子 if allprice < 30 {msglog.T(sh...);return} @@ -345,8 +343,6 @@ func (replyF) send_gift(s string){ // Gui_show("\n====") Gui_show(Itos(sh), "0gift") // Gui_show("====\n") - - msglog.Base(1, "礼").Fileonly(true).I(sh...).Fileonly(false) } //Msg-房间封禁信息 @@ -403,7 +399,7 @@ func (replyF) live(s string) { go Saveflvf() } { - c.Rev = 0 //营收 + c.Rev = 0.0 //营收 c.Liveing = true //直播i标志 c.Live_Start_Time = time.Now() //开播h时间 } diff --git a/Reply/gtk.go b/Reply/gtk.go index 3b1b454..8ab5829 100644 --- a/Reply/gtk.go +++ b/Reply/gtk.go @@ -382,6 +382,7 @@ func Gtk_danmu() { application.Connect("activate", func() { go func(){ for danmu_win_running { + time.Sleep(time.Second) if len(Gtk_danmuChan) == 0 {continue} for el := keep_list.Front(); el != nil && time.Now().After(el.Value.(time.Time));el = el.Next() { keep_list.Remove(el) @@ -391,7 +392,6 @@ func Gtk_danmu() { y(<-Gtk_danmuChan,load_face(<-Gtk_danmuChan_uid)) return true }) - time.Sleep(time.Second) } }() diff --git a/bili_danmu.go b/bili_danmu.go index 4ea8799..a6ba32a 100644 --- a/bili_danmu.go +++ b/bili_danmu.go @@ -32,25 +32,29 @@ func Demo(roomid ...int) { if _,ok := c.Default_qn[*live_qn]; ok{c.Live_qn = *live_qn} - var room = *groomid - if room == 0 && len(roomid) != 0 { - room = roomid[0] - } + var exit_sign bool + var change_room_chan = make(chan bool,1) - fmt.Printf("输入房间号: ") - if room == 0 { - _, err := fmt.Scanln(&room) - if err != nil { - danmulog.E("输入错误", err) - return + go func(){ + var room = *groomid + if room == 0 && len(roomid) != 0 { + room = roomid[0] } - } else { - fmt.Print(strconv.Itoa(room), "\n") - } - c.Roomid = room - - var exit_sign bool - var change_room_chan = make(chan bool) + if room == 0 { + fmt.Printf("输入房间号: ") + _, err := fmt.Scanln(&room) + if err != nil { + danmulog.E("输入错误", err) + return + } + } else { + fmt.Print("房间号: ", strconv.Itoa(room), "\n") + } + if c.Roomid == 0 { + c.Roomid = room + change_room_chan <- true + } + }() go func(){ var ( @@ -64,19 +68,23 @@ func Demo(roomid ...int) { } else { switch d.Class { case `change_room`: - c.Rev = 0 //营收 + c.Rev = 0.0 //营收 c.Renqi = 1//人气置1 change_room_chan <- true case `c.Rev_add`: c.Rev += d.Data.(float64) case `c.Renqi`: - c.Renqi = d.Data.(int) + if tmp,ok := d.Data.(int);ok{ + c.Renqi = tmp + } default: } } } }() + <-change_room_chan + for !exit_sign { //获取房间相关信息 api := F.New_api(c.Roomid).Get_host_Token().Get_live() @@ -122,8 +130,29 @@ func Demo(roomid ...int) { c.Live = api.Live c.Cookie = f //获取过往营收 舰长数量 - go api.Get_OnlineGoldRank() - go api.Get_guardNum() + // 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: + } + } + } + }() if p.Checkfile().IsExist("cookie.txt") {//附加功能 弹幕机 reply.Danmuji_auto(1) diff --git a/demo/ui/2.glade b/demo/ui/2.glade index 097c471..fdbcac2 100644 --- a/demo/ui/2.glade +++ b/demo/ui/2.glade @@ -54,6 +54,7 @@ True False + 每3s更新一次 直播时长 @@ -65,6 +66,7 @@ True False + 启动后的统计数据 营收 @@ -128,6 +130,7 @@ True False + 每半分钟更新一次 人气 -- 2.39.2