102 lines
2.1 KiB
Go
102 lines
2.1 KiB
Go
// 命令输入相关
|
||
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)
|
||
}
|