176 lines
4.3 KiB
Go
176 lines
4.3 KiB
Go
|
package channel
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"strconv"
|
||
|
"time"
|
||
|
|
||
|
"go-common/app/interface/main/app-channel/model/feed"
|
||
|
"go-common/library/log"
|
||
|
"go-common/library/log/infoc"
|
||
|
)
|
||
|
|
||
|
type feedInfoc struct {
|
||
|
mobiApp string
|
||
|
device string
|
||
|
build string
|
||
|
now string
|
||
|
pull string
|
||
|
loginEvent string
|
||
|
channelID string
|
||
|
channelName string
|
||
|
mid string
|
||
|
buvid string
|
||
|
displayID string
|
||
|
feed *feed.Show
|
||
|
Items []*feed.Item
|
||
|
isRec string
|
||
|
topChannel string
|
||
|
ServerCode string
|
||
|
}
|
||
|
|
||
|
type channelOperation struct {
|
||
|
mobiApp string
|
||
|
device string
|
||
|
build string
|
||
|
now string
|
||
|
channelID string
|
||
|
operation string
|
||
|
mid string
|
||
|
from string
|
||
|
}
|
||
|
|
||
|
// OperationInfoc channel operation infoc
|
||
|
func (s *Service) OperationInfoc(mobiApp, device, operation string, build, from int, channelID, mid int64, now time.Time) {
|
||
|
infoc := &channelOperation{
|
||
|
mobiApp: mobiApp,
|
||
|
device: device,
|
||
|
build: strconv.Itoa(build),
|
||
|
now: now.Format("2006-01-02 15:04:05"),
|
||
|
channelID: strconv.FormatInt(channelID, 10),
|
||
|
operation: operation,
|
||
|
mid: strconv.FormatInt(mid, 10),
|
||
|
from: strconv.Itoa(from),
|
||
|
}
|
||
|
s.infoc(infoc)
|
||
|
}
|
||
|
|
||
|
func (s *Service) infoc(i interface{}) {
|
||
|
select {
|
||
|
case s.logCh <- i:
|
||
|
default:
|
||
|
log.Warn("infocproc chan full")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (s *Service) infocproc() {
|
||
|
const (
|
||
|
noItem = `[]`
|
||
|
)
|
||
|
var (
|
||
|
msg1 = []byte(`[`)
|
||
|
msg2 = []byte(`{"goto":"`)
|
||
|
msg3 = []byte(`","param":"`)
|
||
|
msg4 = []byte(`","uri":"`)
|
||
|
msg5 = []byte(`","r_pos":`)
|
||
|
msg6 = []byte(`,"from_type":"`)
|
||
|
msg7 = []byte(`"},`)
|
||
|
msg8 = []byte(`]`)
|
||
|
buf bytes.Buffer
|
||
|
list string
|
||
|
feedInf2 = infoc.New(s.c.FeedInfoc2)
|
||
|
channelnf2 = infoc.New(s.c.ChannelInfoc2)
|
||
|
)
|
||
|
for {
|
||
|
i, ok := <-s.logCh
|
||
|
if !ok {
|
||
|
log.Warn("infoc proc exit")
|
||
|
return
|
||
|
}
|
||
|
var pos int
|
||
|
switch l := i.(type) {
|
||
|
case *feedInfoc:
|
||
|
if l.feed != nil {
|
||
|
if f := l.feed; len(f.Feed) == 0 && f.Topic == nil {
|
||
|
list = noItem
|
||
|
} else {
|
||
|
buf.Write(msg1)
|
||
|
if t := f.Topic; t != nil {
|
||
|
buf.Write(msg2)
|
||
|
buf.WriteString(t.Goto)
|
||
|
buf.Write(msg3)
|
||
|
buf.WriteString(t.Param)
|
||
|
buf.Write(msg4)
|
||
|
buf.WriteString(t.URI)
|
||
|
buf.Write(msg5)
|
||
|
pos = t.Pos
|
||
|
buf.WriteString(strconv.Itoa(pos))
|
||
|
buf.Write(msg6)
|
||
|
buf.WriteString(t.FromType)
|
||
|
buf.Write(msg7)
|
||
|
}
|
||
|
if items := f.Feed; len(items) == 0 {
|
||
|
buf.Truncate(buf.Len() - 1)
|
||
|
} else {
|
||
|
for _, item := range items {
|
||
|
buf.Write(msg2)
|
||
|
buf.WriteString(item.Goto)
|
||
|
buf.Write(msg3)
|
||
|
buf.WriteString(item.Param)
|
||
|
buf.Write(msg4)
|
||
|
buf.WriteString(item.URI)
|
||
|
buf.Write(msg5)
|
||
|
if item.Pos == 0 {
|
||
|
pos++
|
||
|
} else {
|
||
|
pos = item.Pos
|
||
|
}
|
||
|
buf.WriteString(strconv.Itoa(pos))
|
||
|
buf.Write(msg6)
|
||
|
buf.WriteString(item.FromType)
|
||
|
buf.Write(msg7)
|
||
|
}
|
||
|
buf.Truncate(buf.Len() - 1)
|
||
|
}
|
||
|
buf.Write(msg8)
|
||
|
list = buf.String()
|
||
|
buf.Reset()
|
||
|
}
|
||
|
} else if items := l.Items; len(items) > 0 {
|
||
|
buf.Write(msg1)
|
||
|
for _, item := range items {
|
||
|
buf.Write(msg2)
|
||
|
buf.WriteString(item.Goto)
|
||
|
buf.Write(msg3)
|
||
|
buf.WriteString(item.Param)
|
||
|
buf.Write(msg4)
|
||
|
buf.WriteString(item.URI)
|
||
|
buf.Write(msg5)
|
||
|
if item.Pos == 0 {
|
||
|
pos++
|
||
|
} else {
|
||
|
pos = item.Pos
|
||
|
}
|
||
|
buf.WriteString(strconv.Itoa(pos))
|
||
|
buf.Write(msg6)
|
||
|
buf.WriteString(item.FromType)
|
||
|
buf.Write(msg7)
|
||
|
}
|
||
|
buf.Truncate(buf.Len() - 1)
|
||
|
buf.Write(msg8)
|
||
|
list = buf.String()
|
||
|
buf.Reset()
|
||
|
} else if len(l.Items) == 0 {
|
||
|
list = noItem
|
||
|
}
|
||
|
log.Info("channel_infoc_index(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)_list(%s)", l.mobiApp, l.device, l.build, l.now, l.pull, l.loginEvent,
|
||
|
l.channelID, l.channelName, l.mid, l.buvid, l.displayID, l.ServerCode, list)
|
||
|
feedInf2.Info(l.mobiApp, l.device, l.build, l.now, l.pull, l.loginEvent, l.channelID, l.channelName, l.mid, l.buvid, l.displayID,
|
||
|
list, "9", l.isRec, l.topChannel, l.ServerCode)
|
||
|
case *channelOperation:
|
||
|
log.Info("channel_infoc_operation_(%s,%s,%s,%s,%s,%s,%s,%s)", l.mobiApp, l.device, l.build, l.now, l.channelID, l.operation, l.mid, l.from)
|
||
|
channelnf2.Info(l.mobiApp, l.device, l.build, l.now, l.channelID, l.operation, l.mid, l.from)
|
||
|
}
|
||
|
}
|
||
|
}
|