Files
acfunlive-remake/input.go
T
2026-09-25 13:16:54 +08:00

102 lines
2.1 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// 命令输入相关
package main
import (
"bufio"
"log"
"os"
"sort"
"time"
)
// 列出正在直播的主播
func listLive() {
streamers.RLock()
lives := make([]streamer, 0, len(streamers.crt))
for _, s := range streamers.crt {
if s.isLiveOn() {
lives = append(lives, s)
}
}
streamers.RUnlock()
sort.Slice(lives, func(i, j int) bool {
return lives[i].UID < lives[j].UID
})
log.Println("正在直播的主播:")
for _, s := range lives {
log.Println(s.longID() + ":" + s.getTitle() + " " + s.getURL())
}
}
// 列出正在录制直播弹幕的主播
func listDanmu() {
lInfoMap.RLock()
danmu := make([]liveInfo, 0, len(lInfoMap.info))
for _, info := range lInfoMap.info {
if info.isDanmu {
danmu = append(danmu, info)
}
}
lInfoMap.RUnlock()
sort.Slice(danmu, func(i, j int) bool {
return danmu[i].uid < danmu[j].uid
})
log.Println("正在录制直播弹幕的主播:")
for _, d := range danmu {
s := streamer{UID: d.uid, Name: getName(d.uid)}
log.Println(s.longID() + ":" + s.getTitle() + " " + s.getURL())
}
}
// 列出正在录制直播视频的主播
func listRecord() {
lInfoMap.RLock()
recs := make([]liveInfo, 0, len(lInfoMap.info))
for _, info := range lInfoMap.info {
if info.isRecording {
recs = append(recs, info)
}
}
lInfoMap.RUnlock()
sort.Slice(recs, func(i, j int) bool {
return recs[i].uid < recs[j].uid
})
log.Println("正在录制直播视频的主播:")
for _, r := range recs {
s := streamer{UID: r.uid, Name: getName(r.uid)}
log.Println(s.longID() + ":" + r.recordFile)
}
}
// 通知 main() 退出程序
func quitRun() {
lPrintln("正在准备退出,请等待...")
q := controlMsg{c: quit}
mainCh <- q
}
// 处理输入
func handleInput() {
defer func() {
if err := recover(); err != nil {
lPrintErr("Recovering from panic in handleInput(), the error is:", err)
lPrintErr("输入处理发生错误,尝试重启输入处理")
time.Sleep(2 * time.Second)
go handleInput()
}
}()
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
handleAllCmd(scanner.Text())
}
err := scanner.Err()
checkErr(err)
}