}
type Common struct {
- PID int //进程id
- Uid int //client uid
- Live []LiveQn //直播流链接
- Live_qn int //当前直播流质量
- Live_want_qn int //期望直播流质量
- Roomid int //房间ID
- Cookie syncmap.Map //Cookie
- Title string //直播标题
- Uname string //主播名
- UpUid int //主播uid
- Rev float64 //营收
- Renqi int //人气
- Watched int //观看人数
- OnlineNum int //在线人数
- GuardNum int //舰长数
- ParentAreaID int //父分区
- AreaID int //子分区
- Locked bool //直播间封禁
- Note string //分区排行
- Live_Start_Time time.Time //直播开始时间
- Liveing bool //是否在直播
- Wearing_FansMedal int //当前佩戴的粉丝牌
- Token string //弹幕钥
- WSURL []string //弹幕链接
- LiveBuvidUpdated time.Time //LIVE_BUVID更新时间
- Stream_url *url.URL //直播Web服务
- Proxy string //全局代理
- AcceptQn map[int]string //允许的直播流质量
- Qn map[int]string //全部直播流质量
- StreamType StreamType //当前直播流类型
- AllStreamType map[string]StreamType //直播流类型
- K_v syncmap.Map //配置文件
- Log *log.Log_interface //日志
- Danmu_Main_mq *mq.Msgq //消息
- ReqPool *pool.Buf[reqf.Req] //请求池
- SerF *web.WebPath //web服务处理
- SerLimit *web.Limits //Web服务连接限制
- StartT time.Time //启动时间
+ PID int `json:"pid"` //进程id
+ Uid int `json:"-"` //client uid
+ Live []LiveQn `json:"-"` //直播流链接
+ Live_qn int `json:"liveQn"` //当前直播流质量
+ Live_want_qn int `json:"-"` //期望直播流质量
+ Roomid int `json:"roomid"` //房间ID
+ Cookie syncmap.Map `json:"-"` //Cookie
+ Title string `json:"title"` //直播标题
+ Uname string `json:"uname"` //主播名
+ UpUid int `json:"upUid"` //主播uid
+ Rev float64 `json:"rev"` //营收
+ Renqi int `json:"renqi"` //人气
+ Watched int `json:"watched"` //观看人数
+ OnlineNum int `json:"onlineNum"` //在线人数
+ GuardNum int `json:"guardNum"` //舰长数
+ ParentAreaID int `json:"parentAreaID"` //父分区
+ AreaID int `json:"areaID"` //子分区
+ Locked bool `json:"locked"` //直播间封禁
+ Note string `json:"note"` //分区排行
+ Live_Start_Time time.Time `json:"liveStartTime"` //直播开始时间
+ Liveing bool `json:"liveing"` //是否在直播
+ Wearing_FansMedal int `json:"-"` //当前佩戴的粉丝牌
+ Token string `json:"-"` //弹幕钥
+ WSURL []string `json:"-"` //弹幕链接
+ LiveBuvidUpdated time.Time `json:"-"` //LIVE_BUVID更新时间
+ Stream_url *url.URL `json:"-"` //直播Web服务
+ Proxy string `json:"-"` //全局代理
+ AcceptQn map[int]string `json:"-"` //允许的直播流质量
+ Qn map[int]string `json:"-"` //全部直播流质量
+ StreamType StreamType `json:"streamType"` //当前直播流类型
+ AllStreamType map[string]StreamType `json:"-"` //直播流类型
+ K_v syncmap.Map `json:"-"` //配置文件
+ Log *log.Log_interface `json:"-"` //日志
+ Danmu_Main_mq *mq.Msgq `json:"-"` //消息
+ ReqPool *pool.Buf[reqf.Req] `json:"-"` //请求池
+ SerF *web.WebPath `json:"-"` //web服务处理
+ SerLimit *web.Limits `json:"-"` //Web服务连接限制
+ StartT time.Time `json:"startT"` //启动时间
}
type LiveQn struct {
"gcCPUFractionPpm": float64(int(memStats.GCCPUFraction*100000000)) / 100,
"gcAvgS": float64(int(gcAvgS*100)) / 100,
},
+ "common": t,
},
},
}.Write(w)
t.log.L(`W: `, `live响应错误`)
t.common.Live = t.common.Live[1:]
} else if r.Response.StatusCode&200 != 200 {
- t.log.L(`W: `, `live响应错误`, r.Response.Status, string(r.Respon))
+ t.log.L(`W: `, `live响应错误`, r.Response.Status)
t.common.Live = t.common.Live[1:]
}
t.reqPool.Put(r)
}()
rc, rw := io.Pipe()
- var leastReadUnix atomic.Int64
+ var (
+ leastReadUnix atomic.Int64
+ readTO int64 = 5
+ )
leastReadUnix.Store(time.Now().Unix())
// read timeout
go func() {
- timer := time.NewTicker(5 * time.Second)
+ timer := time.NewTicker(time.Duration(readTO * int64(time.Second)))
defer timer.Stop()
for {
case <-cancelC.Done():
return
case curT := <-timer.C:
- if curT.Unix()-leastReadUnix.Load() > 5 {
- t.log.L(`W: `, "5s未接收到任何数据")
+ if curT.Unix()-leastReadUnix.Load() > readTO {
+ t.log.L(`W: `, fmt.Sprintf("%vs未接收到有效数据", readTO))
// 5s未接收到任何数据
r.Cancel()
return
t.Stream_msg.PushLock_tag(`close`, nil)
break
}
- leastReadUnix.Store(time.Now().Unix())
skip := true
select {
//丢弃所有数据
buff.Reset()
}
+ // 存在有效数据
+ if len(front_buf) != 0 || len(t.first_buf) != 0 {
+ leastReadUnix.Store(time.Now().Unix())
+ }
if len(front_buf) != 0 && len(t.first_buf) == 0 {
t.first_buf = make([]byte, len(front_buf))
copy(t.first_buf, front_buf)
NoResponse: true,
Async: true,
Proxy: t.common.Proxy,
+ WriteLoopTO: 3000,
Header: map[string]string{
`Host`: surl.Host,
`User-Agent`: `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0`,
continue
}
cmdlog.L(`W: `, "输入错误", inputs)
+ } else if c.C.Roomid == 0 {
+ cmdlog.L(`W: `, "输入错误", inputs)
} else {
if reply.StreamOStatus(c.C.Roomid) {
reply.StreamOStop(c.C.Roomid)
require (
github.com/gotk3/gotk3 v0.6.2
- github.com/mdp/qrterminal/v3 v3.0.0
- github.com/qydysky/part v0.28.1-0.20230529171227-d4a6f98e0263
+ github.com/mdp/qrterminal/v3 v3.1.1
+ github.com/qydysky/part v0.28.1-0.20230602190805-e713cd3914aa
github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
golang.org/x/text v0.9.0
require (
github.com/google/uuid v1.3.0
- golang.org/x/exp v0.0.0-20230425010034-47ecfdc1ba53
+ golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1
)
require (
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect
- github.com/mattn/go-isatty v0.0.18 // indirect
+ github.com/mattn/go-isatty v0.0.19 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
lukechampine.com/uint128 v1.3.0 // indirect
modernc.org/cc/v3 v3.40.0 // indirect
modernc.org/ccgo/v3 v3.16.13 // indirect
- modernc.org/libc v1.22.5 // indirect
+ modernc.org/libc v1.22.6 // indirect
modernc.org/mathutil v1.5.0 // indirect
modernc.org/memory v1.5.0 // indirect
modernc.org/opt v0.1.3 // indirect
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
github.com/thedevsaddam/gojsonq/v2 v2.5.2 // indirect
github.com/tklauser/go-sysconf v0.3.11 // indirect
- github.com/tklauser/numcpus v0.6.0 // indirect
- github.com/yusufpapurcu/wmi v1.2.2 // indirect
+ github.com/tklauser/numcpus v0.6.1 // indirect
+ github.com/yusufpapurcu/wmi v1.2.3 // indirect
golang.org/x/mod v0.10.0 // indirect
- golang.org/x/net v0.9.0 // indirect
+ golang.org/x/net v0.10.0 // indirect
golang.org/x/sys v0.8.0 // indirect
- golang.org/x/tools v0.8.0 // indirect
+ golang.org/x/tools v0.9.3 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
modernc.org/sqlite v1.22.1
rsc.io/qr v0.2.0 // indirect
github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI=
github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
-github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
-github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
-github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98=
-github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA=
+github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y=
-github.com/mdp/qrterminal v1.0.1/go.mod h1:Z33WhxQe9B6CdW37HaVqcRKzP+kByF3q/qLxOGe12xQ=
-github.com/mdp/qrterminal/v3 v3.0.0 h1:ywQqLRBXWTktytQNDKFjhAvoGkLVN3J2tAFZ0kMd9xQ=
-github.com/mdp/qrterminal/v3 v3.0.0/go.mod h1:NJpfAs7OAm77Dy8EkWrtE4aq+cE6McoLXlBqXQEwvE0=
+github.com/mdp/qrterminal/v3 v3.1.1 h1:cIPwg3QU0OIm9+ce/lRfWXhPwEjOSKwk3HBwL3HBTyc=
+github.com/mdp/qrterminal/v3 v3.1.1/go.mod h1:5lJlXe7Jdr8wlPDdcsJttv1/knsRgzXASyr4dcGZqNU=
github.com/miekg/dns v1.1.54 h1:5jon9mWcb0sFJGpnI99tOMhCPyJ+RPVz5b63MQG0VWI=
github.com/miekg/dns v1.1.54/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
-github.com/qydysky/part v0.28.1-0.20230529171227-d4a6f98e0263 h1:kkumZFaAahNhSFjeY1VCihzG/DOATDtXLAyhsh9R2AE=
-github.com/qydysky/part v0.28.1-0.20230529171227-d4a6f98e0263/go.mod h1:IEMpGB0NBl6MklZmoenSpS5ChhaIL79JYFo6mF1UkAU=
+github.com/qydysky/part v0.28.1-0.20230602174331-a838e316668d h1:NDk77uktMXlfEXJEooVLlYcOLRr4htDRaa5jzFmGJXU=
+github.com/qydysky/part v0.28.1-0.20230602174331-a838e316668d/go.mod h1:xSAOQyg7Wyd+QtXxmHBodYzx3y5HJnfr4R29MXxNKF4=
+github.com/qydysky/part v0.28.1-0.20230602190805-e713cd3914aa h1:CBCY0tJB8M0KwmZ/BIoydBrBYV0lpgPLGCgT3YaGSLY=
+github.com/qydysky/part v0.28.1-0.20230602190805-e713cd3914aa/go.mod h1:xSAOQyg7Wyd+QtXxmHBodYzx3y5HJnfr4R29MXxNKF4=
github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/thedevsaddam/gojsonq/v2 v2.5.2/go.mod h1:bv6Xa7kWy82uT0LnXPE2SzGqTj33TAEeR560MdJkiXs=
github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM=
github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI=
-github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms=
github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4=
-github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg=
-github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
-golang.org/x/exp v0.0.0-20230425010034-47ecfdc1ba53 h1:5llv2sWeaMSnA3w2kS57ouQQ4pudlXrR0dCgw51QK9o=
-golang.org/x/exp v0.0.0-20230425010034-47ecfdc1ba53/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w=
+github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk=
+github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY=
+github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
+github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc=
+golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w=
golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk=
golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM=
-golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns=
-golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
-golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M=
+golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
+golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
-golang.org/x/tools v0.8.0 h1:vSDcovVPld282ceKgDimkRSC8kpaH1dgyc9UMzlt84Y=
-golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4=
+golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM=
+golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY=
modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk=
modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM=
-modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE=
-modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY=
+modernc.org/libc v1.22.6 h1:cbXU8R+A6aOjRuhsFh3nbDWXO/Hs4ClJRXYB11KmPDo=
+modernc.org/libc v1.22.6/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY=
modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ=
modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E=
modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds=